diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000000..f570dc21032 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +#pretending we're C because otherwise ruby/rvm will initialize, even with "language: dm". +language: c + +env: + BYOND_MAJOR="503" + BYOND_MINOR="1224" + +before_install: + - sudo apt-get update -qq + - sudo apt-get install libc6:i386 libgcc1:i386 libstdc++6:i386 -qq + +install: + - curl "http://www.byond.com/download/build/${BYOND_MAJOR}/${BYOND_MAJOR}.${BYOND_MINOR}_byond_linux.zip" -o byond.zip + - unzip byond.zip + - cd byond + - sudo make install + - cd .. + +script: + - DreamMaker tgstation.dme diff --git a/README.md b/README.md index 136b237edfa..1d0b30aa57a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -/tg/station 13 v1.0 - 6 October 2010 +/tg/station 13 v1.0 - 6 October 2010 [![Build Status](http://hibernia.fallemmc.com:8090/job/tgstation/badge/icon)](http://hibernia.fallemmc.com:8090/job/tgstation/) Website: http://ss13.eu @@ -118,7 +118,7 @@ As BYOND's Dream Maker is an object oriented language, code must be object orien You must write BYOND code with absolute pathing, like so: -```DM +```C++ /obj/item/weapon/baseball_bat name = "baseball bat" diff --git a/maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/Academy.dmm similarity index 100% rename from maps/RandomZLevels/Academy.dmm rename to _maps/RandomZLevels/Academy.dmm diff --git a/maps/RandomZLevels/beach.dmm b/_maps/RandomZLevels/beach.dmm similarity index 100% rename from maps/RandomZLevels/beach.dmm rename to _maps/RandomZLevels/beach.dmm diff --git a/maps/RandomZLevels/blackmarketpackers.dmm b/_maps/RandomZLevels/blackmarketpackers.dmm similarity index 100% rename from maps/RandomZLevels/blackmarketpackers.dmm rename to _maps/RandomZLevels/blackmarketpackers.dmm diff --git a/_maps/RandomZLevels/box2550Away.dmm b/_maps/RandomZLevels/box2550Away.dmm new file mode 100644 index 00000000000..5b42f7c5a8d --- /dev/null +++ b/_maps/RandomZLevels/box2550Away.dmm @@ -0,0 +1,2091 @@ +"aa" = (/turf/space,/area) +"ab" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area) +"ac" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{tag = "icon-solarpanel"; icon_state = "solarpanel"},/area/awaymission/box2550Away/solar) +"ad" = (/obj/structure/lattice,/turf/space,/area) +"ae" = (/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/solar) +"af" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ag" = (/obj/machinery/door/airlock/external{name = "Prison Solar Maintenance"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ah" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ai" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ak" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"al" = (/obj/machinery/power/tracker,/turf/simulated/floor/plating,/area) +"am" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"an" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ao" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ap" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/security) +"aq" = (/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ar" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"as" = (/obj/machinery/power/smes{charging = 1},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"at" = (/obj/machinery/power/terminal{dir = 8},/obj/machinery/door/window/westleft{dir = 2; icon_state = "left"; name = "Prison Solar Control"; req_access_txt = "1"; tag = "icon-left"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"au" = (/obj/structure/window/reinforced,/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"av" = (/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

Three bold guardians stand small, treading closer with a crawl. Toxic fumes to one side hold, on the other thou will findest gold.

HONK!

"; layer = 3; name = "Old Note #10"},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"aw" = (/obj/structure/stool/bed,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ax" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = 0; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ay" = (/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"az" = (/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"aA" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aB" = (/obj/structure/closet/secure_closet/brig{name = "Prison Locker"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aC" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aE" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aF" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"aG" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aH" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = 0; req_access_txt = "1"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"aI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aJ" = (/obj/structure/computerframe,/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aK" = (/obj/structure/computerframe,/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"aL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aM" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aO" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aP" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"aQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aR" = (/turf/simulated/floor/plating/airless,/area) +"aS" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/stool/bed,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aU" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"aV" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"aW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"aX" = (/obj/structure/computerframe{anchored = 1; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) +"aY" = (/obj/structure/table{dir = 8; icon_state = "table_horizontal"; pixel_y = 0},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"aZ" = (/obj/structure/table{dir = 4; icon_state = "table_horizontal"; pixel_y = 0},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"ba" = (/obj/machinery/computer/card,/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) +"bb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"be" = (/turf/simulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/security) +"bf" = (/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"bg" = (/turf/simulated/floor{tag = "icon-redcorner (NORTH)"; icon_state = "redcorner"; dir = 1},/area/awaymission/box2550Away/security) +"bh" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bi" = (/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/security) +"bj" = (/turf/simulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/security) +"bk" = (/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/security) +"bl" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bo" = (/obj/structure/computerframe{anchored = 1; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-corner_east"; icon_state = "corner_east"},/area/awaymission/box2550Away/security) +"bp" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "wall_space"},/area) +"bq" = (/turf/simulated/shuttle/wall,/area) +"br" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_space"},/area) +"bs" = (/obj/machinery/mass_driver{dir = 4; id = "prisongun"},/obj/machinery/door/window/westleft{name = "Prison Mass Driver"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bt" = (/obj/machinery/door/poddoor{id = "prisongun"; name = "Prison Mass Driver"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bv" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bw" = (/turf/simulated/shuttle/floor,/area) +"bx" = (/obj/structure/computerframe{anchored = 1; req_access_txt = "1"},/turf/simulated/shuttle/floor,/area) +"by" = (/obj/machinery/driver_button{id = "prisongun"; name = "Prison Mass Driver Button"; pixel_x = 24; req_access_txt = "1"; text = "chapel"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"bz" = (/turf/simulated/wall/r_wall,/area) +"bA" = (/obj/machinery/door/airlock/external{name = "Prison Airlock"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bB" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area) +"bC" = (/obj/machinery/door/airlock/glass{name = "Gas Chamber"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bD" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bE" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area) +"bF" = (/obj/machinery/driver_button{id = "prisonvent"; name = "Gas Chamber Vent Button"; pixel_x = 24; req_access_txt = "1"; text = "gas chamber"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"bG" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_east"},/area/awaymission/box2550Away/security) +"bH" = (/obj/structure/closet/emcloset,/obj/effect/landmark/corpse/away/box2550/hos,/turf/simulated/floor{icon_state = "corner_northeast"; tag = "icon-corner_northeast"},/area/awaymission/box2550Away/security) +"bI" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating/airless,/area) +"bJ" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"bK" = (/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"bL" = (/obj/machinery/door/poddoor{id = "prisonvent"; name = "Gas Chamber Vent"},/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/security) +"bM" = (/turf/simulated/floor{tag = "icon-arrival (SOUTHWEST)"; icon_state = "arrival"; dir = 10},/area/awaymission/box2550Away/security) +"bN" = (/turf/simulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/security) +"bO" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/security) +"bP" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/security) +"bQ" = (/turf/simulated/shuttle/wall{icon_state = "wall_space"},/area) +"bR" = (/obj/structure/shuttle/engine/propulsion{dir = 2; icon_state = "propulsion_l"; tag = "icon-burst_s"},/turf/space,/area) +"bS" = (/obj/structure/shuttle/engine/propulsion{dir = 2; icon_state = "propulsion_r"; tag = "icon-burst_s"},/turf/space,/area) +"bT" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall_space"},/area) +"bU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"bV" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"bW" = (/obj/structure/grille,/turf/space,/area) +"bX" = (/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area) +"bY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area) +"bZ" = (/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"ca" = (/turf/simulated/wall,/area/awaymission/box2550Away/security) +"cb" = (/obj/structure/rack{dir = 1},/obj/item/clothing/head/helmet/swat{desc = "A helmet used in special operations."; name = "SWAT helmet"},/obj/item/clothing/gloves/combat,/obj/item/clothing/shoes/swat{desc = "Operative gear for special circumstances."},/obj/item/clothing/suit/armor/swat{desc = "A powerful suit of reinforced armor."; name = "SWAT suit"},/obj/item/weapon/shield/riot,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cc" = (/obj/structure/rack{dir = 1},/obj/item/clothing/gloves/combat,/obj/item/clothing/shoes/swat{desc = "Operative gear for special circumstances."},/obj/item/clothing/suit/armor/swat{desc = "A powerful suit of reinforced armor."; name = "SWAT suit"},/obj/item/clothing/head/helmet/swat{desc = "A helmet used in special operations."; name = "SWAT helmet"},/obj/item/weapon/shield/riot,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cd" = (/obj/machinery/flasher/portable,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ce" = (/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cf" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -2; pixel_y = 2; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cg" = (/obj/machinery/vending/security,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ch" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ci" = (/obj/item/weapon/extinguisher,/obj/item/device/radio/intercom{dir = 1; pixel_y = 23; frequency = 1447; broadcasting = 1},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cj" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ck" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"cl" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"cm" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"cn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"co" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cp" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cq" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cr" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cs" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/handcuffs/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ct" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/machinery/recharger,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"cv" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"cw" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"cx" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"cy" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -2; pixel_y = 2; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cz" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/device/assembly/timer,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cA" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/radio,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cB" = (/obj/structure/closet/box2550away/red,/obj/effect/landmark/corpse/away/box2550/sec,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"cD" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"cE" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/stamp/hos,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cF" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cG" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cH" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cI" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/paper_bin,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/clothing/glasses/sunglasses/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cK" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"cL" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cM" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/security) +"cN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTHEAST)"; icon_state = "rwindow"; dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"cO" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp,/obj/machinery/door/window/southleft{name = "Armory Delivery"; req_access_txt = "1"},/obj/machinery/door/window/southleft{dir = 1; name = "Armory Delivery"; req_access_txt = "3"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cP" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTHEAST)"; icon_state = "rwindow"; dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"cQ" = (/obj/machinery/door/airlock/security{name = "Warden"; req_access_txt = "3"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cR" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper/sop,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cS" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/flash/box2550away,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"cT" = (/obj/structure/closet/wardrobe/orange,/turf/simulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) +"cU" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) +"cV" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon = 'icons/obj/doors/windoor.dmi'; icon_state = "right"; name = "Head of Security"; req_access_txt = "19"},/turf/simulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/security) +"cW" = (/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/security) +"cX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"cY" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/security) +"cZ" = (/turf/simulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) +"da" = (/turf/simulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) +"db" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/recharger,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dc" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/radio,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dd" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/box/trackimp{pixel_x = -1},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"de" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"df" = (/obj/structure/closet/secure_closet/box2550away/hos,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/security) +"dh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"di" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; location = "Warden"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/security) +"dj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/secure_closet/box2550away/security,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dk" = (/obj/structure/closet/secure_closet/box2550away/security,/obj/structure/disposalpipe/junction{dir = 0; icon_state = "pipe-y"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dl" = (/obj/structure/closet/secure_closet/box2550away/security,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dm" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"do" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"dp" = (/turf/simulated/floor{icon_state = "corner_northwest"; tag = "icon-corner_northwest"},/area/awaymission/box2550Away/security) +"dq" = (/obj/structure/computerframe{anchored = 1; req_access_txt = "1"},/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_north"},/area/awaymission/box2550Away/security) +"dr" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/machinery/door/window/southleft{name = "Security"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"ds" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/machinery/door/window/southright{name = "Security"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/security) +"dt" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"du" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dw" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"dx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dy" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dz" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"dA" = (/obj/machinery/door/airlock/external{name = "Brig Airlock"; req_access_txt = "1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"dB" = (/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/security) +"dC" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/security) +"dD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"dE" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"dF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"dG" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/security) +"dH" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"dI" = (/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/security) +"dJ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dK" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"dL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"dM" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell1"; name = "Brig Cell 1"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) +"dN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"dO" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell2"; name = "Brig Cell 2"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"dP" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell3"; name = "Brig Cell 3"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"dQ" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell4"; name = "Brig Cell 4"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"dR" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell5"; name = "Brig Cell 5"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"dS" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell6"; name = "Brig Cell 6"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"dT" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell7"; name = "Brig Cell 7"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"dU" = (/obj/machinery/door/window/brigdoor/southleft{id = "cell8"; name = "Brig Cell 8"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"dV" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dW" = (/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"dX" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"dY" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"dZ" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ea" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"eb" = (/obj/machinery/flasher{id = "cell1"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ec" = (/obj/machinery/flasher{id = "cell2"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ed" = (/obj/machinery/flasher{id = "cell3"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"ee" = (/obj/machinery/flasher{id = "cell4"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"ef" = (/obj/machinery/flasher{id = "cell5"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"eg" = (/obj/machinery/flasher{id = "cell6"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"eh" = (/obj/machinery/flasher{id = "cell7"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"ei" = (/obj/machinery/flasher{id = "cell8"; pixel_x = -24},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"ej" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"ek" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"el" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 1"; id = 1},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"em" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 2"; id = 2},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"en" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 3"; id = 3},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"eo" = (/obj/structure/closet/secure_closet/brig{name = "Brig Locker 4"; id = 4},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"ep" = (/obj/structure/closet/secure_closet/brig{id = 4; name = "Brig Locker 5"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"eq" = (/obj/structure/closet/secure_closet/brig{id = 3; name = "Brig Locker 6"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"er" = (/obj/structure/closet/secure_closet/brig{id = 2; name = "Brig Locker 7"},/turf/simulated/floor,/area/awaymission/box2550Away/security) +"es" = (/obj/structure/closet/secure_closet/brig{id = 1; name = "Brig Locker 8"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/security) +"et" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"eu" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"ev" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ew" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ex" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ey" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ez" = (/obj/machinery/door/window/southleft{name = "Security"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) +"eA" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"eB" = (/obj/machinery/door/window/southright{name = "Security"; req_access_txt = "1"},/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) +"eC" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"eD" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Brig Lockdown Gate"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"eE" = (/turf/simulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/general) +"eF" = (/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/general) +"eG" = (/turf/simulated/floor{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/awaymission/box2550Away/general) +"eH" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"eI" = (/turf/simulated/floor,/area/awaymission/box2550Away/general) +"eJ" = (/turf/simulated/floor{tag = "icon-redcorner (NORTH)"; icon_state = "redcorner"; dir = 1},/area/awaymission/box2550Away/general) +"eK" = (/obj/machinery/bot/secbot/beepsky,/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA"; location = "Security"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"eL" = (/turf/simulated/floor{tag = "icon-redcorner (EAST)"; icon_state = "redcorner"; dir = 4},/area/awaymission/box2550Away/general) +"eM" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/general) +"eN" = (/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/general) +"eO" = (/obj/structure/noticeboard{name = "Wanted List"; desc = "A board for pinning important bounty information."; pixel_x = 1; pixel_y = -27},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/general) +"eP" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/general) +"eQ" = (/obj/structure/lattice,/turf/space,/area/awaymission/box2550Away/solar) +"eR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"eS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"eT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"eU" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"eV" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"eW" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"eX" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"eY" = (/turf/simulated/wall,/area/awaymission/box2550Away/general) +"eZ" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fa" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) +"fb" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) +"fc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fd" = (/obj/structure/stool{pixel_y = 8},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fe" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"; name = "cabin door"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ff" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"fg" = (/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fh" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fi" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fj" = (/obj/machinery/door/airlock/glass{name = "Male Living Quarters"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fk" = (/obj/machinery/door/airlock/glass{name = "Female Living Quarters"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fl" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fm" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fn" = (/obj/machinery/door/window/northleft{name = "cabin door"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fo" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fp" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"fq" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"fr" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"ft" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fu" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fv" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fw" = (/obj/machinery/door/airlock/external{name = "Auxillary Solar Maintenance"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fx" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fy" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fz" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area) +"fA" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fB" = (/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"fC" = (/obj/machinery/bookbinder{pixel_y = 9},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"fD" = (/obj/item/device/radio/intercom{dir = 1; pixel_y = 20},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"fE" = (/obj/structure/table/reinforced,/obj/machinery/librarycomp{pixel_y = 8},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"fF" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"fG" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"fH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fI" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fJ" = (/obj/item/device/radio/intercom{broadcasting = 1; pixel_y = 20},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fM" = (/obj/machinery/door/airlock{name = "Restrooms"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fN" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) +"fO" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/awaymission/box2550Away/general) +"fP" = (/obj/structure/rack,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fQ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"fR" = (/obj/structure/table/reinforced,/obj/item/weapon/dice/d20,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"fS" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"fT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"fU" = (/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/general) +"fV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"fX" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/storage) +"fY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"fZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"ga" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"gb" = (/obj/structure/sink{pixel_y = 20},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"gc" = (/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"gd" = (/obj/machinery/door/airlock{name = "Unit 1"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"ge" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal{density = 0; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."; dir = 8; icon = 'icons/obj/watercloset.dmi'; icon_state = "toilet00"; name = "toilet"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"gf" = (/obj/structure/rack{dir = 8},/obj/item/clothing/shoes/magboots,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"gg" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"gh" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell,/obj/item/weapon/pen{desc = "It writes upside down."; name = "Astronaut Pen"},/obj/item/weapon/paper,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"gi" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/camera/motion{c_tag = "EVA Storage"},/obj/item/clothing/head/welding,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"gj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) +"gk" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"gl" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"gm" = (/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"gn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"go" = (/obj/structure/bookcase,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"gp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"gq" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"gr" = (/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/general) +"gs" = (/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/general) +"gt" = (/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/general) +"gu" = (/obj/structure/computerframe,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"gv" = (/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"gw" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/flash/box2550away,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"gx" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/flash/box2550away,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"gy" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"gz" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"gA" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/cell_charger{pixel_y = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"gB" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/aicard,/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"gC" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/circuitboard/olddoor,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"gD" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"gE" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"gF" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"gG" = (/obj/machinery/door/airlock{name = "Shower"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"gH" = (/turf/simulated/floor,/area/awaymission/box2550Away/command) +"gI" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"gJ" = (/obj/structure/rack{dir = 8},/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"gK" = (/obj/structure/closet/wardrobe/mixed,/obj/effect/landmark/corpse/away/box2550/det,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"gL" = (/obj/machinery/door/airlock{name = "Changing Room"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"gM" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"gN" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"gO" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"gP" = (/obj/structure/sink{pixel_y = 20},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"gQ" = (/obj/machinery/computer/arcade,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"gR" = (/obj/structure/table/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"gS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"gT" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"gU" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/general) +"gV" = (/obj/structure/closet/emcloset,/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/general) +"gW" = (/obj/machinery/vending/coffee,/turf/simulated/floor{tag = "icon-corner_east"; icon_state = "corner_east"},/area/awaymission/box2550Away/general) +"gX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"gY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"gZ" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"ha" = (/obj/machinery/power/terminal{tag = "icon-term (NORTH)"; icon_state = "term"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"hb" = (/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"hc" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"hd" = (/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"he" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"hf" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"hg" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"hh" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"hi" = (/obj/structure/rack{dir = 8},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/obj/item/weapon/tank/jetpack,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"hj" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/obj/item/weapon/tank/jetpack,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"hk" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"hl" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"hm" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"hn" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"ho" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"hp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"hq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"hr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"hs" = (/obj/structure/lattice,/turf/space,/area/awaymission/box2550Away/general) +"ht" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"hu" = (/obj/structure/rack{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"hv" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/cloning,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"hw" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/secure_data,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"hx" = (/obj/structure/rack{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"hy" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"hz" = (/obj/machinery/gateway,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"hA" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"hB" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; locked = 0; name = "E.V.A."; req_access_txt = "18"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"hC" = (/obj/structure/rack{dir = 8},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"hD" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/mask/breath/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"hE" = (/obj/structure/dispenser,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"hF" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal{density = 0; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one seems remarkably clean."; dir = 4; icon = 'icons/obj/watercloset.dmi'; icon_state = "toilet00"; name = "toilet"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"hG" = (/obj/machinery/door/airlock{name = "Unit 1"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"hH" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall,/area/awaymission/box2550Away/general) +"hI" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"hJ" = (/obj/machinery/door/window/eastright,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"hK" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"hL" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"hM" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"hN" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; pixel_x = 30},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"hO" = (/turf/simulated/shuttle/wall{dir = 8; icon_state = "wall_space"},/area/awaymission/box2550Away/general) +"hP" = (/turf/simulated/shuttle/wall,/area/awaymission/box2550Away/general) +"hQ" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"hR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"hS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"hT" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_space"},/area/awaymission/box2550Away/general) +"hU" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Auxiliary Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"hV" = (/obj/machinery/vending/assist,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"hW" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; pixel_y = 25},/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"hX" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/wirecutters,/obj/item/device/flashlight,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"hY" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/t_scanner,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"hZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/igniter{pixel_x = -8; pixel_y = -4},/obj/item/device/assembly/igniter,/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"ia" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"ib" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/multitool,/obj/machinery/cell_charger,/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"ic" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"id" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"ie" = (/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"if" = (/obj/item/weapon/cell,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"ig" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/card,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"ih" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/security,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"ii" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"ij" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"ik" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"il" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/crowbar,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"im" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"in" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"io" = (/obj/machinery/hydroponics,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ip" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"iq" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ir" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"is" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"it" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"iu" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"iv" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"iw" = (/obj/structure/closet,/obj/effect/landmark/corpse/away/box2550/clown,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ix" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall_floor"},/area/awaymission/box2550Away/general) +"iy" = (/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"iz" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"iA" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "burst_r"},/turf/space,/area/awaymission/box2550Away/general) +"iB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"iC" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"iD" = (/obj/item/stack/rods{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"iE" = (/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"iF" = (/obj/item/weapon/storage/box/lights/tubes,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"iG" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/scan_consolenew,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"iH" = (/obj/structure/rack{dir = 4},/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"iI" = (/obj/structure/rack{dir = 8},/obj/item/weapon/circuitboard/arcade,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"iJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"iK" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"iL" = (/obj/machinery/door/airlock/maintenance{name = "Bathroom Maintenance"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"iM" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"iN" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"iO" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"iP" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"iQ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/awaymission/box2550Away/general) +"iR" = (/obj/structure/disposalpipe/junction,/turf/simulated/wall,/area/awaymission/box2550Away/general) +"iS" = (/obj/machinery/seed_extractor,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"iT" = (/obj/item/weapon/reagent_containers/glass/bucket{pixel_y = 6},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"iU" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"iV" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"iW" = (/obj/structure/closet,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"iX" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"iY" = (/obj/structure/table/woodentable,/obj/machinery/librarycomp{pixel_y = 8},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"iZ" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{desc = "Read WGW through this."; dir = 1; name = "WGW intercom"; pixel_y = 20; prison_radio = 1},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"ja" = (/obj/machinery/libraryscanner{pixel_y = 4},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"jb" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"jc" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"jd" = (/obj/structure/shuttle/engine/heater{dir = 4; icon_state = "heater"; tag = "icon-heater (WEST)"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/general) +"je" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/space,/area/awaymission/box2550Away/general) +"jf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"jg" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"jh" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"ji" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/cable_coil{pixel_x = 2; pixel_y = -2},/obj/item/weapon/cable_coil,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"jj" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"jk" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"jl" = (/obj/structure/rack{dir = 1},/obj/item/clothing/mask/breath/box2550away,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"jm" = (/obj/structure/table{dir = 9; icon_state = "tabledir"},/obj/item/weapon/cable_coil,/obj/item/weapon/cell,/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"jn" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"jo" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/command) +"jp" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/command) +"jq" = (/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) +"jr" = (/obj/structure/closet/crate/rcd,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) +"js" = (/obj/item/stack/rods{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"jt" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/stack/sheet/rglass{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"ju" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"jv" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"jw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"jx" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/paper/hydroponics,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"jy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"jz" = (/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"jA" = (/obj/machinery/door/window/westright,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"jB" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"jC" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"jD" = (/obj/structure/bookcase{name = "bookcase (Self Help)"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"jE" = (/obj/structure/bookcase{name = "bookcase (Fiction)"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"jF" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/obj/item/weapon/paper_bin,/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"jG" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Private Study"; req_access_txt = "37"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"jH" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"jI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"jJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"jK" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/weldingtool,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"jL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"jM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"jN" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; locked = 0; name = "E.V.A."; req_access_txt = "18"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"jO" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) +"jP" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"jQ" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"jR" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) +"jS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"jT" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"jU" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"jV" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"jW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"jX" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"jY" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"jZ" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ka" = (/obj/structure/table/woodentable{dir = 10},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"kb" = (/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"kc" = (/obj/structure/table/woodentable{dir = 6},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"kd" = (/obj/machinery/door/window/northright{name = "library desk door"; req_access_txt = "37"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"ke" = (/turf/simulated/shuttle/wall{dir = 1; icon_state = "wall_floor"},/area/awaymission/box2550Away/general) +"kf" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/wrench,/obj/item/device/analyzer,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"kg" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"kh" = (/obj/structure/table{dir = 8; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/crowbar,/obj/item/device/assembly/prox_sensor,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"ki" = (/obj/structure/table{dir = 4; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"kj" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"kk" = (/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/storage) +"kl" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; location = "Tool Storage"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/storage) +"km" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/crowbar,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"kn" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"ko" = (/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/awaymission/box2550Away/general) +"kp" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/box2550Away/general) +"kq" = (/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"kr" = (/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"ks" = (/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/awaymission/box2550Away/general) +"kt" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/awaymission/box2550Away/general) +"ku" = (/obj/machinery/hydroponics,/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) +"kv" = (/obj/machinery/hydroponics,/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) +"kw" = (/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/general) +"kx" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ky" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 1; icon_state = "right"; name = "Hydroponics"; req_access_txt = "35"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/general) +"kz" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"kA" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"kB" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"kC" = (/turf/simulated/shuttle/wall{icon_state = "wall_space"},/area/awaymission/box2550Away/general) +"kD" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"kE" = (/obj/machinery/computer/arcade,/turf/simulated/shuttle/floor,/area/awaymission/box2550Away/general) +"kF" = (/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "burst_l"},/turf/space,/area/awaymission/box2550Away/general) +"kG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"kH" = (/obj/machinery/status_display{pixel_y = 2; supply_display = 1},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"kI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"kJ" = (/obj/machinery/door/airlock/maintenance{name = "Primary Tool Storage"; req_access_txt = "12"},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"kK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"kL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"kM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"kN" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"kO" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"kP" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"kQ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"kR" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"kS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/awaymission/box2550Away/general) +"kT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"kU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) +"kV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"kW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"kX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"kY" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"kZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"la" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lc" = (/obj/machinery/door/airlock/glass{req_access_txt = "35"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ld" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"le" = (/obj/machinery/door/window/eastright{dir = 2; name = "Hydroponics Delivery"; req_access_txt = "34"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; location = "Hydroponics"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/general) +"lf" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lg" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lh" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"li" = (/obj/machinery/door/window/northleft{base_state = "left"; dir = 2; icon_state = "left"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"lj" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"lk" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"ll" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lm" = (/obj/machinery/status_display,/turf/simulated/wall,/area/awaymission/box2550Away/general) +"ln" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lo" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lp" = (/turf/simulated/shuttle/wall{dir = 4; icon_state = "wall_space"},/area/awaymission/box2550Away/general) +"lq" = (/obj/structure/closet/secure_closet/box2550away/security,/turf/simulated/floor{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/awaymission/box2550Away/security) +"lr" = (/obj/structure/computerframe,/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"ls" = (/obj/machinery/computer/card,/turf/simulated/floor{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/awaymission/box2550Away/security) +"lt" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"lu" = (/turf/simulated/floor{tag = "icon-L1"; icon_state = "L1"},/area/awaymission/box2550Away/general) +"lv" = (/turf/simulated/floor{tag = "icon-L3"; icon_state = "L3"},/area/awaymission/box2550Away/general) +"lw" = (/turf/simulated/floor{tag = "icon-L5"; icon_state = "L5"},/area/awaymission/box2550Away/general) +"lx" = (/turf/simulated/floor{tag = "icon-L7"; icon_state = "L7"},/area/awaymission/box2550Away/general) +"ly" = (/turf/simulated/floor{tag = "icon-L9"; icon_state = "L9"},/area/awaymission/box2550Away/general) +"lz" = (/turf/simulated/floor{tag = "icon-L11"; icon_state = "L11"},/area/awaymission/box2550Away/general) +"lA" = (/turf/simulated/floor{desc = "

There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.

You have my salutations for getting this far--no more games. The treasure you seek is located inside the AI Satellite but you will need the right eyes to find it. Best of luck to you, friend.

HONK!

"; icon_state = "L13"; name = "floor"; tag = "icon-L13"},/area/awaymission/box2550Away/general) +"lB" = (/turf/simulated/floor{tag = "icon-L15"; icon_state = "L15"},/area/awaymission/box2550Away/general) +"lC" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lE" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lF" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lG" = (/obj/structure/closet/box2550away/red,/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/security) +"lH" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=CHW"; location = "Lockers"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"lI" = (/turf/simulated/floor{tag = "icon-L2"; icon_state = "L2"},/area/awaymission/box2550Away/general) +"lJ" = (/turf/simulated/floor{tag = "icon-L4"; icon_state = "L4"},/area/awaymission/box2550Away/general) +"lK" = (/turf/simulated/floor{tag = "icon-L6"; icon_state = "L6"},/area/awaymission/box2550Away/general) +"lL" = (/turf/simulated/floor{tag = "icon-L8"; icon_state = "L8"},/area/awaymission/box2550Away/general) +"lM" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Lockers"; location = "EVA"},/turf/simulated/floor{tag = "icon-L10"; icon_state = "L10"},/area/awaymission/box2550Away/general) +"lN" = (/turf/simulated/floor{tag = "icon-L12"; icon_state = "L12"},/area/awaymission/box2550Away/general) +"lO" = (/turf/simulated/floor{desc = "

There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.

Nameless Poet of Clown Planet

"; icon_state = "L14"; tag = "icon-L14"},/area/awaymission/box2550Away/general) +"lP" = (/turf/simulated/floor{tag = "icon-L16"; icon_state = "L16"},/area/awaymission/box2550Away/general) +"lQ" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Court"; location = "CHE"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"lR" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Diner"; location = "Library"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"lS" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lT" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "corner_northwest"; tag = "icon-corner_northwest"},/area/awaymission/box2550Away/general) +"lU" = (/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_north"},/area/awaymission/box2550Away/general) +"lV" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_north"},/area/awaymission/box2550Away/general) +"lW" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "corner_northeast"; tag = "icon-corner_northeast"},/area/awaymission/box2550Away/general) +"lX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"lZ" = (/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/security) +"ma" = (/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"mb" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/obj/item/weapon/pen,/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"mc" = (/obj/item/weapon/paper,/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"md" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/obj/machinery/recharger,/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/security) +"me" = (/obj/item/weapon/crowbar,/obj/item/device/radio/intercom{pixel_y = -29},/obj/item/device/flash/box2550away,/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/security) +"mf" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=QM"; location = "CHW"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mg" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Library"; location = "Hydro"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mh" = (/turf/simulated/floor{icon_state = "escape"; tag = "icon-escape"},/area/awaymission/box2550Away/general) +"mi" = (/turf/simulated/floor{dir = 8; icon_state = "escapecorner"; tag = "icon-escapecorner (WEST)"},/area/awaymission/box2550Away/general) +"mj" = (/turf/simulated/floor{icon_state = "corner_northwest"; tag = "icon-corner_northwest"},/area/awaymission/box2550Away/general) +"mk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"ml" = (/obj/machinery/door/window/northleft{tag = "icon-left"; icon_state = "left"; dir = 2},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mm" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 2; icon_state = "right"; tag = "icon-left"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"mo" = (/obj/machinery/door/airlock/maintenance{name = "Autolathe Storage"; req_access_txt = "12"},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"mp" = (/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

A body lies forever lost, stricken soundly from the past. Travel south to find the dirge, starting from the concierge.

HONK!

"; layer = 3; name = "Old Note #2"; pixel_y = 4},/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mq" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (NORTH)"; icon_state = "reinf_tabledir"; dir = 1},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mr" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/paper/pamphlet/box2550awayInfo,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"ms" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"mt" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"mu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"mv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"mw" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"mx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"my" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"mz" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"mA" = (/obj/machinery/door/window/northright{tag = "icon-right"; icon_state = "right"; dir = 2},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mB" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/general) +"mC" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/wall,/area/awaymission/box2550Away/general) +"mD" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"mE" = (/turf/simulated/wall,/area/awaymission/box2550Away/medical) +"mF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"mG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"mH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"mI" = (/turf/simulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) +"mJ" = (/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/general) +"mK" = (/turf/simulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/awaymission/box2550Away/general) +"mL" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mM" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mN" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mO" = (/obj/machinery/vending/coffee,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mP" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mQ" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mR" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"mS" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"mT" = (/turf/simulated/wall,/area/awaymission/box2550Away/storage) +"mU" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"mV" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/aicard,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"mW" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/assembly/signaler,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"mX" = (/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"mY" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/box/box2550away/ids,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"mZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/clothing/glasses/sunglasses/box2550away,/obj/item/weapon/storage/box/PDAs,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"na" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"nb" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/flash/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"nc" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"nd" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"ne" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"nf" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"ng" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"nh" = (/obj/structure/closet/secure_closet/box2550away/meat,/obj/effect/landmark/corpse/away/box2550/lawyer,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"ni" = (/obj/structure/kitchenspike,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"nj" = (/obj/structure/window/reinforced,/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; location = "Robotics"},/obj/machinery/door/window/eastright{base_state = "right"; dir = 8; icon_state = "right"; name = "Robotics Delivery"; req_access_txt = "34"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/medical) +"nk" = (/obj/structure/window/reinforced,/obj/machinery/door/window/westleft{base_state = "left"; dir = 4; icon_state = "left"; name = "Robotics Delivery"; req_access_txt = "29"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/medical) +"nl" = (/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"nm" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"nn" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/crowbar,/obj/item/device/assembly/prox_sensor,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"no" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"np" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/flash/box2550away,/obj/item/device/flash/box2550away,/obj/item/device/flash/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"nq" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/multitool,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"nr" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"ns" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) +"nt" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "caution_north"; tag = "icon-caution_north"},/area/awaymission/box2550Away/general) +"nu" = (/obj/machinery/computer/arcade,/turf/simulated/floor{icon_state = "corner_northeast"; tag = "icon-corner_northeast"},/area/awaymission/box2550Away/general) +"nv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"nw" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"nx" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"ny" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"nz" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"nA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"nB" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"nC" = (/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"nD" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"nE" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"nF" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"nG" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"nH" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"nI" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"nJ" = (/obj/machinery/door/airlock/glass{name = "Robotics"; req_access_txt = "29"},/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"nK" = (/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"nL" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"nM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"nN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"nO" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"nP" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"nQ" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"nR" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"nS" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"nT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"nU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"nV" = (/obj/structure/table,/obj/item/device/multitool,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"nW" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"nX" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"nY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"nZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"oa" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"ob" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"oc" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"od" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"oe" = (/obj/machinery/gibber,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"of" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"og" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/scalpel,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"oh" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"oi" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"oj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"ok" = (/obj/item/weapon/melee/classic_baton,/obj/structure/lattice,/turf/space,/area/awaymission/box2550Away/maint) +"ol" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"om" = (/obj/structure/closet/wardrobe/grey,/obj/effect/landmark/corpse/away/box2550/hop,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"on" = (/obj/structure/closet,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"oo" = (/obj/machinery/autolathe,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"op" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"oq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"or" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"os" = (/obj/machinery/door_control{id = "bridge blast"; name = "Blast Door Control"; pixel_y = -25},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/command) +"ot" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"ou" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"ov" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"ow" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/circular_saw,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"ox" = (/obj/structure/rack,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"oy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"oz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"oA" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"oB" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"oC" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"oD" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"oE" = (/obj/item/device/radio/intercom{pixel_y = -29},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"oF" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"oG" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/storage) +"oH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"oI" = (/turf/simulated/floor{tag = "icon-blue (EAST)"; icon_state = "blue"; dir = 4},/area/awaymission/box2550Away/general) +"oJ" = (/obj/machinery/door/airlock/command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"oK" = (/obj/machinery/door/airlock/glass{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"oL" = (/obj/machinery/door/airlock/command{name = "AI Upload"; req_access_txt = "16"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"oM" = (/turf/simulated/floor{tag = "icon-blue (WEST)"; icon_state = "blue"; dir = 8},/area/awaymission/box2550Away/general) +"oN" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/machinery/door/window/eastleft,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"oO" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/kitchen/rollingpin,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"oP" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/machinery/microwave{pixel_y = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"oQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"oR" = (/obj/structure/optable,/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"oS" = (/obj/machinery/computer/operating,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"oT" = (/obj/machinery/door/airlock/maintenance{name = "Robotics Maintenance"; req_access_txt = "12;29"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"oU" = (/obj/machinery/robotic_fabricator,/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"oV" = (/obj/structure/closet/crate,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cable_coil,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/medical) +"oW" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/simulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) +"oX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"oY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"oZ" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"pa" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"pb" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/general) +"pc" = (/turf/simulated/floor{tag = "icon-blue (SOUTHEAST)"; icon_state = "blue"; dir = 6},/area/awaymission/box2550Away/general) +"pd" = (/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/command) +"pe" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pf" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -28; pixel_y = -7},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/awaymission/box2550Away/command) +"pg" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/box2550Away/command) +"ph" = (/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/awaymission/box2550Away/command) +"pi" = (/obj/item/weapon/crowbar,/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/box2550Away/command) +"pj" = (/turf/simulated/floor{tag = "icon-blue (SOUTHWEST)"; icon_state = "blue"; dir = 10},/area/awaymission/box2550Away/general) +"pk" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/structure/window{icon_state = "rwindow"; dir = 1; reinf = 1},/obj/item/weapon/reagent_containers/food/snacks/badrecipe{desc = "Yum."; name = "rotten mess"},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"pl" = (/obj/machinery/door/airlock{name = "Kitchen"; req_access_txt = "28"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"pm" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"pn" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"po" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"pp" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"pq" = (/obj/structure/grille,/obj/machinery/status_display,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"pr" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"ps" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"pt" = (/obj/machinery/door/airlock{name = "Male Shower"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"pu" = (/obj/machinery/door/airlock{name = "Female Shower"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"pv" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/obj/structure/closet/secure_closet/box2550away/det,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"pw" = (/obj/machinery/computer/security/wooden_tv,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"px" = (/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"py" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/briefcase,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"pz" = (/obj/machinery/status_display{pixel_x = -1},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) +"pA" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access_txt = "20"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pB" = (/obj/machinery/turretid{pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pC" = (/obj/machinery/door/airlock/command{name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pD" = (/turf/simulated/wall,/area/awaymission/box2550Away/command) +"pE" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"pF" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = 27},/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "Kitchen"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"pG" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"pH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"pI" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "corner_northwest"; tag = "icon-corner_northwest"},/area/awaymission/box2550Away/general) +"pJ" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"pK" = (/obj/machinery/door/airlock/security{name = "Detective"; req_access_txt = "4"},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"pL" = (/turf/simulated/floor{icon_state = "carpetNW"},/area/awaymission/box2550Away/security) +"pM" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "carpetN"},/area/awaymission/box2550Away/security) +"pN" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "carpetN"},/area/awaymission/box2550Away/security) +"pO" = (/obj/item/weapon/cigbutt,/turf/simulated/floor{icon_state = "carpetNE"},/area/awaymission/box2550Away/security) +"pP" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/pinpointer,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pQ" = (/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/camera,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pR" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/recharger,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pS" = (/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

Far away it sways so seldom, metal cage of ruin and boredom. In the midst of red and foil, one of six shall feed and toil.

HONK!

"; layer = 3; name = "Old Note #9"},/obj/structure/grille,/turf/simulated/floor/plating,/area) +"pT" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pU" = (/obj/machinery/ai_status_display{pixel_y = -28},/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pV" = (/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

No great mystery to unfold, thy next clue is so very near to hold. Pay close attention, for what you seek is thy own reflection.

HONK!

"; layer = 3; name = "Old Note #8"},/obj/structure/grille,/turf/simulated/floor/plating,/area) +"pW" = (/obj/structure/table,/obj/item/weapon/storage/secure/briefcase,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"pX" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Bridge Delivery"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/box2550Away/command) +"pY" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Bridge Delivery"; req_access_txt = "34"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "Bridge"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/command) +"pZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/obj/structure/window{icon_state = "rwindow"; dir = 1; reinf = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"qa" = (/obj/item/weapon/storage/box/mousetraps,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"qb" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"qc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"qd" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"qe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/space,/area/awaymission/box2550Away/general) +"qf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/space,/area/awaymission/box2550Away/general) +"qg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"qh" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/junction,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"qi" = (/obj/structure/sink{dir = 4; pixel_x = 12; step_x = 0},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"qj" = (/obj/item/weapon/storage/secure/safe{pixel_x = -23},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"qk" = (/turf/simulated/floor{icon_state = "carpetSW"},/area/awaymission/box2550Away/security) +"ql" = (/obj/structure/table/woodentable{dir = 10},/obj/effect/decal/cleanable/generic,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/security) +"qm" = (/obj/structure/table/woodentable{dir = 6},/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/security) +"qn" = (/turf/simulated/floor{icon_state = "carpetSE"},/area/awaymission/box2550Away/security) +"qo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/security) +"qp" = (/turf/simulated/floor{icon_state = "carpetNW"},/area/awaymission/box2550Away/command) +"qq" = (/turf/simulated/floor{icon_state = "carpetN"},/area/awaymission/box2550Away/command) +"qr" = (/turf/simulated/floor{icon_state = "carpetNE"},/area/awaymission/box2550Away/command) +"qs" = (/obj/machinery/computer/arcade,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"qt" = (/obj/structure/grille,/turf/simulated/floor/plating,/area) +"qu" = (/obj/machinery/door/airlock/command{icon_state = "door_locked"; locked = 1; name = "AI Upload"; req_access_txt = "16"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"qv" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/command) +"qw" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"qx" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"qy" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"qz" = (/obj/machinery/dna_scannernew,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"qA" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"qB" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"qC" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"qD" = (/obj/structure/table/woodentable{dir = 9},/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"qE" = (/obj/structure/table/woodentable{dir = 5},/obj/item/ammo_casing/c38,/obj/item/ammo_casing/c38,/obj/item/weapon/gun/projectile/revolver/detective,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"qF" = (/obj/machinery/computer/secure_data/detective_computer,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/box2550Away/security) +"qG" = (/turf/simulated/floor{icon_state = "carpetSW"},/area/awaymission/box2550Away/command) +"qH" = (/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/command) +"qI" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Pun Pun"},/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/command) +"qJ" = (/turf/simulated/floor{icon_state = "carpetSE"},/area/awaymission/box2550Away/command) +"qK" = (/obj/machinery/vending/coffee,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"qL" = (/obj/machinery/turret{dir = 4},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"qM" = (/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"qN" = (/obj/machinery/turret{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"qO" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/box2550Away/command) +"qP" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/paper_bin,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"qQ" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"qR" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{tag = "icon-red (WEST)"; icon_state = "red"; dir = 8},/area/awaymission/box2550Away/command) +"qS" = (/obj/machinery/computer/card,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"qT" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"qU" = (/obj/machinery/door/window/northright{dir = 1; icon_state = "right"; tag = "icon-right"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"qV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"qW" = (/obj/structure/disposalpipe/junction,/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"qX" = (/obj/machinery/door/airlock/maintenance{name = "Med-Sci Maintenance"; req_access_txt = "14;9"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"qY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"qZ" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ra" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rb" = (/obj/machinery/door/airlock/maintenance{name = "Morgue Maintenance"; req_access_txt = "12;6"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"rc" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall,/area/awaymission/box2550Away/medical) +"rd" = (/obj/structure/rack{dir = 4},/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"re" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/junction,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"rf" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"rg" = (/obj/machinery/door/window{dir = 2; icon = 'icons/obj/doors/windoor.dmi'; name = "Captain's Quarters"; req_access_txt = "20"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rh" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"ri" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"rj" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"rk" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rl" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/device/assembly/timer,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rm" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/stamp/hop,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rn" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"ro" = (/obj/structure/table/reinforced,/obj/machinery/door/window{dir = 4; icon = 'icons/obj/doors/windoor.dmi'; req_access_txt = "0"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon = 'icons/obj/doors/windoor.dmi'; icon_state = "right"; name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rp" = (/obj/structure/closet,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"rq" = (/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"rr" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"rs" = (/obj/structure/stool/bed/chair,/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rt" = (/obj/machinery/computer/cloning,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ru" = (/obj/machinery/clonepod,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rv" = (/obj/structure/closet/l3closet,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rw" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"rx" = (/obj/structure/morgue,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"ry" = (/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

In plain sight the next clue lies, hidden only by your eyes. In a corner much South of here, where great minds accomplish work so dear.

HONK!

"; layer = 3; name = "Old Note #5"; pixel_x = -6; pixel_y = 4},/obj/structure/morgue,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"rz" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"rA" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/paper_bin,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rB" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rC" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/aiModule/reset,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"rD" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"rE" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rF" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/command) +"rG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"rH" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rI" = (/obj/machinery/door/window/westleft{name = "Med-Sci"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/box/gloves,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"rK" = (/obj/structure/morgue{contents = newlist(/area/medical/cmo)},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"rL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/status_display,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"rM" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"rN" = (/obj/structure/disposalpipe/junction{dir = 4},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"rO" = (/obj/item/stack/sheet/rglass,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"rP" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"rQ" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/stamp/captain,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"rR" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"rS" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"rT" = (/obj/machinery/turret{dir = 1},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"rU" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/glasses/sunglasses/box2550away,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"rV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"rW" = (/obj/structure/closet/wardrobe/genetics_white,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rX" = (/obj/structure/table{dir = 8; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/paper{info = "Angela, while it may appear that the lab monkeys are communicating with each other, I assure you it's quite impossible. You claim that one monkey signed the passcode for a supply closet to another and the latter proceeded to open it. As I'm sure you know, there have literally been tens of thousands of studies of primate intelligence and there is no evidence of behavior even remotely that sophisticated. So either you've single handedly trumped the entire field of animal behaviorists or you're badly in need of a vacation."; name = "re: Damn Chimps"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rY" = (/obj/structure/table{dir = 4; icon_state = "table_horizontal"; pixel_y = 0},/obj/item/weapon/storage/box/disks,/obj/item/weapon/storage/box/disks,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"rZ" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/crowbar,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"sa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"sb" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"sc" = (/obj/structure/rack,/obj/item/weapon/tank/jetpack,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"sd" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"se" = (/obj/structure/closet/secure_closet/box2550away/captains,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"sf" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"sg" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"sh" = (/obj/structure/grille,/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"si" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"sj" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/aiModule/asimov,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window{base_state = "right"; dir = 4; icon = 'icons/obj/doors/windoor.dmi'; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"sk" = (/obj/structure/computerframe,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"sl" = (/obj/item/device/radio/intercom{pixel_y = -25; frequency = 1447; broadcasting = 1},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"sm" = (/obj/machinery/ai_status_display{pixel_y = -28},/obj/structure/computerframe,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"sn" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"so" = (/obj/structure/closet/secure_closet/box2550away/hop,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"sp" = (/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"sq" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"sr" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) +"ss" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Washingon"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"st" = (/obj/machinery/door/window/southleft{dir = 1; name = "Monkey Pen"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"su" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Garfield"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sv" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sw" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Kennedy"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"sx" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"sy" = (/obj/structure/morgue{contents = newlist(/obj/effect/landmark/corpse/away/box2550/cmo)},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"sz" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"sA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"sB" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"sC" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"sD" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/cell,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"sE" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"sF" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"sG" = (/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"sH" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"sI" = (/obj/machinery/door_control{name = "Recieving Access Control"; pixel_x = 0; pixel_y = 24; id = "recieving"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"sJ" = (/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/supply) +"sK" = (/obj/machinery/conveyor{dir = 4; id = "QM"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/supply) +"sL" = (/obj/machinery/conveyor{dir = 4; id = "QM"},/obj/structure/plasticflaps,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/supply) +"sM" = (/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/supply) +"sN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"sO" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access_txt = "20"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"sP" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) +"sQ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/command) +"sR" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/awaymission/box2550Away/command) +"sS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"sT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"sU" = (/obj/structure/disposalpipe/junction{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"sV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"sW" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"sX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/northright{tag = "icon-right"; icon_state = "right"; dir = 2},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"sY" = (/obj/machinery/computer/security/telescreen{icon = 'icons/obj/status_display.dmi'; icon_state = "entertainment"; name = "Entertainment monitor"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/awaymission/box2550Away/maint) +"sZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/closet/gmcloset{req_access_txt = "28"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"ta" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/reagent_dispensers/box2550away/beerkeg,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"tb" = (/obj/structure/disposalpipe/junction,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"tc" = (/obj/machinery/door/window/northleft{dir = 4; name = "Genetics"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"td" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"te" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Pierce"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tf" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Harding"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tg" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/general) +"th" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Maintenance"; req_access_txt = "12;41"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"ti" = (/obj/structure/closet/wardrobe/black,/obj/effect/landmark/corpse/away/box2550/captain,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"tj" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"tk" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"tl" = (/obj/structure/table,/obj/structure/noticeboard{pixel_y = 27},/obj/item/weapon/lighter/zippo,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"tm" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{pixel_y = 20},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"tn" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access_txt = "12; 28"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"to" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"tp" = (/obj/structure/closet,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tq" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Jackson"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tr" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "McKinley"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ts" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Bush"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tt" = (/obj/structure/table,/turf/simulated/floor{dir = 8; icon_state = "escape"; tag = "icon-escape (WEST)"},/area/awaymission/box2550Away/general) +"tu" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/supply) +"tv" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/glasses/meson,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"tw" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/supply) +"tx" = (/obj/machinery/conveyor{id = "QMLoad"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"ty" = (/obj/machinery/conveyor_switch{id = "QMLoad"},/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/supply) +"tz" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"tA" = (/obj/machinery/conveyor_switch{id = "QM"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"tB" = (/obj/machinery/status_display{pixel_y = 2; supply_display = 1},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/supply) +"tC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"tD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"tE" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"tF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"tG" = (/obj/machinery/door/poddoor{id = "recieving"; name = "Cargo Pickup Door"; text = "null"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"tH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"tI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"tJ" = (/obj/item/device/multitool,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"tK" = (/obj/machinery/computer/security/telescreen{icon = 'icons/obj/status_display.dmi'; icon_state = "entertainment"; name = "Entertainment monitor"},/turf/simulated/wall,/area/awaymission/box2550Away/general) +"tL" = (/obj/structure/table,/obj/item/clothing/head/cakehat,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"tM" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; location = "Bar"},/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"tN" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{tag = "icon-freezerfloor"; icon_state = "freezerfloor"},/area/awaymission/box2550Away/general) +"tO" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Genetics Delivery"; req_access_txt = "34"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; location = "Genetics"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tP" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Genetics Delivery"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"tQ" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/medical) +"tR" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"tS" = (/obj/structure/window/basic{tag = "icon-window (NORTHEAST)"; icon_state = "window"; dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"tT" = (/obj/machinery/door/window/southleft{dir = 1; name = "exterior door"},/turf/simulated/floor{icon_state = "carpet1"},/area/awaymission/box2550Away/general) +"tU" = (/obj/machinery/door/window/southright{dir = 1; name = "exterior door"},/turf/simulated/floor{icon_state = "carpet1"},/area/awaymission/box2550Away/general) +"tV" = (/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"tW" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"tX" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"tY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/supply) +"tZ" = (/obj/structure/closet/crate/internals,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"ua" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"ub" = (/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/supply) +"uc" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "QM #1"},/obj/machinery/bot/mulebot{home_destination = "QM #1"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) +"ud" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"ue" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/radio,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"uf" = (/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"ug" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/stamp,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"uh" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"ui" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"uj" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"uk" = (/obj/machinery/door/airlock/command{name = "Teleport Access"; req_access_txt = "17"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"ul" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/box2550away/cola,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"um" = (/obj/machinery/door/airlock{name = "Bar Storage"; req_access_txt = "28"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"un" = (/obj/machinery/door/airlock/glass{name = "Med-Sci"; req_access_txt = "9"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uo" = (/obj/structure/sink{pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"up" = (/obj/structure/crematorium,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"uq" = (/obj/machinery/crema_switch{pixel_x = 22},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"ur" = (/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"us" = (/turf/simulated/floor{icon_state = "carpetW"},/area/awaymission/box2550Away/general) +"ut" = (/turf/simulated/floor{icon_state = "carpetE"},/area/awaymission/box2550Away/general) +"uu" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uv" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uw" = (/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"ux" = (/obj/machinery/mass_driver{dir = 4; id = "chapelgun"},/obj/machinery/door/window/westleft{name = "Chapel Mass Driver"; req_access_txt = "22"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"uy" = (/obj/machinery/door/poddoor{id = "chapelgun"; name = "Chapel Mass Driver"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"uz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"uA" = (/obj/machinery/door/airlock/maintenance{name = "Quartermaster's Office"; req_access_txt = "41"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"uB" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"uC" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #1"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) +"uD" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"uE" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/stack/rods{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"uF" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"uG" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"uH" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"uI" = (/obj/item/device/radio/intercom{pixel_y = 20},/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"uJ" = (/obj/item/weapon/crowbar,/turf/simulated/floor/plating,/area/awaymission/box2550Away/command) +"uK" = (/obj/item/device/radio/intercom{broadcasting = 1; freerange = 1; pixel_y = 20},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; frequency = 1447; pixel_x = 20; pixel_y = 20},/obj/item/device/radio/intercom{freerange = 1; pixel_x = -20; pixel_y = 20},/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/obj/item/device/radio/intercom{freerange = 1; frequency = 1357; pixel_x = 30},/obj/item/device/radio/intercom{freerange = 1; frequency = 1355; pixel_x = -35; pixel_y = 35},/obj/item/device/radio/intercom{freerange = 1; frequency = 1353; pixel_x = 35; pixel_y = 35},/obj/effect/landmark/corpse/AICorpse{name = "XISC"},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"uL" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"uM" = (/obj/structure/table/woodentable{tag = "icon-woodentable (WEST)"; icon_state = "woodentable"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"uN" = (/obj/structure/closet/secure_closet/courtroom,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"uO" = (/obj/structure/piano{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"uP" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"uQ" = (/obj/structure/closet/gmcloset{req_access_txt = "28"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"uR" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"uS" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"uT" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uU" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"uV" = (/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uW" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uX" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"uY" = (/turf/simulated/floor{icon_state = "carpetNW"},/area/awaymission/box2550Away/general) +"uZ" = (/turf/simulated/floor{icon_state = "carpetN"},/area/awaymission/box2550Away/general) +"va" = (/turf/simulated/floor{icon_state = "carpetNE"},/area/awaymission/box2550Away/general) +"vb" = (/obj/machinery/driver_button{id = "chapelgun"; name = "Chapel Mass Driver Button"; pixel_x = 24; req_access_txt = "22"; text = "chapel"},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"vc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"vd" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"ve" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "QM #3"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) +"vf" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/multitool,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"vg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"vh" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"vi" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"vj" = (/obj/machinery/turretid,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"vk" = (/obj/structure/table/woodentable{dir = 10},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"vl" = (/obj/structure/table/woodentable,/obj/item/weapon/paper/Court,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"vm" = (/obj/structure/table/woodentable{dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"vn" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"vo" = (/obj/structure/table/woodentable{dir = 9},/obj/effect/decal/cleanable/generic,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"vp" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/paper_bin,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"vq" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/briefcase,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"vr" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vs" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vt" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vu" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vv" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/clothing/head/that,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vw" = (/obj/machinery/vending/boozeomat,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vx" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"vy" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vz" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Crematorium Access"; req_access_txt = "27"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"vA" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Crematorium Access"; req_access_txt = "27"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"vB" = (/turf/simulated/floor{icon_state = "carpet1"},/area/awaymission/box2550Away/general) +"vC" = (/turf/simulated/floor{icon_state = "carpet2"},/area/awaymission/box2550Away/general) +"vD" = (/obj/structure/table/woodentable{dir = 9},/turf/simulated/floor{icon_state = "carpet"},/area/awaymission/box2550Away/general) +"vE" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/paper_bin,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"vF" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"vG" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{dir = 8; name = "Cargo Office"; req_access_txt = "41"},/obj/machinery/door/window/westleft{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"vH" = (/obj/structure/closet/crate/medical,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"vI" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "QM #4"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/supply) +"vJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"vK" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"vL" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{name = "Reception Window"; req_access_txt = "0"},/obj/machinery/door/window/westleft{name = "Cargo Office"; req_access_txt = "31"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"vM" = (/obj/machinery/door/window/northright{base_state = "left"; dir = 8; icon_state = "left"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"vN" = (/obj/machinery/door/airlock/command{icon_state = "door_closed"; lockdownbyai = 0; locked = 0; name = "Teleport Access"; req_access_txt = "17"},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"vO" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Security"; location = "Court"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"vP" = (/obj/item/device/flashlight/lamp/green,/obj/structure/table/woodentable{dir = 10},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"vQ" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"vR" = (/obj/structure/closet/box2550away/lawcloset,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"vS" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vT" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vU" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vV" = (/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"vW" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vX" = (/obj/structure/closet/crate,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"vY" = (/obj/structure/morgue,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"vZ" = (/turf/simulated/floor{icon_state = "carpetS"},/area/awaymission/box2550Away/general) +"wa" = (/obj/structure/table/woodentable{dir = 10},/turf/simulated/floor{icon_state = "carpet"},/area/awaymission/box2550Away/general) +"wb" = (/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"wc" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"wd" = (/obj/item/device/radio/intercom{pixel_y = -24},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"we" = (/obj/structure/table,/obj/item/weapon/stamp,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"wf" = (/obj/machinery/door_control{name = "QM Loading Dock"; icon_state = "doorctrl0"; layer = 4; pixel_x = 0; pixel_y = -24; level = 2; req_access_txt = "0"; id = "QMLoaddoor"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"wg" = (/obj/machinery/autolathe,/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"wh" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"wi" = (/obj/machinery/power/smes{charge = 5e+006},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"wj" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/command) +"wk" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"wl" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/stool/bed/chair{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"wm" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/window{dir = 4; icon = 'icons/obj/doors/windoor.dmi'; req_access_txt = "1"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"wn" = (/obj/machinery/door/airlock{name = "Law Office"; req_access_txt = "38"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"wo" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1357; pixel_x = 30},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"wp" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wq" = (/obj/structure/stool{pixel_y = 8},/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Mr Deempisi"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wr" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/weapon/gun/projectile/shotgun,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"ws" = (/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"wt" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wu" = (/obj/structure/computerframe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wv" = (/obj/machinery/door/airlock/medical{name = "Cryogenics"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ww" = (/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wx" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"wy" = (/obj/item/device/radio/intercom{dir = 8; pixel_x = -28},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"wz" = (/turf/simulated/floor{icon_state = "carpetSW"},/area/awaymission/box2550Away/general) +"wA" = (/turf/simulated/floor{icon_state = "carpetSE"},/area/awaymission/box2550Away/general) +"wB" = (/obj/item/device/radio/intercom{pixel_x = 31},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"wC" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"wD" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"wE" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"wF" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/machinery/status_display{pixel_y = 2; supply_display = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"wG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"wH" = (/obj/machinery/door/airlock/external{name = "Supply Dock Airlock"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"wI" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"wJ" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/command) +"wK" = (/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/command) +"wL" = (/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/command) +"wM" = (/turf/simulated/floor{tag = "icon-corner_east"; icon_state = "corner_east"},/area/awaymission/box2550Away/command) +"wN" = (/obj/structure/grille,/turf/simulated/wall,/area) +"wO" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"wP" = (/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

Lifeless bodies line the walls, onyx floor forever calls. Amidst the dull and sorrow, one of ten shall hold not hollow.

HONK!

"; layer = 3; name = "Old Note #4"; pixel_x = -2; pixel_y = 4},/obj/structure/table,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wQ" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wR" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wS" = (/obj/machinery/door/window/northright{name = "Bar Door"; req_access_txt = "28"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"wT" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir"},/obj/item/weapon/paper_bin,/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wU" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/paper{info = "1. Attach oxygen to pipe loop.
2. Cool oxygen with freezer.
3. Turn on cryogenic cell.
4. Insert subject.
5. Attach suitable beaker to cyro for a faster recovery.
6. Turn off cryogenic cell to prevent prolonged gas use and leakage.
7. Be a hero!"; name = "Cryogenics For Dummies"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wV" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/reagent_containers/syringe/antitoxin,/obj/item/weapon/reagent_containers/syringe/inaprovaline,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wW" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"wX" = (/obj/structure/closet/coffin,/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"wY" = (/obj/structure/closet/coffin,/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"wZ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"xa" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/structure/plasticflaps,/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"xb" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"xc" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"xd" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"xe" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"xf" = (/obj/machinery/door/window/eastright{name = "Cargo Office"; req_access_txt = "31"},/turf/simulated/floor,/area/awaymission/box2550Away/supply) +"xg" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/command) +"xh" = (/obj/machinery/computer/teleporter,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/command) +"xi" = (/obj/machinery/teleport/station,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/command) +"xj" = (/obj/machinery/teleport/hub,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/command) +"xk" = (/obj/structure/rack,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/command) +"xl" = (/obj/structure/table/woodentable{tag = "icon-woodentable (NORTH)"; icon_state = "woodentable"; dir = 1},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"xm" = (/obj/structure/table/woodentable{tag = "icon-woodentable (NORTH)"; icon_state = "woodentable"; dir = 1},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"xn" = (/obj/structure/table/woodentable{tag = "icon-woodentable (NORTH)"; icon_state = "woodentable"; dir = 1},/obj/item/weapon/paper_bin,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/box2550Away/general) +"xo" = (/obj/structure/table,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/box2550Away/general) +"xp" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"xq" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"xr" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"xs" = (/obj/machinery/door/window/eastright{dir = 1; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xt" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"xu" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/obj/item/weapon/storage/box/gloves,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xv" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xw" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"xx" = (/obj/machinery/door/window/northleft{dir = 1; name = "Chaplain's Office"; req_access_txt = "22"},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xy" = (/obj/machinery/door/window/northright{dir = 1; name = "Chaplain's Office"; req_access_txt = "22"},/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xz" = (/obj/structure/closet/coffin,/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xA" = (/obj/structure/closet/coffin,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xB" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/awaymission/box2550Away/supply) +"xC" = (/obj/machinery/door/airlock/maintenance{name = "QM Office Maintenance"; req_access_txt = "12;31"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/supply) +"xD" = (/turf/simulated/wall,/area/awaymission/box2550Away/supply) +"xE" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"xF" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"xG" = (/obj/structure/grille,/obj/structure/window/basic,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"xH" = (/obj/machinery/door/airlock{name = "Bar Entrance"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"xI" = (/obj/structure/noticeboard{dir = 1; pixel_y = 27},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xJ" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xK" = (/obj/structure/table{dir = 9; icon_state = "tabledir"},/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xL" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/paper_bin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xM" = (/obj/item/device/radio/intercom{frequency = 1443; name = "Confession Intercom"; pixel_y = -24},/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"xN" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Confession Booth (Chaplain)"; req_access_txt = "22"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"xO" = (/obj/structure/closet/wardrobe/chaplain_black,/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xP" = (/obj/item/device/radio/intercom{dir = 1; pixel_y = 20},/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xQ" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"xR" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"xS" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; location = "Medbay"},/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Medbay Delivery"; req_access_txt = "34"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xT" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Medbay Delivery"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xU" = (/obj/machinery/door/airlock/glass{name = "Chief Medical Officer"; req_access_txt = "40"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xV" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xW" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"xX" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Chaplain's Office"; req_access_txt = "22"},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xY" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"xZ" = (/obj/structure/table/woodentable{dir = 9},/obj/item/device/flashlight/lamp,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"ya" = (/obj/structure/table/woodentable{tag = "icon-woodentable (NORTH)"; icon_state = "woodentable"; dir = 1},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yb" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/paper_bin,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yc" = (/obj/structure/closet/coffin,/obj/effect/landmark/corpse/away/box2550/cmo,/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yd" = (/obj/structure/reagent_dispensers/fueltank,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"ye" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AIW"; location = "QM"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yf" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AftH"; location = "AIW"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yg" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Bar"; location = "AIE"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yh" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Hydro"; location = "Bar"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yi" = (/obj/machinery/door/window/westleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Medbay Supplies"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yj" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 2; icon_state = "right"; name = "Medbay Supplies"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yk" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yl" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ym" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/box/gloves,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yn" = (/obj/item/device/radio/intercom{dir = 1; frequency = 1443; name = "Confession Intercom"; pixel_y = 24},/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"yo" = (/obj/machinery/door{icon = 'icons/obj/doors/doormorgue.dmi'; name = "Confession Booth"; req_access_txt = "0"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"yp" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yq" = (/obj/structure/table/woodentable{dir = 10},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yr" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"ys" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"yt" = (/obj/item/weapon/caution{desc = "Caution! Construction Zone!"; name = "caution sign"},/turf/simulated/floor{tag = "icon-caution_south"; icon_state = "caution_south"},/area/awaymission/box2550Away/general) +"yu" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yv" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yw" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/gun/syringe,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yx" = (/obj/structure/closet/l3closet,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yy" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yz" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"yA" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/box2550Away/general) +"yB" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/box2550Away/general) +"yC" = (/obj/structure/sign/securearea{name = "CONSTRUCTION"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) +"yD" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Construction Site Access"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/general) +"yE" = (/obj/machinery/door/airlock{name = "Custodial Closet"; req_access_txt = "26"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yF" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"yG" = (/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/obj/structure/window/basic{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"yH" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"yI" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"yJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"yK" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"yL" = (/obj/machinery/door/window{dir = 1; icon = 'icons/obj/doors/windoor.dmi'; name = "Chemical Lab"; req_access_txt = "33"},/obj/machinery/door/window{dir = 2; icon = 'icons/obj/doors/windoor.dmi'; name = "Chemical Lab"; req_access_txt = "33"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yM" = (/obj/machinery/door/window{base_state = "right"; dir = 1; icon_state = "right"; name = "Chemical Lab"; req_access_txt = "33"},/obj/machinery/door/window{base_state = "right"; dir = 2; icon_state = "right"; name = "Chemical Lab"; req_access_txt = "33"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yN" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/awaymission/box2550Away/medical) +"yO" = (/obj/machinery/door/window/eastright{dir = 2; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"yP" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"yQ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"yR" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"yS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) +"yT" = (/obj/item/weapon/mop,/obj/item/weapon/storage/box/lights,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yU" = (/obj/item/weapon/storage/box/lights/tubes,/obj/structure/disposalpipe/junction{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yV" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yW" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"yX" = (/obj/machinery/door/window/westleft{name = "Janitoral Delivery"; req_access_txt = "26"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/general) +"yY" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "Janitor"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"yZ" = (/obj/structure/disposalpipe/segment,/obj/structure/table/reinforced{name = "black market counter"},/obj/machinery/door/window/northleft{dir = 4; icon_state = "left"; name = "Black Market"; req_access_txt = "33"; tag = "icon-left"},/obj/structure/falsewall,/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"za" = (/obj/machinery/chem_dispenser,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zb" = (/obj/machinery/chem_master,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zc" = (/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zd" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves,/obj/item/clothing/mask/muzzle,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"ze" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zf" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zg" = (/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

If you are reading this note, I am dead and gone. I entrust to you my most prized possession. If you can find it.

Your first clue lies in a public place, across a starry gaze. Where two meet four, there you will find it stranded on the floor.

HONK!

"; layer = 3; name = "Old Note #1"; pixel_x = -6; pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"zh" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"zi" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"zj" = (/obj/machinery/nuclearbomb{r_code = "LOLNO"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zk" = (/obj/item/weapon/paper{info = "For safety reasons this nuke cannot be deployed. We apologise for the inconvenience. Have a nice day."},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zl" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zm" = (/obj/item/weapon/mop,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zn" = (/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zo" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall,/area/awaymission/box2550Away/general) +"zp" = (/obj/structure/disposalpipe/junction,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"zq" = (/obj/item/device/radio/intercom{dir = 0; pixel_x = -27},/obj/item/device/assembly/igniter,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zr" = (/obj/structure/table/reinforced{name = "pharmacy counter"},/obj/machinery/door/window/northleft{dir = 4; icon_state = "left"; name = "Pharmacy Outer"; tag = "icon-left"},/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "Pharmacy Inner"; req_access_txt = "33"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zs" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/gun/syringe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zt" = (/obj/machinery/door/airlock/maintenance{name = "Medical Maintenance"; req_access_txt = "14;5"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"zu" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"zv" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"zw" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"zx" = (/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"zy" = (/obj/item/weapon/light/tube,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"zz" = (/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zA" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zB" = (/obj/structure/mopbucket,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zD" = (/obj/structure/closet/jcloset,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zE" = (/obj/structure/closet/l3closet,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zF" = (/obj/structure/stool{pixel_y = 8},/obj/item/device/radio/intercom{pixel_y = -29},/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"zH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"zI" = (/obj/structure/rack,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"zJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"zK" = (/obj/item/weapon/grenade/chem_grenade,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zL" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zM" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zN" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zO" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zP" = (/obj/item/weapon/crowbar,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zQ" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zR" = (/obj/structure/rack{dir = 1},/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away/emergency,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"zS" = (/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"zT" = (/obj/machinery/door/airlock{name = "Emergency Storage"; req_access_txt = "0"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"zU" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"zV" = (/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zW" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zX" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"zY" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"zZ" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Aa" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/box/beakers,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Ab" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/storage/box/gloves,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Ac" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Ad" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Ae" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/storage/box/beakers,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Af" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Ag" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/maint) +"Ah" = (/obj/item/weapon/storage/box/lights,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"Ai" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"Aj" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/medical) +"Ak" = (/obj/structure/disposalpipe/junction{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"Al" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"Am" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/window/westleft{dir = 2; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/obj/machinery/door/window/westleft{dir = 1; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"An" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"Ao" = (/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Ap" = (/obj/structure/disposalpipe/junction{dir = 0; icon_state = "pipe-y"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"Aq" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"Ar" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"As" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/awaymission/box2550Away/storage) +"At" = (/turf/simulated/floor/plating{desc = "

There is some old writing on this floor. You are barely able to read out a few lines from a tangled scribble.

In a chamber a great mirror lies, cut away it solemn cries. Travel bold as thou might, piercing vastness as a kite.

HONK!

"; name = "Old Note #6"},/area/awaymission/box2550Away/maint) +"Au" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 31},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"Av" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) +"Aw" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) +"Ax" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Ay" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Az" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"AA" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AB" = (/obj/machinery/conveyor{dir = 4; id = "garbage"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AC" = (/obj/machinery/conveyor{id = "garbage"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AD" = (/obj/structure/disposalpipe/junction{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/obj/structure/window/basic{dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille,/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 4},/obj/structure/window/basic,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AG" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AH" = (/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"AI" = (/turf/simulated/floor{dir = 5; icon_state = "green"; tag = "icon-green (NORTHWEST)"},/area/awaymission/box2550Away/engineering) +"AJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"AK" = (/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) +"AL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AN" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"AO" = (/obj/machinery/door/window/westleft{dir = 8; icon_state = "left"; name = "Virology"; req_access_txt = "39"; tag = "icon-left"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"AP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"AQ" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "26;12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AR" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"AS" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "waste_in"; name = "Waste Air Tank Control"; output_tag = "waste_out"},/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/box2550Away/engineering) +"AT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"AU" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) +"AV" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"AW" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Rose"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"AX" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Jade"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"AY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"AZ" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 28},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Ba" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/sign/biohazard,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"Bb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"Bc" = (/obj/machinery/door/airlock/maintenance{name = "Disposal Access"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Bd" = (/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) +"Be" = (/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) +"Bf" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) +"Bg" = (/obj/structure/closet,/obj/effect/landmark/corpse/away/box2550/jan,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Bh" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24;12"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Bi" = (/turf/simulated/floor{tag = "icon-green (SOUTHEAST)"; icon_state = "green"; dir = 6},/area/awaymission/box2550Away/engineering) +"Bj" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"Bk" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Casey"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Bl" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Bm" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"Bn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Bo" = (/obj/machinery/conveyor_switch{id = "garbage"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) +"Bp" = (/obj/machinery/door_control{id = "Disposal Entrance"; name = "Incinerator Access Control"; pixel_x = 24; pixel_y = 0},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/maint) +"Bq" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Disposal Entrance"; name = "Incinerator Blast Door"; opacity = 0; p_open = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Br" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Bs" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Bt" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Bu" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Bv" = (/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Bw" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Bx" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"By" = (/turf/simulated/wall,/area/awaymission/box2550Away/research) +"Bz" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Dave"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BA" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "John"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BB" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BC" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/reagent_containers/glass/bottle/flu_virion,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BD" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/weapon/reagent_containers/glass/bottle/cold,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BE" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BF" = (/obj/machinery/computer/pandemic{pixel_x = -4; pixel_y = 3},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/medical) +"BG" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"BH" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "Disposal Entrance"; name = "Incinerator Blast Door"; opacity = 1},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) +"BI" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER: FIRE'"; icon_state = "fire"; name = "DANGER: FIRE"; tag = "icon-fire"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/maint) +"BJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"BK" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/basic,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"BL" = (/obj/structure/window/basic,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"BM" = (/obj/structure/alien/weeds,/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

Without guidance its shelter thou shall seek, desperate please so boldly thou will speak. A hand of mares across the stars shall cut, the central steed hides a secret underneath his gut.

HONK!

"; layer = 3; name = "Old Note #11"; pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"BN" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Curly"},/obj/structure/alien/weeds,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"BO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"BP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/medical) +"BQ" = (/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"BR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"BS" = (/obj/machinery/conveyor{id = "garbage"},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) +"BT" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "26;12"},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) +"BU" = (/obj/machinery/igniter{icon_state = "igniter0"; id = "Incinerator"; on = 0},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) +"BV" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"BW" = (/obj/structure/window/basic,/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"BX" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"BY" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"BZ" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Ca" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Moe"},/obj/structure/alien/weeds,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Cb" = (/obj/effect/landmark/corpse/facehugCorpse{name = "Larry"},/obj/structure/alien/weeds,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Cc" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) +"Cd" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ce" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Cf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Cg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ch" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) +"Ci" = (/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) +"Cj" = (/turf/simulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) +"Ck" = (/obj/machinery/door_control{id = "Disposal Exit"; name = "Exterior Vent Control"; pixel_y = -25},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Cl" = (/obj/structure/closet/box2550away/toxins_white,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Cm" = (/obj/item/device/analyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Cn" = (/obj/machinery/air_sensor{frequency = 1442; id_tag = "tox_storage"; output = 63},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Co" = (/obj/machinery/door/window/westleft{name = "Toxins Delivery"; req_access_txt = "8"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/research) +"Cp" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; location = "Toxins Research"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/research) +"Cq" = (/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Cr" = (/obj/machinery/status_display{pixel_x = -1},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) +"Cs" = (/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-arrival (WEST)"; icon_state = "arrival"; dir = 8},/area/awaymission/box2550Away/general) +"Ct" = (/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibup1"; icon_state = "gibup1"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Cu" = (/obj/structure/computerframe,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Cv" = (/obj/item/device/radio/intercom{dir = 1; pixel_y = 20},/obj/machinery/computer/general_air_control{frequency = 1441; name = "Supply Air Tank Monitor"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Cw" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Cx" = (/turf/simulated/floor{tag = "icon-escape (NORTHEAST)"; icon_state = "escape"; dir = 5},/area/awaymission/box2550Away/engineering) +"Cy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Cz" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "Disposal Exit"; name = "Disposal Exit Vent"; opacity = 1},/turf/simulated/floor/engine,/area/awaymission/box2550Away/maint) +"CA" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"CB" = (/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"CC" = (/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"CD" = (/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibmid3"; icon_state = "gibmid3"},/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gibbl3"; icon_state = "gibbl3"},/obj/effect/decal/cleanable/blood/gibs{tag = "icon-gib3"; icon_state = "gib3"},/obj/item/weapon/paper{info = "

There is blood and ink on this parchment. The paper is horribly old and rotten. You are barely able to read out a few lines from a tangled scribble.

One of five is bare and white, sitting empty without delight. Music drifts across the room, drinks are passed in earnest bloom.

HONK!

"; layer = 3; name = "Old Note #3"; pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"CE" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"CF" = (/obj/machinery/door/window/westleft{name = "Atmospherics Control"; req_access_txt = "24"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"CG" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"},/turf/simulated/floor{tag = "icon-escape (EAST)"; icon_state = "escape"; dir = 4},/area/awaymission/box2550Away/engineering) +"CH" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) +"CI" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) +"CJ" = (/obj/structure/lattice,/turf/space,/area/awaymission/box2550Away/maint) +"CK" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/space,/area/awaymission/box2550Away/maint) +"CL" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"CM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"CN" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"CO" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"CP" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/basic{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"CQ" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"CR" = (/obj/machinery/door/window{base_state = "left"; dir = 2; icon_state = "left"; name = "Toxins Delivery"; req_access_txt = "34"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"CS" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; pixel_x = -30},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"CT" = (/obj/structure/window/reinforced,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/box2550Away/general) +"CU" = (/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Atmos Delivery"; req_access_txt = "24"; tag = "icon-left"},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/engineering) +"CV" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"CW" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"CX" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/embedded_controller/radio/access_controller{exterior_door_tag = "atmos_access_external"; id_tag = "atmos_access_console"; interior_door_tag = "atmos_access_internal"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"CY" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/device/t_scanner,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"CZ" = (/turf/simulated/wall,/area/awaymission/box2550Away/engineering) +"Da" = (/turf/simulated/floor{tag = "icon-escape (SOUTHEAST)"; icon_state = "escape"; dir = 6},/area/awaymission/box2550Away/engineering) +"Db" = (/obj/machinery/door/airlock/maintenance{name = "Chemical Lab Maintenance"; req_access_txt = "12;7"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Dc" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) +"Dd" = (/obj/machinery/door/airlock/medical{name = "Toxin Storage"; req_access_txt = "8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"De" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"Df" = (/obj/item/weapon/crowbar,/turf/simulated/floor,/area/awaymission/box2550Away/general) +"Dg" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; location = "Atmospherics"},/obj/machinery/door/window{base_state = "left"; dir = 2; icon_state = "left"; name = "Atmos Delivery"; req_access_txt = "34"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/engineering) +"Dh" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Di" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dj" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Dk" = (/obj/structure/rack{dir = 4},/obj/item/clothing/suit/fire,/obj/item/weapon/tank/emergency_oxygen/box2550away,/obj/item/clothing/mask/gas/box2550away,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Dl" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Dm" = (/obj/machinery/door/poddoor{id = "mixingwaste"; name = "Waste Vent"},/turf/simulated/floor/engine,/area/awaymission/box2550Away/research) +"Dn" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/wrench,/obj/item/weapon/wirecutters,/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Do" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/weldingtool,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Dp" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/obj/item/device/assembly/timer,/obj/item/device/assembly/timer{pixel_x = 4; pixel_y = -8},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/obj/item/device/assembly/timer{pixel_x = -3; pixel_y = -5},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Dq" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/machinery/air_sensor{frequency = 1442; id_tag = "tox_main"; output = 63; pixel_y = 30},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Dr" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Ds" = (/obj/structure/dispenser,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Dt" = (/obj/machinery/access_button{pixel_x = 27; pixel_y = -6; master_tag = "tox_access_console"; frequency = 1451; command = "cycle_interior"},/obj/item/weapon/extinguisher,/obj/structure/disposalpipe/junction{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Du" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) +"Dv" = (/turf/simulated/floor{dir = 9; icon_state = "green"; tag = "icon-green (NORTHWEST)"},/area/awaymission/box2550Away/general) +"Dw" = (/turf/simulated/floor{tag = "icon-greencorner (NORTH)"; icon_state = "greencorner"; dir = 1},/area/awaymission/box2550Away/general) +"Dx" = (/obj/machinery/access_button{command = "cycle_exterior"; master_tag = "atmos_access_console"; pixel_x = 24},/turf/simulated/floor{tag = "icon-arrival (NORTHEAST)"; icon_state = "arrival"; dir = 5},/area/awaymission/box2550Away/general) +"Dy" = (/obj/machinery/access_button{command = "cycle_interior"; master_tag = "atmos_access_console"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Dz" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"DA" = (/turf/simulated/floor{icon_state = "corner_northeast"; tag = "icon-corner_northeast"},/area/awaymission/box2550Away/engineering) +"DB" = (/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/awaymission/box2550Away/engineering) +"DC" = (/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) +"DD" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"DE" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"DF" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"DG" = (/obj/machinery/door/airlock/glass{frequency = 1451; icon_state = "door_locked"; id_tag = "tox_access_interior"; locked = 1; name = "Toxins Research Access"; req_access_txt = "7"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/awaymission/box2550Away/research) +"DH" = (/obj/machinery/embedded_controller/radio/access_controller{pixel_x = -1; pixel_y = -24; frequency = 1451; id_tag = "tox_access_console"; exterior_door_tag = "tox_access_exterior"; interior_door_tag = "tox_access_interior"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"DI" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"DJ" = (/obj/machinery/door/airlock/medical{frequency = 1451; icon_state = "door_locked"; id_tag = "tox_access_exterior"; locked = 1; name = "Toxins Research"; req_access_txt = "7"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"DK" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AIE"; location = "AftH"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"DL" = (/turf/simulated/floor{dir = 4; icon_state = "arrival"; tag = "icon-arrival (EAST)"},/area/awaymission/box2550Away/general) +"DM" = (/obj/machinery/door/airlock/maintenance{frequency = 1449; icon_state = "door_locked"; id_tag = "atmos_access_external"; locked = 1; name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"DN" = (/obj/item/device/radio/intercom{pixel_y = -29},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"DO" = (/obj/machinery/access_button{master_tag = "atmos_access_console"; pixel_y = -24},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"DP" = (/obj/machinery/door/airlock/maintenance{frequency = 1449; icon_state = "door_locked"; id_tag = "atmos_access_internal"; locked = 1; name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"DQ" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "tox_in"; name = "Toxin Supply Control"; output_tag = "tox_out"},/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/engineering) +"DR" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "tox_sensor"},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/awaymission/box2550Away/engineering) +"DS" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/awaymission/box2550Away/engineering) +"DT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"DU" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"DV" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) +"DW" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) +"DX" = (/turf/simulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/awaymission/box2550Away/general) +"DY" = (/turf/simulated/floor{tag = "icon-greencorner (WEST)"; icon_state = "greencorner"; dir = 8},/area/awaymission/box2550Away/general) +"DZ" = (/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"; tag = "icon-yellowcorner (WEST)"},/area/awaymission/box2550Away/general) +"Ea" = (/turf/simulated/floor{icon_state = "yellowcorner"; tag = "icon-yellowcorner"},/area/awaymission/box2550Away/general) +"Eb" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "bluecorner"},/area/awaymission/box2550Away/general) +"Ec" = (/turf/simulated/floor{tag = "icon-arrival (SOUTHEAST)"; icon_state = "arrival"; dir = 6},/area/awaymission/box2550Away/general) +"Ed" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) +"Ee" = (/turf/simulated/floor{tag = "icon-corner_east"; icon_state = "corner_east"},/area/awaymission/box2550Away/engineering) +"Ef" = (/obj/structure/window/reinforced{dir = 5},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Eg" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"Eh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"Ei" = (/turf/simulated/wall,/area) +"Ej" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER: FIRE'"; icon_state = "fire"; name = "DANGER: FIRE"; tag = "icon-fire"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) +"Ek" = (/obj/machinery/door_control{id = "mixingwaste"; name = "Waste Vent Control"; pixel_x = 0; pixel_y = 24},/obj/machinery/embedded_controller/radio/airlock_controller{pixel_x = -26; id_tag = "tox_airlock_control"; exterior_door_tag = "tox_airlock_exterior"; interior_door_tag = "tox_airlock_interior"; airpump_tag = "tox_airlock_pump"; sensor_tag = "tox_airlock_sensor"; sanitize_external = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"El" = (/obj/machinery/air_sensor{frequency = 1442; id_tag = "tox_mix"; output = 63},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Em" = (/obj/item/weapon/extinguisher,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"En" = (/obj/machinery/computer/general_air_control{frequency = 1442; icon_state = "alert:0"; name = "Toxin Lab Air Monitor"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Eo" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Ep" = (/obj/structure/table{dir = 1; icon_state = "tabledir"},/obj/item/weapon/wrapping_paper,/obj/item/weapon/wirecutters,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Eq" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/device/assembly,/obj/item/device/assembly,/obj/item/device/assembly,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Er" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/machinery/cell_charger,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Es" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Et" = (/obj/structure/closet/l3closet,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Eu" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'NO SMOKING'"; icon_state = "nosmoking2"; name = "NO SMOKING"; tag = "icon-nosmoking2"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/general) +"Ev" = (/obj/structure/closet/secure_closet/box2550away/scientist,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Ew" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Ex" = (/obj/structure/closet/l3closet,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Ey" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Ez" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"EA" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"EB" = (/obj/machinery/door/poddoor{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) +"EC" = (/obj/machinery/sparker{id = "mixingsparker"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) +"ED" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; name = "VACUUM AREA"},/turf/simulated/wall,/area/awaymission/box2550Away/research) +"EE" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) +"EF" = (/obj/machinery/door_control{name = "Mixing Room Vent Control"; pixel_x = -23; pixel_y = -10; id = "mixvent"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EG" = (/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EH" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/grenade/chem_grenade,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EI" = (/obj/structure/table{dir = 2; icon_state = "tabledir"},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler{pixel_x = -3; pixel_y = 4},/obj/item/device/assembly/signaler{pixel_x = 7; pixel_y = 6},/obj/item/device/assembly/signaler{pixel_x = -6; pixel_y = -3},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EJ" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor{pixel_x = -7; pixel_y = 6},/obj/item/device/assembly/prox_sensor{pixel_x = 8; pixel_y = -4},/obj/item/device/assembly/prox_sensor{pixel_x = 2; pixel_y = -8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EK" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EL" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"EM" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"EN" = (/obj/item/device/radio/intercom{dir = 4; pixel_x = 27},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"EO" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"EP" = (/obj/structure/dispenser,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"EQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"ER" = (/turf/simulated/floor{dir = 5; icon_state = "yellow"; tag = "icon-yellow (NORTHEAST)"},/area/awaymission/box2550Away/engineering) +"ES" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/awaymission/box2550Away/engineering) +"ET" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"EU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"EV" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access_txt = "7"},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) +"EW" = (/obj/machinery/door/airlock/glass{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EX" = (/obj/machinery/door/airlock/medical{name = "Toxins Research"; req_access_txt = "7;8"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EY" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"EZ" = (/obj/machinery/door/window/southleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{dir = 4; name = "Head of Research"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fa" = (/obj/machinery/door/window/southleft{dir = 8; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/general) +"Fb" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Fc" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"},/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"Fd" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/awaymission/box2550Away/engineering) +"Fe" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/awaymission/box2550Away/engineering) +"Ff" = (/obj/machinery/ignition_switch{pixel_x = -22; pixel_y = 10; id = "mixingsparker"},/turf/simulated/floor/engine/vacuum,/area/awaymission/box2550Away/research) +"Fg" = (/obj/machinery/computer/security/telescreen{name = "Test Chamber Telescreen"; pixel_x = 0; pixel_y = -1; network = "Toxins"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/research) +"Fh" = (/obj/machinery/door/window/southleft{dir = 8; name = "Head of Research"; req_access_txt = "19"},/obj/machinery/door/window/southleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Head of Research"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fi" = (/obj/structure/table{dir = 9; icon_state = "tabledir"; pixel_y = 0},/obj/item/weapon/paper_bin,/obj/item/weapon/stamp/rd,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fj" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/computer/security/telescreen{name = "Toxins Monitor"; network = "RD"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fk" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fl" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/weapon/clipboard,/obj/item/weapon/paper{name = "Scientific Report"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fm" = (/turf/simulated/floor{dir = 6; icon_state = "yellow"; tag = "icon-yellow (SOUTHEAST)"},/area/awaymission/box2550Away/engineering) +"Fn" = (/obj/machinery/driver_button{id = "toxinsdriver"; pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fo" = (/obj/item/device/radio/intercom{pixel_y = -28},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fp" = (/obj/structure/closet/secure_closet/box2550away/scientist,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fq" = (/obj/structure/table{dir = 5; icon_state = "tabledir"},/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fr" = (/obj/structure/table{icon_state = "tabledir"; dir = 8},/obj/item/weapon/pen,/obj/item/weapon/circuitboard/aicore,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fs" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Ft" = (/obj/machinery/computer/aifixer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fu" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/box/gloves,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"Fv" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) +"Fw" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 1; icon_state = "right"; name = "Specimen Door"; req_access_txt = "19"},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) +"Fx" = (/obj/machinery/door/poddoor{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"Fy" = (/obj/machinery/door/airlock/glass{name = "Toxins Mass Driver"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Fz" = (/obj/machinery/door/airlock/maintenance{name = "Mixing Room Maintenance"; req_access_txt = "12;7;8"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FA" = (/obj/structure/closet/box2550away/toxins_white,/obj/effect/landmark/corpse/away/box2550/scientist,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FB" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FC" = (/obj/structure/computerframe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/general) +"FD" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) +"FE" = (/obj/structure/lamarr,/turf/simulated/floor{tag = "icon-floorgrime"; icon_state = "floorgrime"},/area/awaymission/box2550Away/general) +"FF" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/general) +"FG" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"FH" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"FI" = (/turf/simulated/floor{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/awaymission/box2550Away/engineering) +"FJ" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"},/turf/simulated/floor{tag = "icon-red"; icon_state = "red"},/area/awaymission/box2550Away/engineering) +"FK" = (/turf/simulated/floor{tag = "icon-red (SOUTHEAST)"; icon_state = "red"; dir = 6},/area/awaymission/box2550Away/engineering) +"FL" = (/turf/simulated/floor{tag = "icon-blue (SOUTHWEST)"; icon_state = "blue"; dir = 10},/area/awaymission/box2550Away/engineering) +"FM" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/box2550Away/engineering) +"FN" = (/turf/simulated/floor{tag = "icon-blue (SOUTHEAST)"; icon_state = "blue"; dir = 6},/area/awaymission/box2550Away/engineering) +"FO" = (/turf/simulated/floor{tag = "icon-arrival (SOUTHWEST)"; icon_state = "arrival"; dir = 10},/area/awaymission/box2550Away/engineering) +"FP" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000},/turf/simulated/floor{tag = "icon-arrival"; icon_state = "arrival"},/area/awaymission/box2550Away/engineering) +"FQ" = (/turf/simulated/floor{tag = "icon-arrival (SOUTHEAST)"; icon_state = "arrival"; dir = 6},/area/awaymission/box2550Away/engineering) +"FR" = (/obj/structure/window/reinforced{desc = "

There is some old writing on this window. You are barely able to read out a few lines from a tangled scribble.

Eight guests sit adjourned, four lines filled with void. The green wall beckons one beyond, thou warned one must certainly abscond.

HONK!

"; dir = 5; name = "Old Note #7"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"FS" = (/obj/machinery/mass_driver{dir = 8; id = "toxinsdriver"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"FT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"FU" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"FV" = (/obj/machinery/door/window/southleft{name = "Toxins Monkey Pen"; req_access_txt = "7"},/obj/machinery/door/window/southleft{dir = 1; name = "Toxins Monkey Pen"; req_access_txt = "7"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"FW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"FX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"FY" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"FZ" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; location = "Engineering"},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Engineering Delivery"; req_access_txt = "34"},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/box2550Away/engineering) +"Ga" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Gb" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Gc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Gd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ge" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Francis"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Gf" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Ludwig"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Gg" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Karl"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Gh" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"Gi" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/machinery/power/smes,/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"Gj" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"Gk" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/power/smes,/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"Gl" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/computerframe,/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"Gm" = (/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Engineering Delivery"; req_access_txt = "23"},/turf/simulated/floor{icon_state = "delivery"},/area/awaymission/box2550Away/engineering) +"Gn" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"Go" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/t_scanner,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Gp" = (/obj/structure/closet/secure_closet/box2550away/engineering_personal,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Gq" = (/obj/structure/closet/secure_closet/box2550away/engineering_personal,/obj/item/device/radio/intercom{broadcasting = 1; pixel_y = 20},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Gr" = (/obj/structure/rack{dir = 8},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/head/welding,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Gs" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Rene"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Gt" = (/obj/machinery/air_sensor{frequency = 1442; id_tag = "tox_monkey"; output = 63},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Gu" = (/obj/effect/landmark/corpse/slimeCorpse{name = "grey baby slime (Metroid)"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Gv" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Immanuel"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"Gw" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "white"},/area/awaymission/box2550Away/research) +"Gx" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Maintenance Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Gy" = (/obj/machinery/door/airlock/maintenance{name = "Engineering Maintenance Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Gz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) +"GA" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GB" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "Engineering Security Doors"; opacity = 0},/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"GC" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/electrical,/obj/item/device/t_scanner,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GD" = (/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GE" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/device/analyzer,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GF" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/maint) +"GG" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "William"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"GH" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Ferdinand"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"GI" = (/obj/effect/decal/remains/human{desc = "They look like monkey remains. Do these guys ever catch a break?"; name = "Frederick"},/turf/simulated/floor,/area/awaymission/box2550Away/research) +"GJ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"GK" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"GL" = (/turf/simulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) +"GM" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"GN" = (/obj/structure/table{icon_state = "tabledir"; dir = 4},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GO" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GP" = (/obj/structure/table{icon_state = "tabledir"; dir = 10},/obj/item/weapon/paper,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GQ" = (/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/awaymission/box2550Away/engineering) +"GR" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2_sensor"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/awaymission/box2550Away/engineering) +"GS" = (/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/box2550Away/engineering) +"GT" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "o2_sensor"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/box2550Away/engineering) +"GU" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/box2550Away/engineering) +"GV" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "air_sensor"; output = 7},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/box2550Away/engineering) +"GW" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow"; icon_state = "rwindow"; dir = 2},/turf/simulated/floor/plating,/area/awaymission/box2550Away/research) +"GX" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/machinery/cell_charger,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GY" = (/obj/structure/table{icon_state = "tabledir"; dir = 5},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"GZ" = (/obj/structure/rack{dir = 8},/obj/item/clothing/mask/breath/box2550away,/obj/item/clothing/suit/space,/obj/item/clothing/head/helmet/space,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Ha" = (/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Hb" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hc" = (/obj/structure/table{icon_state = "tabledir"; dir = 6},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Hd" = (/obj/structure/closet/secure_closet/box2550away/engineering_electrical,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"He" = (/obj/structure/closet/secure_closet/box2550away/engineering_welding,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Hf" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Hg" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Hh" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/awaymission/box2550Away/engineering) +"Hi" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/awaymission/box2550Away/engineering) +"Hj" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/awaymission/box2550Away/engineering) +"Hk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; tag = "icon-shock"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hm" = (/obj/machinery/door/airlock/engineering{name = "Power Storage"; req_access_txt = "10"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Hn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ho" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/machinery/status_display{pixel_x = -31},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/machinery/status_display{pixel_x = -31},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hs" = (/obj/machinery/field/generator,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ht" = (/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hu" = (/obj/machinery/door/poddoor{id = "Secure Storage"; name = "Engineering Secure Storage"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Hv" = (/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/engineering) +"Hw" = (/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) +"Hx" = (/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"; tag = "icon-yellowcorner (NORTH)"},/area/awaymission/box2550Away/engineering) +"Hy" = (/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"; tag = "icon-yellowcorner (EAST)"},/area/awaymission/box2550Away/engineering) +"Hz" = (/turf/simulated/floor{icon_state = "caution_east"; tag = "icon-caution_east"},/area/awaymission/box2550Away/engineering) +"HA" = (/obj/machinery/power/rad_collector,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"HB" = (/turf/simulated/floor{icon_state = "yellowcorner"; tag = "icon-yellowcorner"},/area/awaymission/box2550Away/engineering) +"HC" = (/turf/simulated/floor{icon_state = "yellow"; tag = "icon-yellow"},/area/awaymission/box2550Away/engineering) +"HD" = (/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"; tag = "icon-yellowcorner (WEST)"},/area/awaymission/box2550Away/engineering) +"HE" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1359; pixel_x = -30},/turf/simulated/floor{tag = "icon-caution_west"; icon_state = "caution_west"},/area/awaymission/box2550Away/engineering) +"HF" = (/obj/item/weapon/extinguisher,/turf/simulated/floor{dir = 6; icon_state = "yellow"; tag = "icon-yellow (SOUTHEAST)"},/area/awaymission/box2550Away/engineering) +"HG" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"HH" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"HI" = (/obj/item/weapon/extinguisher,/turf/simulated/floor{dir = 10; icon_state = "yellow"; tag = "icon-yellow (SOUTHWEST)"},/area/awaymission/box2550Away/engineering) +"HJ" = (/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"HK" = (/obj/structure/closet/crate,/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"HL" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"HM" = (/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/closet/secure_closet/box2550away/ce,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"HN" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"HO" = (/obj/machinery/door/window{dir = 1; name = "Chef Engineer's Office"; req_access_txt = "19"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"HP" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"HQ" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"HR" = (/obj/structure/closet/crate,/turf/simulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) +"HS" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"HT" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"HU" = (/obj/structure/table/reinforced{dir = 9; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/item/weapon/stamp/ce,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"HV" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"HW" = (/obj/structure/table/reinforced{dir = 5; icon_state = "reinf_tabledir"; tag = "icon-reinf_tabledir (SOUTHWEST)"},/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"HX" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"HY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) +"HZ" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHWEST)"; icon_state = "reinf_tabledir"; dir = 10},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Ia" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/machinery/door_control{id = "Secure Storage"; name = "Engineering Secure Storage"; pixel_y = 8; req_access_txt = "11"},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Ib" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/structure/window/reinforced,/obj/machinery/door_control{desc = "A remote control switch to block view of the singularity."; icon_state = "doorctrl0"; id = "Singularity"; name = "Singularity Shutters"; pixel_y = 8; req_access_txt = "11"},/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Ic" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir"; icon_state = "reinf_tabledir"},/obj/machinery/door_control{icon_state = "doorctrl0"; id = "Engineering"; name = "Engine Security Doors"; pixel_y = 8; req_access_txt = "11"},/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Id" = (/obj/structure/table/reinforced{tag = "icon-reinf_tabledir (SOUTHEAST)"; icon_state = "reinf_tabledir"; dir = 6},/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/item/weapon/storage/pill_bottle/kelotane,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Ie" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{dir = 8; icon_state = "yellow"; tag = "icon-yellow (WEST)"},/area/awaymission/box2550Away/engineering) +"If" = (/obj/item/weapon/storage/pill_bottle/kelotane,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Ig" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ih" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Engineering"; name = "West Airlock Security Doors"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ii" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ij" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ik" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor1"; id = "Singularity"; name = "Window Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Il" = (/obj/structure/sign/securearea{tag = "icon-space"; name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) +"Im" = (/turf/simulated/floor{tag = "icon-corner_west"; icon_state = "corner_west"},/area/awaymission/box2550Away/engineering) +"In" = (/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Io" = (/obj/item/clothing/head/hardhat,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ip" = (/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Iq" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ir" = (/obj/item/weapon/caution{desc = "Caution! Construction Zone!"; name = "caution sign"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Is" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"It" = (/obj/structure/window{icon_state = "rwindow"; dir = 8; reinf = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Iu" = (/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Iv" = (/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) +"Iw" = (/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) +"Ix" = (/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Iy" = (/obj/structure/window{icon_state = "rwindow"; dir = 4; invisibility = 0; reinf = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Iz" = (/obj/item/device/radio,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IA" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) +"IB" = (/obj/machinery/door/airlock/external{name = "West Solar Maintenance"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'DANGER'"; name = "DANGER"},/turf/simulated/wall/r_wall,/area/awaymission/box2550Away/engineering) +"ID" = (/obj/machinery/door/airlock/external{name = "East Solar Maintenance"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IE" = (/obj/machinery/door/airlock/engineering{name = "Singularity Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IF" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) +"IG" = (/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/maint) +"IH" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"II" = (/obj/item/device/flashlight,/turf/simulated/floor/engine,/area/awaymission/box2550Away/engineering) +"IJ" = (/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IK" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/bluegrid,/area/awaymission/box2550Away/engineering) +"IL" = (/obj/item/clothing/mask/cigarette,/obj/item/weapon/weldingtool,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IM" = (/obj/item/clothing/suit/fire,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IN" = (/obj/item/device/analyzer,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IO" = (/obj/structure/grille,/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IP" = (/obj/item/weapon/storage/pill_bottle/antitox,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IQ" = (/obj/machinery/door/airlock/engineering{name = "Port Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IR" = (/obj/machinery/door/airlock/engineering{name = "Starboard Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (WEST)"; icon_state = "rwindow"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IT" = (/obj/item/clothing/gloves/yellow,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IU" = (/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"IV" = (/obj/item/device/multitool,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IW" = (/obj/structure/window{icon_state = "rwindow"; reinf = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IX" = (/obj/item/weapon/cigbutt,/obj/structure/window{icon_state = "rwindow"; reinf = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IY" = (/obj/structure/window{icon_state = "rwindow"; reinf = 1},/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"IZ" = (/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Ja" = (/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/awaymission/box2550Away/maint) +"Jb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{tag = "icon-rwindow (EAST)"; icon_state = "rwindow"; dir = 4},/obj/structure/window/reinforced{tag = "icon-rwindow (NORTH)"; icon_state = "rwindow"; dir = 1},/turf/simulated/floor/plating,/area/awaymission/box2550Away/engineering) +"Jc" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/plating/airless,/area/awaymission/box2550Away/solar) +"Jd" = (/obj/machinery/power/rad_collector,/turf/simulated/floor{dir = 9; icon_state = "yellow"; tag = "icon-yellow (NORTHWEST)"},/area/awaymission/box2550Away/engineering) +"Je" = (/obj/machinery/power/rad_collector,/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) +"Jf" = (/obj/structure/dispenser,/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) +"Jg" = (/obj/structure/computerframe,/turf/simulated/floor{dir = 1; icon_state = "yellow"; tag = "icon-yellow(NORTH)"},/area/awaymission/box2550Away/engineering) +"Jh" = (/obj/machinery/power/rad_collector,/turf/simulated/floor{dir = 5; icon_state = "yellow"; tag = "icon-yellow (NORTHEAST)"},/area/awaymission/box2550Away/engineering) +"Ji" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Jj" = (/obj/item/weapon/cigbutt,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Jk" = (/obj/structure/table{icon_state = "tabledir"; dir = 9},/obj/item/weapon/extinguisher,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Jl" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/clothing/suit/fire,/turf/simulated/floor,/area/awaymission/box2550Away/engineering) +"Jm" = (/obj/structure/table{icon_state = "tabledir"; dir = 1},/obj/item/clothing/suit/fire,/turf/simulated/floor{dir = 4; icon_state = "yellow"; tag = "icon-yellow (EAST)"},/area/awaymission/box2550Away/engineering) + +(1,1,1) = {" +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacadadacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadabacacacacacacaeaeacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadadaeaeadadadadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacaeaeacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacaeaeacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababadadadadafagahaiadadadadababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadaaadajakajaladaaadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadaaadamaganaoadaaadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadapapapapapapaqaqapapapapapapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapapapaparararapasatarauaparavarapapapapapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapawakakaxayaqazapaAaqaqazapayaqazaxakakawapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadapaBaCakapayaqazaDaEaFaqazaGayaqazapakaCaBapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapapapapayaqazaHayaqaqazaHayaqazapapapapapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapawakakaxayaqazaIaJaqaqaKaLayaqazaxaMakawapadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapaBaCakapayaqazaNaOaqaqaPaQayaqazapakaCaBapaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapapapapapayaqazaHayaqaqazaHayaqazapapapapapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadapaSakakaxayaqazaTaUaqaqaVaWayaqazaxakakawapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapaBaCakapayaqazapaXaYaZbaapayaqazapakaCaBapaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapapapapapayaqazapbbbcbcbdapayaqazapapapapapaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapawakakaxayaqbebfbfbfbfbfbfbgaqazaxakakbhapadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapaBaCakapayaqaqaqbibibibibiaqaqazapakaCaBapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRapapapapapbjaqaqbkblbmbmbmbnapaqaqapapapapapaRadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadapbjaqbiboajbpbqbqbrapaqaqbsakakakbtadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRadapbjbkaLbubvbqbwbxbqapaqbyapapapapapbzadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapbjaqbAakbAbBbwbwbBapaqaqbCakakapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapbjbkaLbubDbqbEbEbqapaqbFapapbCapadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadapbjaqbGbHajbqbIbIbqapbJbKafaqaqbLaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadapbMbNbObPambQbRbSbTapaqaqbUaqbVbLaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadapapapapapapaaaaaaaaapapapapapapapadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaRaaaaaaaaaaadadadadadaRaRadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaRadaaaaaaaaaaadaaadaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaadaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbXbWaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaadaaaaadaaaaaaaaaaaaaaadaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaadaaaaadaaaaaaaaaaadaaadaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaaaaaRadaaadaaaaaaaaaRadaRadadaaaaaaadaRadaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYbYaRadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYbYbYbYbYbYbYapapapapapapapapapapapapapapapapapapbZbZbZaRadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWapapapapapcaapcbcccdcdcdcecfapcgaqaqchaqaqcicjckclcmcnaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWapcececoaFaqapcbaqaqaqaqbVcpapaqcqcrcsaFaqaqctcucvcvcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcxaqcqcyaFaqapcbaqaqaqaqaqctapaqcqczcAaFaqaqcBcCcvcvcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWcDaqaqcEaqaqapcFcGaqaqcHcHcHapaqcqcIcJaFaqaqcgapcvcvcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWcacacaapcLaqaqaqaqcMcNcOcPcQapapapapaqcqcRcSaFaqcqceapcvcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWbWbWbWcacTcUapcGaqaqaqaqcVbfcWbfbfbfbfbfbgaqaqaqaqaqaqaqaqapcvcvbZbZadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXcYapapcacZdaapdbdcdddedfdgdhdidhdhdhdhdhdhdhdhdjdkdldldldmapcvcvcvbZadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadndobvdpdqapapdrdsapdtduapdtduapdvcaaHdwaHcaapdxduapdtdyapdtduapapdzcvcvcnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAakdAdBaqdCcZbgbebfbfbfbfbfbfbfbfdDcZbfdadDbfbfbfbfbfdEdFdFdFdFdGdgdHcvcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLbubDdIbidCayaqaqaqaqaqaqaqaqaqaqdJcZbfdadJaqaqaqaqaqaqaqaqaqaqazapdKcvcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadLapapapdMdNapdOdNapdPdNapdQdNcacZbfdaapdRdNapdSdNapdTdNapdUdNcadKcvcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvcaaqdVcaaqdVcadWdVcaaqdXcacZbfdacaaqdYcaaqdVcaaqdYcadZeacadKcvbZadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvcaebdWcaecaqcaeddWcaeeaqcacZbfdacaefdWcaegaqcaehaqcaeiaqcadKcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZejcvcvcaekelcaekemcaekencaekeocacZbfdacaekepcaekeqcaekercaekescaetdHbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeucveucvcvapevewapevexapeyexcMevexapezeAeBapeCeDcMeyexapeyexapevexcacvdKcnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZcvcvbZeEeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeFeGbZcvdKcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcveHeIeIeIeIeIeIeIeIeIeIeIeIeJeKeLeIeIeIeIeIeIeIeIeIeIeIeIeHcvdKcwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvbZeMeNeNeNeNeNeNeNeNeNeNeNeJeIeLeOeNeNeNeNeNeNeNeNeNeNePbZcvdKcKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacaceQacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZcvcvbZbZbZbZbZbZbZbZbZbZbZbZbZeJeIeLbZbZbZbZbZbZeReSeSeTbZbZbZcvdKbZbZbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcveHcvcvcvcvcvcvcvcvcvcvcvcvcvcveHeJeIeLeHcvcvcvcvcvcvcvcvcvcvcvcvcveteUcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacaeacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvbZdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzeJeIeLdzdzdzdzdzdzdzdzdzdzdzdzdzdzdzeVcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadaeadadadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvdzeWeXeYeWeZeYeWeZeYeWeXeYeWeZfaeJeIeLfaeWeZeYeWeZeYeWeZeYeWeXeYeWeZfbcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZeReSeSeSeSfcbZbZadadadadabacacacacacaeacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvdzfdfeeYfdfeeYfdfeeYfdfeeYfdfefaeJeIeLfafdfeeYfdfeeYfdfeeYfdfeeYfdfefbcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzdzffeReSeSeSeSeTbZfgcvcvcvcvcvfhfiaaadaaaaabaeaeaeaeaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacncvcneIeIeIeIeIeIeIeIeIeIeIeIeIeIfjeIeIeIfkeIeIeIeIeIeIeIeIeIeIeIeIeIeIflcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZeubZaaadaaadaaaaaaaaaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeucveucvcvcvcvcvcvcvcvcvcvcvcvcvcvfmaaadaaaaabacacacacacaeacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwcvcweIeIeYfnfoeYfnfoeYfnfoeYfnfofafpeIfqfafnfoeYfnfoeYfnfoeYfnfoeYeIeIfrcvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvbZadadaaadadeYeYeYeYeYeYfaeYfsftftftftfuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzdzdzdzbZbZbZbZbZbZeHbZbZbZbZbZcvfmaaadaaaaababaaadaafvfwfvaaadaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKcvcKfxeIeYeZeWeYeZeWeYeZeWeYeZeWfafpeIfqfaeZeWeYeZeWeYeZeWeYeZeWeYeIeIfycvbZaafzaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZbZbZbZbZbZeuejbZbZfAbZbZeYfBfBfCfDfEfBfBfFeIfGeIfFfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafIeIeIeIfJeIeIeIeIeIeIeIeIeIeIbZcvfKaaadaaaaaaadaaadaafLcvfLaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadbZcvbZeYfMeYeYeYeYbZbZdzdzfNfNfNfNfNfpeIfqfNfNfNfNbZbZbZbZeYeYeYeYeYfMeYfOcvbZaaadaaaaadadadadbZeRfcbZaaaaaaaaaaaaaaaaaabZcvcvcvcvcveHcvcvcvcvcvcvcvfPbZfBfBfBfBfBfBfBeIfQfRfSeIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafTfUeIfUeIeIeIeIfUeIfUeIeIeIeIbZcvbZadadadadadadadaddzfVfwfWdzadadadadadadadadadadadadfXfXfYfZfZfZgafXfXbZbZbZbZbZbZbZcvbZgbgcgcgcgdgedzcvfNgfgfggghgigjfpeIfqgjgkglfNgmcvcvbZeIeIeYgbgbgcgcfOcvbZaaadaabZeRgngnfcbZcvcvbZbZbZbZeReSeSeSeSfcbZcvbZbZeHbZbZbZbZbZbZbZbZcvcvbZfBgogogogogofBfFeIfFeIfFfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadeYgpgqgpgreIeIgsgpgqgpgtfUeIeIbZcvbZaaadaaadaaadaaadffgucvgvdzaaaaadaaadaaadaaadaaadaafXgwgxgygzgAgBgCfXdzcvgDgEgFcvbZcvbZeYgGeYgcfOeYbZcvfNgHgHgHgHgHgIfpeIfqgIgHgHfNgJcvcvbZgKeIgLgcgcgcgcfOeHbZbZbZbZbZcvcvcvcvbZcvcvcvcvcveHcvcvcvcvcvcvcvcvbZeIeIgMgNgNgOeIgPgQbZcvcveHfBfBfBfBfBfBfBeIfQgRfSeIfHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadfafagSgTgSgUgVfUgWgSgTgXgYfagreIbZcvbZbZbZbZadadadadaddzgZcvhadzaRaRadaaadaaadaaadaaaRaRfXhbhchchchchchdfXdzcvhehfhgcvbZcvbZgcgceYgchhgedzcvfNgHhigHhjgHhkfpeIfqhkgHgHfNgJcvcvbZbZeYeYgceYgGeYfOcvcvbZcvcveHcvcvcvcvcvcvcvcvcvcvbZcvcvcvcvcvcvcvcvbZeIeIhlhlhlhleIeIhmbZcvcvbZfBgogogogogofBfFeIhneIfFfHaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhogqhpftftftfthqgqhrhsfagreIbZcvbZcvcvbZaaaaadaaaRdzcvcvcvdzfXfXfXfXfXfXfXfXfXfXdzaRhthchuhvhchwhxhdfXdzcvhyhzhAcvbZcvbZgcgceYgcfOeYbZcvhBgHhCgHhDgHhkfpeIfqhkgHhEfNfNfNcvcvbZhFhGgceYgcgcfOcvcvbZcvcveYeYeYeYhHeYeYeYeYeYeYeYeYeYhHeYeYbZeHbZbZhIhJhKhKhKhLhMeIhNbZbZcvbZfBfBfBfBfBfBfBeIfFeIfFeIfTaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOhPhQhPhPhRhShPhPhQhPhTfagreIbZcveHcvcvbZaaaaaRaaaddzdzhUdzdzhVhWhXhYhZiaibicidiedzbZfXifighxhcihhxiifXdzcvcvcvcvcvcvcvbZeYgceYgcijgedzcvfNgHhCgHhDgHikfpeIfqikgHgHilimfNcvcvbZeYfOgceYgcgcfOcvcvbZcvcveYinioioioioioioioeIeIeIipeIeIiqeYireIirishIitiufFfFivhMeIeIiwbZcvbZfBgogogogogofBfBeYeYeYeYfafafafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahOhPhPhPixiyiziziyiziziyiyhPiAiBgreIbZcvbZcvcvbZeReSeSfcbZbZcvcvcveHieieieieieiCieiDiEieeHcvfXiFhuiGhciHiIiffXdziJcvcvcvcvbZcviKbZbZbZiLeVbZbZcvfNgHgHgHgHgHgjfpeIfqgjgHgHiMiNfNcvcvbZhFiOiPiQiPiPiRcvcvbZcvcveYiSeIeIeIeIeIeIiTeIeIiUeYeIeIiqeYeIeIeIiVhIitiufFfFivhMeIeIiWbZcvbZfBfBfBfBfBfBfBfBiXiYiZjaeYjbjbfaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahPixjchPiyiyjcjciyjcjcjciyjdjejfgrjgbZcvbZcvcveHcvcvcvcvfhjhcvcvcvbZjiieieieieieieieiejjbZcvdzdzdzdzjkdzdzdzbZdzjlcvcvcvcvdzcvfgcvbZcvcvdKbZcvcvfNjmjnjojpjqfNfpeIfqfNjpjrjsjtfNcvcvbZbZbZiLbZbZbZjucvcvjhcvcveYjveIeIeIjweIeIeIeIeIjxeYeIeIiqeYeIeIeIiVhIitjyjzjzjzjAeIeIbZbZcvbZfBgojBjCjDjEfBfBjFfBfBfBjGfFjHfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajIiyiyhQiyiyjcjciyjcjcjciyjdjejfgreIbZcvbZcvcvbZcvcvcvcvfhjhcvcvcvbZjJieieieieiCieieiejKbZcvcvcvbZcvcvcvbZcvcvcvcvcvcvcvcvdzcvjhjhjhcvcvdKcvcvcvfNjLjMfNjNjOfNjPjQjRfNjNfNjSjTfNcvcvjUcvcvcvcvcvcvjucvcvjhcvcveYjVeIeIeIjWeIeIiTeIeIjXeYeIeIeIeYjYeIeIiVeIeIjZjZjZjZeIeIeIbZcvcvbZfBfBfBfBfBfBfBfBkakbkckdfafFfFfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahPkejchPiyiyjcjciyjcjcjciyjdjejfgreIbZcvbZcvcvbZcvcvcvcvcvcvcvcvcvbZkfieiekgkhkikjkkklkmbZcvcvcvcvcvcvcveHcvcvcvcvcvcvcvcvdzcvcvcvcvcvcvdKcvcvgmeYhshsknkokpkpkqeIkrkpksknhshseYcvcvbZfhcvcvcvcvcvdKcvcvcvcvcveYktkukukukvkukukukweIeIeYkxeIkyeYeIeIeIkzeIkAkAeIeIkAkAeIeIbZcvcvbZfBfBfBfBfBfBkBfBfBfBfBfBfajbjbfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakChPhPhPkeiyiykDiyiykEiyiyhPkFkGgreIcacacacacacacacabZbZbZbZbZbZbZkHkIkJkKkLkLkLkLkMkJkIdzbZbZbZdzeHdzbZbZbZbZbZdzdzeHdzdzbZbZbZbZbZbZbZkNjUkOkOiQkPkQkRkSkTkTkTkTkTkTkUkVkQkWiQkOkOkOkOkXkOkOkOkOkYkOkOkOkOkOiQiQkZiQiQlaiQiQlbeYlceYeYhRldleeYeIeIeIeYlflglhliljlklglgllbZeHbZdzlmeYeYeYeYeYeYlnliljlofafafafafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakChPhQhPhPhRhShPhPhQhPlpfagreIcalqbflrlslrdacaeIeIjQeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIfJeIeIeIeIeIeIeIeIeIlteIeIeIeIeIeIeIeIeIeIeIeIeIlulvlwlxlylzlAlBeIeIeIeIeIeIeIeIeIeIeIeIeIeIlteIeIeIeIfJeIeIeIeIeIeIeIjWeIeIeIeIeIeIeIeIeIeIeIjQeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIgslCadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlDgqlEftftftftlFgqlDhsfagreIcalGaqaqcGaqazaHeIeIjQeIeIeIeIeIeIeIeIeIlHeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIlteIeIeIeIeIeIeIeIeIeIeIeIeIlIlJlKlLlMlNlOlPeIeIeIeIeIeIeIeIeIeIeIeIlQeIlteIeIeIeIeIeIeIeIeIeIeIeIjWeIeIeIeIeIeIeIeIeIeIeIjQeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIlRgslSaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadfafagSgTgSlTlUlVlWlXgTgXlYfagreIcalZmambmcmdmecaeIeIjQeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIlteImfeIfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpfpeIeIeIlteIeIeIeIeIeIeIeIeIeIeIeIjWeIeIeIeIeIeIeIeIeImgeIjQmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmhmieIgslSadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadeYhogqhogreIeIgshrgqhomjlUeIeIcacacamkfUmkcacaeIeIbZbZbZeHeYeYeYeYeYeYmlmmeYeYeYeYeYdzmnmomnbZbZbZeIirirmpmqmqmreIeIfafaeIeIkrmsmtmtftftftftmugjmvmwmwmxmxmxmxmxmwmwmygjfsftftftftmtmtmzkqeIeIfalklglglglglhfamlmAfamBiQmCiQiQiQiQiQjUmDbZeIeIeImEmEmEmEmEmEmEmEmEmEmFmGmGmGmGmHmEbZbZbZbZbZmIeIgshpftmzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalDlUeIlUeIeIeIeIlUeIlUeIeIeIeIeImJmJmJmJmKeIeIeIeIbZcvcvcvfamLirirmMmNeIeImOmPmQeImRbZieiemSbZcvbZeImTmTmTmTmTmTmUmTmTmTeIeIkrfHadadadadadadadfNmVmWmXmYmZmXnanbmXnancfNadadadadadadadndkqeIeInenfnfnfnfnfnfnfnfnfnfngeYnhgcnininieYcvdKbZeIeIeInjnknlnlnlnlnlnlnlnlnmnnnonpnqnrmEcvcvcvcvbZnseIeIntnunvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahoeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeImKeIeIeIeIbZcvcvcvfanweIeIeIeIeIeIeIeIeIeImRbZieieiebZcvbZeHbZnxnxnxieieienynznAeIeIkrfHadadadadfNfNfNfNgHgHnBnCgHnBgHgHnBgHgHfNfNfNfNadadadadndkqeIeInDnfnEnFnGnHnfnEnFnGnHnfnIgcgcgcgcgceYcvdKbZeIeIeInJnlnlnlnlnlnKnlnlnlnlnLnlnlnLnlmEcvcvcvcvbZnseIeIeIgshpftftmuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYfanMmtmtmtmtmtmtmtnNeYfaeIeIbZbZbZbZbZbZbZbZbZbZbZcvcvcvnOnweIeIhmnPnQnRhmeIeIeImRbZieieiebZcvcvcvbZnSnSnSieieieieienTeIeIkrnUmufafNfNfNnVmXnWgHgHgHgHgHgHgHgHgHgHgHnWmXnXfNfNfNfanYnZkqeIeInDnfnEoaobnHnfnEoaocnHnfeYodeYgcgcoeeYcvdKbZeIeIeIofnlnlnlnlogmEohnlnlnlnlnlnlnlnlmEcvcvbZbZbZnseIeIeIeIoigTgToiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadojgUeIeIbZokbZcvcvcvcvcvcvcvcvcvcvcvolomeIeIhmjXgNgOhmeIeIeImRbZonooiebZcvcvcvbZopieieieieieieienTeIeIkrkpkpksoqorfNgHnBgHgHgHgHjojpjpjposgHgHgHgHnBgHfNoroqkokpkpkqeIeInDnfnEotounHnfnEotounHnfovnfeYeYeYeYeYbZdKbZeIeIeImEnlnlnlnlowmEohnlnlnlnlnlnlnlnlmEcvcvbZoxbZnseIeIeIgsoyftftmuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaozoAmugreIbZbZbZbZbZbZbZbZbZbZoBoCeHbZfafxeIeIeIeIeIeIeIeIeIeImRbZmTmTmTbZcvcvcvbZoDieieoEkgieoFoGoHeIeIeIeIeIoIoJoroKgHgHgHgHgHfNfNjOoLjOfNfNgHgHgHgHgHoKoroJoMeIeIeIeIeInDnfnfnfnfnfnfnfnfnfnfnfoNnfoOoPoPeYcvcvdKbZeIeIeImEoQnloRoSmEmEmEoTmEmEoUoUoUoUoVmEcvcvbZcvbZoWeIeIeIgsnvaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqgTgqeIeIoXaaaaaaaaadadaaaaoYcvcvcvbZfaeYeYoZeYeIeIpaeIeIeIeImRbZcvcvcvcvcvcvcvbZbZcacacacacacacacaeIeIfqpbpbpcoqorfNpdpdpdpegHfNpfpgpgpgphfNgHgHpdpdpifNoroqpjpbpbfpeIeInDnfnEnFnGnHnfnEnFnGnHnfpknfnfnfnfplcvcvpmkOkTkTkTkOpnbZbZbZbZcvcvcvcvbZpogngngnppbZcvcvcvcvbZnseIeIeIgspqadfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaozprmugreIndadadadadadadadadpscvcvcvdzhFhGgcgceYeYptfOpueYeYeIeIbZcvcvcvcvcvcvcvcvcvcapvpwpxpxpxpycaeIeIfqfNfNfNfNfNfNpzpAfNfNfNfNpBgHgHgHgHfNfNfNfNpCfNfNfNfNfNfNpDfpeIeInDnfnEpEobnHnfnEoaobnHnfoNnfnfnfpFeYcvjhjubZeIeIeIbZpGbZcvcvbZcvcvcvcvcvcvcvcvcvcvcvcvcvcvcvbZmIeIeIeIgsnvaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpHpIeIeIndaaaaaaaaadaaaaaapscvcvcvbZeYfOgcgceYgcgcfOgcgceYeIeIeHcvcvcvcvbZpJcvcvcvpKpxpLpMpNpOpxpKeIeIfqfNpPpQpRgHgHgHgHgHpDpSfNpTjpjpjppUfNpVpDpWgHgHnWgHnWgHpXpYfpeIeInDnfnEotounHnfnEotounHnfpZqaqaqbqceYcvcvjumOeIeIeIbZcvcvcvcveHcvcvqdqdqdqdqdqdqdcvcvbZcvcvbZbZmIeIeIeIgshpqeqeqfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeYeYfsftmueYeYeYeYeYfaeIeIndaaaaaaaaadaaaaaaqgcvcvcvdzhFqhgcqieYgcgcfOgcgceYeIeIbZbZbZbZbZbZbZbZcvcvcaqjqkqlqmqnpxqoeIeIfqfNgHnBqpqqqqqqqrqspDqtfNfNfNqufNfNfNqtpDgHgHgHqvqvgHgHfNfNfpeIeIqwnfnfnfnfqxnfnfnfnfnfnfeYeYeYeYfOeYcvcvjumPeIeIeIbZcvcvcvcvbZcvcvqdqyqzqAqzqAqdcvcvbZcvcveHeImIeIeIeIeIoigTgToiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqBgUeIeIndaaaaaaaaadaaaaaabZcvcvcvbZeYfOgcqieYgcgcfOgcgceYqCqCqCqCqCqCqCqCbZcvcvcvcaqDqEpxpxpxqFcaeIeIfqfNgHgHqGqHqHqIqJqKpDfNqLqMqMgHqMqMqNfNpDgHgHqOqPqQqRgHqSfNfpeIeIbZbZbZbZbZbZbZqTqUqTbZbZbZcvcvcvkNqVqVqVqWbZeIeIeImEqXmEqdqdqdqYqdqdqZqZraqZraqYmErbmEmErcmEmEnseIeIeIgsoyqeqeqfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaozoAmugreIndadadadadfzadadadbZbZrdcvdzhFregcqieYgcgcfOgcgceYrfrfrfrfrfrfrfrfbZcvcvbZcacacacacacacacaeIeIfqfNrgrhrhpTgHgHgHgHpDfNrigHqMgHqMgHrjfNpDrkgHqOrlrmqRgHrnrofpeIeIbZrpcvcvcvrpbZeIrqeIeHcvcvcvcvcvbZbZbZcvdKeHeIeIeIrrqZrsqdqzrtruqZrvqZqZqZqZqZqdrwrwrxrwryrwmEnseIeIeIgslSadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqgTgqeIeIndaaaaaaaaadaaaaaaaabZbZcvbZeYfOgcqirzkOkOkYkOkOkOkOkOkOkOkOkOmDbZbZcvcvcvcvcvcvcvcvcvcvbZeIeIfqfNgHqSmXrArBgHgHpDfNfNrCgHgHgHgHgHrDfNfNpDrEgHrFrFgHgHmXfNfpeIeIbZbZbZcvcvbZbZrqeIrqbZbZbZcvcvcvbZpJfgcvdKbZeIeIeIrGrHqZqdqZraqZqZrIqZqZqZqZqZqdrJrwrKrwrxrwmEnseIeIeIgsrLadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaozprmugreIndaaaaaaaaadaaaaaaaaaabZcvdzhFrMrNiPpnrOrPcvcvcvcvcvcvcvcvcvcvdKcveHcvcvcvcvcvcvcvcvcvcveHeIeIfqfNrEgHnBrQgHgHgHrRadrSqMrTqMgHqMrTqMfNadpDgHgHgHgHgHgHfNfNfpeIeIbZcvcvcvcvcmbZeIrqeIbZrUcvcvcvcvcvcvcvcvdKbZeIeInfrVrHqZrrqZqZqZqZrWqZqZqZrXrYqdrZrwrwrwrwrwmEoWeIeIeIgslSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpHpIeIeIndaaaaaaaaadaaaaaaaaaasacvbZbZrzpnbZbZsbgneScvcvbZbZbZbZbZrzkOqWbZbZbZbZbZbZbZbZbZbZbZbZbZeIeIfqfNscsdsesfrBgHsgshadsisjgHskslsmgHsnfNadpDsospgHgHgHsqsrpDfpeIeIbZcvcvcvcvcveHrqeIrqbZrUcvcvrPeYeYeYeYeYdKbZeIeInfnfqZqZrVqZqZqZqZqdssstsusvswqdsxrwsyrwrxrwmEnseIeIeIgslSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanMmtmtmtmtmtmtmtnNeYfaeYsznZadadadadadadadadadadsAcvcvcvdKcvcveHcvcvcvcvcvbZsBsCsDsEsFsGsHsGsGsIsJsKsKsLsKsKsMsGsGsNeIeIfqfNfNfNfNfNfNfNsOfNadfNfNfNfNfNfNsPfNfNadfNfNfNfNfNfNfNsQsRsSkTkTkOsTqVqVsUkOsVsWsXsWsVsYkOkOsViQsZtataiQtbbZeIeInfnfqZqZtcqZqZqZtdqdqZteqZtfqZqdrwrwrxrwrxrwmEnseIeIeItglSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzdzthdzeVbZbZbZbZbZbZbZbZbZsGsGsGsGsGsGsHsGsGsGsJsKsKsLsKsKsMsGsGlXeIeIeIeHcvcvcvcvcvbZcvbZadfNqLqMqMqMqMqMqNfNadbZticvcvcvcvcvcveHeIeIeIeHcvcvcvetiQtjrqrqtktltkrqrqtmeYgcgcgctndKbZeIeInfrrrHqZtoqZqZqZtpqdtqqZtrqZtsqdrwrwrxrwrxrwmEtteIeIeItgfTaaaaaaaaaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatusGsGtvtwtxtysGsGsGsGsGsGsGsGsGsGsGsGsGtwtzsGtAtBtCtDtEtDtFtGtHtDtIeIeIeIbZcvcvcvcvcvbZcvbZadfNqMgHgHgHgHgHtJfNadbZrUcvcvcvcvcvcvbZeIeIeIbZcvcvcvcvtKtkrqrqrqrqrqrqrqtLeYgctMtNeYdKbZjYeIeIrVrHqZtOtPqZqZtpqdqdqdqdqdqdqdtQmEmEtRmEmEmEeYtStTtUtSeYtVtVtVtVtVtVeYeYeYeYadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatutWtXtXtYtxsMtZuasGsGsGsGsGsGsGsGsGubucuduesGsGufuguhuiufsGsGsGujlXeIeIeIfNfNfNfNfNfNjOukfNadfNqMgHpDpDpDgHqMfNadfaeYeYeYeYeYeYeYeYeIeIeIbZcvcvcvcveYultkrqrqrqrqrqrqtkeYeYumeYeYdKbZeIeIeImEmErcmEmEmEunmEmEuoqZrwqZrwqZrwqZbZcveYupuqeYurusutuuuvuuuvuwuruwuruxgTgTuyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauzufsGsGuAtxsMuBuBsGsGsGsGsGsGsGsGsGubuCuDuEsGsGsGsGsGuisGsGsGsGujhreIeIuFfNnauGuGuHuIuJsgfNadfNqMgHpDuKpDgHqMfNadfauLuMuLeIfJeIuNneeIeIeIeYeYeYeYeYeYuOtkrqrquPuPrqrqrqtKrqrquQuRdKuSeIeIeIrruTuTtdmEuUqZqZqZqZqZmEmEmEmEmEmEbZcveYfFfFeYuVusutuWuXuWuXuYuZvavbeYeYeYeYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavcvdsGsGtutxsMuBuBsGsGsGsGsGsGsGsGsGubveuDvfsGsGsGsGsGvgsGsGsGsGsGvheIeIeIjOgHvigHgHgHgHsgfNadfNqMrTgHvjgHrTqMfNadfaeIvkvlvmuLeIeIqweIeIeIisvnvovpvqeYvrtkrqvsvtvrvurqtkvvrqrqvwnDdKvxeIeIeIrGqZqZvymEqZqZqZqZqZqZmEqZqZqZqZqZbZcvvzfFfFvAuZvBvBuZuZuZuZvCvDuturuwurtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatuvEsGvFvGtxsMuBvHsGsGsGsGsGsGsGsGsGubvIvJvKsGsGsGsGvFvLsGsGsGsGsGvMeIeIeIvNgHgHgHgHgHgHgHfNadfNqMgHgHgHgHgHqMfNadfaeIeIeIeIeIeIeIjQeIvOeIqwvnvPvQvReYvStkrqvsvTvSvurqtkvUrqrqvVnDdKvxeIeInfrVqZqZvymEvWqZqZqZvXqZrcqZqZqZqZqZbZcveYvYfFeYvZvBvBvZvZvZvZvCwautuVwbuVtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatuwcwdwetutxtywfsGsGsGsGsGsGsGsGsGsGsGsGtwwgsGsGsGsGsGwhsGsGsGsGujsNeIeIeIfNgHgHgHgHgHgHgHfNadfNfNqMqMwiwjqMfNfNadfaeIwkwlwmeIeIeIjQeIeIeIwnfBfBwoeYeYrqrqrqrqwpwprqrqwqvUrqrqwrqwdKwseIeInfnfqZqZqZwtwuqZqZqZvXqZwvqZqZqZwwqZbZcveYvYwxeYwyusutuuuvuuuvwzvZwAwBeYeYeYeYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatututututuwCwDwEwFwGwHwDwEwEwEwGsGsGsGsGsHsGsGsGsGsGsGvgsGsGsGsGujlXeIeIeIfNwIgHwJwKwLwLwMfNadwNfNfNfNfNfNfNfNwNadfakAkAkAeIkAkAkAneeIeIeInefBwOfBeYwPtkrqrqrqrqrqrqrqtkwQwRwSeYeYdKbZeIeInfnfqZqZqZwTvyqZqZqZvXqZmEwUwVwWwWqZbZcveYeYeYeYuVusutuWuXuWuXwbuVwbuVeYwXwYtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawZxaxbaaaaxbxcxbaaaaaaxdsGxesGsGsHsGsGsGsGsGsGxfsGsGsGxeujhreIeIeIfNwIwIxgxhxixjxkfNbzwNwNwNwNwNwNwNwNwNbzfakAkAkAeIkAkAkAqweIeIeIqwxlxmxneYtkrqrqrqrqrqtkxotkrqrqrqrqrqxpdKbZeIeInfxqxrxsxtmExuqZqZqZqZxvqdqdqdqdqdqddzcveYfFxweYurvBvBuweYeYeYeYxxxyeYeYxzxAtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxdwCxdaaaaxdwHxdaaaaaatututututuxBxCxDxDxDxDxDxDxDxDxDxDxDxDltltltfNfNfNfNfNfNfNfNfNfafafafafafafafafafafafaxExFxGjQxExFxGeYltltlteYeYeYeYfaxExFxFxGxHxExFxFxFxGxHxExFxGfajubZeIeIeIrVqZqZqZxIqZqZqZqZqZqZqduoxJxKwuxLdzcveYxMfFxNuVwbuVwbeYxOuVxPuVwbuVwbwXwYtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZxQcvxRxRxRcvgmgmcvcvcvcvcvbZeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIjWjQeIeIeIxSxTqZqZqZqZqZqZqZqZqZxUqZrHxVraxWdzcveYeYeYeYuruwuruwxXuwxYxZyayburuwycxAtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZydqVqVqVqVqVqVqVqVdHcvcvcveHeIyeeIeIeIeIeIeIeIeIeIeIeIeIeIyfeIeIeIygeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIjWjQeIyheImEmEyiyjmEmEykylqZqZqZqdymqZqZqZqZdzcveYynfFyouVwbuVwbeYwbypyqyrwbuVwbwXwYtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZpogngngnysbZbZjucvcvcvbZireIeIeIeIytfUyteIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIeIjWjQeIeIeImEyuqZqZyumEqZqZqZyvqZqdywqZqZyxyyyzcveYfFyAeYuruwuruweYyBuruwuruwuruwuruweYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaadadadadkNqVqVmDbZfafafafafayCyDyCfafafafafaeHbZbZeIeIeIfaeYeYyEeYeYeYbZbZbZbZeHbZbZbZbZbZbZyFyGbZbZyFyGbZbZeHbZbZbZbZyHyIyIyJyIyKqdqdyLyMqdqyqZqZqymEykylqZyNyOqdqdyPyQqYqdeVeHbZbZbZbZbZeHbZbZbZjubZbZbZbZbZbZbZbZbZbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaadmTmTmTmTcvdKcvfaeIeIeIeIeIeIeIeIeIeIeIfacvyRkOkTkTkTySyTyUkTyVyWyXyYcvcvcvcvcvcvcvcvcvcvcvcvcvbZcvcvcvcvcvcvcvcvcvyZqZzazbzczcqZqZqZqZqdzdqZqZzercqZqZqZyNqZqyzfzfzfzfmEdKcvcvcvcvcvcvcvcvcvcvdKcvcvcvcvcvcvcvcvzgbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTzhzimTcvdKcvfaeIgTeIeIeIeIeIeIzjzkzlfacvdKbZeIeIeIfazmjWeIeIznzokOkOqVqVsTsTsTkOkOqVqVqVqVqVkXqVqVqVqVkOkOkOkOkOzpzqqZqZqZqZqZqZqZrHzrqZqZqZzsmEykylqZyNqZqZqZqZqZqZztdKcvcvcvcvcvcvrzkXkOkOpnzuzvzvzvzvzvzwbZbZbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTzxzymTmTdKcvfagTeIeIeIkxeIzzeIzAzAeIfacvdKbZeIeIeIeYzBzCzDzEzFeYcvcvcvcvcvcvcvcvbZzGeSeSeSzHbZzIbZcvcveHcvcvcvcvzJzKqZqZqZqZqZqZqZzLqdzMzNzOzsmEzPqZqZyNzQrazfzfzfzfmEdKcvzRzRbZbZbZjucvbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTzShchczTdKcvfaeIeIgTeIeIgTeIeIeIeIzUfacvdKbZeIeIeIeYeYeYeYeYeYeYbZbZbZeHbZbZbZbZbZaaaaaaaaaabZbZbZbZbZejbZcvcvcvzJzVzWqZqZzWqZqZzWzXqdmEmEmEmEmExsmEmEyNmEmEmEmEmEmEmEjubZbZbZbZcvcvdKcvejbZbZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTzSzYhcmTdKcvfaeIeIgTgTeIgTeIjweIzAeIfacvdKbZeIeIeIbZcvbZcvcvcvcvcvcvcvcvcvcvcvbZadaaaaaaaaaaadaaaaaaaaaabZcvcvcvzJzZAaAbAcAdAeyxqZAfqdcvcvcvcveHAgeHcvdKcvcvcvcvcvcveHdKcvcvcvcvcvcvdKcveucveuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTAhAhmTmTdKcvfafafafafafafafafbfafafafacvdKbZeIeIeIbZcvbZcvcvcvcvcvcvcvcvcvcvcvbZadadadaaaaaaadaaaaaaaabZbZbZcvcvAiyIyIyIyIyIyIyIyIAjyIqVqVAksVAlAmsVsVAnsVsVsVsVsVsVkOAoqVqVqVApsVsVAqdzdzdzdzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTArAsmTAtdKcvcvcvcvcvcvcvcvcvdKcvcveHcvcvdKbZeIeIAubZcvjhcvAvAvAvAvAvAvAvAvAvAvAvAvAvadAwAwAwAwAwaaaaaaeucveucvcvcvcvcvcvcvcvcvcvcvcvcvcvcveVAxqZqZqZqZqZqdtdqZzfAyqdbZbZbZbZcvAzAAABABABABACdzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaamTmTmTmTbZkNkOADqVqVqVkOsTsTsTkYAEAFkOqVqVAGbZeIeIeIbZcvjhcvAvAHAHAHAHAHAHAHAHAHAHAIAJadAwAKAKAKAwadadadbZbZbZbZbZALgngngngngngnAMdzdzdzdzdzeVANqZqZqZqZqZAOqZqZqZqZAPadaaaabZcvzGeSeSzHAQARACdzadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaaaRaRaRaRaRadbZjucvcvcvcvcvcvcvcvcvcvbZcvcvcvbZeIeIeIbZcvbZcvAvAHAHAHAHAHAHAHAHAHAHASATadAwAUAKAKAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAVAWqZAXAYAZqZqZqZqZqZyxBamGmGmGBbqdadaaaabZcvBcBdBdBdBdfKACdzadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadfzadadadadadadadadadadadadjucvBeBeBeBeBfBeBeBeBeBeBeBgrpbZeIeIeIbZcvbZcvBhAHAHAHAHAHAHAHAHAHAHBiATadAwAKAKAKAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjqZBkqZAOBlqZqZBmqZqZqZAOqZqZqZqZAVadaaaabZcvBnBdBdBoBpbZBqdzaRaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRadaRadaRaRaRaRaRaRaRaRaRaRaRaRBrcvBeBsBsBtBuBvBwBxBwBwBydzdzdzeIeIeIbZcvcvcvAvAHAHAHAHAHAHAHAHAHAHAHATadAwAwAwAwAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjBzqZBAAYBBBCBDAaAbBEBFAYtdqZzfAyBjaaaaaabZbZbZcvBGbZbZbZBHdzBIdzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRadaRadaRaRaRaRaRaRaRaRaRaRaRaRBJcvBeBKBLBLBwBwBwBwBwBwByBMBNdzeIeIeIbZbZcvdzAvAHAHAHAHAHAHAHAHAHAHAHATadadadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBOmGBbqdqdqdyPmGmGmGBbqdqdqdyPmGmGBPaaaaaaaabZcvcvetdHBQBRBSBTBUdzadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRadaRadaRaRaRaRaRaRaRaRaRaRaRaRjucvBeBVBwBtBwBWBLBXBYBZBeCaCbdzeIeICcbZcvcvfhAvAHAHAHAHAHAHAHAHAHAHAHCdCeCeCeCfCfCgaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvcvdKcvAQBSChCidzadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadfzadadadadadadadadadadadbZjucvBeBLBLBLBwBwBwBvBLBLBedzdzdzeIeICjbZbZAvAvAvAvAvAvAvAHAHAHAHAHAHAHAHAHAHAHAHAHATadAwAwAwAwAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZcvcvcvdKCkBRBSbZCidzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaaaaadbZbZbZbZbZdKcvBeClCmCnBwBwBwBwBwBwCoCpCqCreIeICsbZCtAvAHCuCvCuCwAvAHAHAHAHAHAHAHAHAHAHAHAHCxATadAwAKAKAKAwadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZbZeRCybZdzCzdzdzdzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaaaaaaaadadfvcvcvcvcvdKcvCABwBwBwBwBvBYBvCBCBBeBeCqfaeIeICCbZCDAvAHAHCEAHAHCFAHAHAHAHAHAHAHAHAHAHAHAHCGATadAwCHCIAKAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCJCJCKCLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaadadadadadCMcvcvcvcvdKcvCNBwBwBwBwBvCOCPCQCQCQBeCRfaCSeICTbZbZAvCUCVCWCXCYAvAHAHAHAHCZCZCZAHAHAHAHAHDaATadAwAKAKAKAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaRadaaaaadaaaaaaaaBeBeBfBeBeDbDcDcDcDcDdDeBeBeBeBeBefafaeIeYeIeIDfeYirCZDgAvDhDiDjAvAHAHAHAHDkCZDlAHAHAHAHAHAHATadAwAwAwAwAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBeBeDmBeBeaaaaadaaBeDnDoDpDqBwDrDrDrDsBwDtDuCqCqCqBeDvDwDwDweIeIeIkrkrkrDxAvAHAHAHAvDyAHAHAHDkCZDzAHAHAHAHAHDAATadAwDBDBDBAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRadadBeDCDCDCBeaaadadaaBeDDDEDEBwBwBwBwBwBwBwDFDGCqDHDIDJCCeIeIeIeIDKeIeIeIeIDLDMDNDOAHDPAHAHAHAHDkCZAHAHAHAHAHAHDQATadAwDRDSDBAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeBeBeBeBeBeBeBeBeBeBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRaRaRaRBeByDTByByBeBfBeByBeBwBwBwBwBwBwBwBwBwBwDUDVBeBeBeDWDXkwDYeYDZeIEaeYEbfqEcEdAvAvAvAvAHAHAHAHCZCZCZAHAHAHAHAHEeATadAwDBDBDBAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqEfCqCqBeBeEgEgEgEhadadadadadadadEiEiadadadadababBeEjBeByBeByEkBwBwBwBwElEmBeEnBwBwEoEpEqErEsBwBwEtEufbEvEwExfafafafafaDZeIEafafafafafaEyEyEyAvAHAHAHAHEzEzEzAHAHAHAHAHAHATadAwAwAwAwAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqCqCqCqCqCqBeEgEgEgEAadaaaaaaaaaaaaaaaaaaaaaaaaabaaEBDCECEDEEByEFBwBwBwBwBwEGBeBwBwBwEHEIEJEKBwBwBwEtfangnfnfnfnfELEMENfaDZeIEafaEOEOAHEPAHAHAHEQAHAHAHAHAHAHAHAHAHAHAHAHERATadAwESESESAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqCqCqCqCqCqCqBeEABeETEUadadadadadadadEiEiadadadadabaaEBDCDCEVDCEWBwBwBwBwBwBwBwEXBwBwBwBwEYBwEYBwBwBwBwEZnfnfnfnfnfnfnfnfFaDZeIEafaAHAHAHAHAHAHAHFbAHAHAHAHAHAHAHAHAHAHAHAHFcATadAwFdFeESAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqBeBeBeaaaaaaaaaaaaaaaaaaaaaaaaaaabaaEBDCDCEDFfByBwBwBwBwBwBwBwFgBwBwBwBwBwBwBwBwBwBwBwFhnfnfFiFjFkFlnfnffaDZeIEafaAHAHAHAHAHAHAHEQAHAHAHAHAHAHAHAHAHAHAHAHFmATadAwESESESAwadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababBeBeBeBeBeBeBwFnBwBwFoBwBwByBwBwBwBwBwBwBwBwBwBwFpfaFqnfFrFsFtFuFvFwfaDZeIEafaAHAHAHAHAHAHAHAvAHAHAHAHAHAHAHAHAHAHAHAHAHATadAwAwAwAwAwadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqFxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBeByByByByByByFyByByByByFzByByBwBwBwBwBwBwBwBwBwBwFAfaFBnfnfnfFCobFDFEfaDZeIFFfaAHFGAHAHAHFHAHAvAHFIFJFKAHFLFMFNAHFOFPFQAHATadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeFRCqCqCqEgEgEgEgEgEgEgFxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFxEgEgEgEgFSBycvcvcvcvcvBeFTFUFVFWFXFYBwBwBeBeBefafafafafafafafafaCZFZGaGbCZAvAvAvAvAvAvAvAvGcCfCfCfCfCfCfCfCfCfCfCfCfGdadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqFxaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadBeBeBeBeByByByByBycvcvcvcvcvBeGeCqGfGgCqGhBwBwBecvcvCZAvGiGjGkGjGkGjGlAvGmAHGnAvGoGpGpGqGpGpGrAvadadadadadadadadadadadadaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZbZejcvcvcvcvcvcvbZcvBeCqGsGtGuGvGhGwGwBecvcvGxGyAHAHAHAHAHAHAHAvGzGAGBAvGCAHAHAHAHGDGECZAwAwAwAwAwAwAwAwAwAwAwAwAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeCqCqCqCqCqCqCqCqCqCqCqBeBeBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRGFcveucvcvcvcvbZbZbZcvBeGGCqGHGICqGJGwGwBecvcvCZAvAHAHAHAHAHAHAHGKGLAHGnGMGNAHAHAHAHGOGPCZAwGQGRGQAwGSGTGSAwGUGVGUAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqCqCqCqCqCqCqBeEABeETEUadadadadadadadEiEiadadadadadadadaRbZbZpogngngnysbZaabZcvBeBeBeGWBeBeBeBeBeBecvcvcvAvGXGYGZHaAHAHEPHbGLAHGnHbHcAHAHHdHeHfHgCZAwGQHhGQAwGSHiGSAwGUHjGUAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqCqCqCqCqCqBeEgEgEgEAaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRadadaaaaaaaaaaaaaabZcvcvcvcvcvcvcvcvcvcvcvcvcvAvAvAvAvHkHlHmHnCfHoGLAHGnHpCfHqGaHnCfHrAvCZAwGQGQGQAwGSGSGSAwGUGUGUAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeCqCqEfCqCqBeBeEgEgEgEUaRaRaRaRaRaRaREiEiaRaRaRaRaRaRaRaRadaaaaaaaaaaaaaaaabZcvcvcvcvcvcvcvcvcvcvcvcvcvAvHsHtHuHvAHHwHwHwHwHxAHHyHwHwHwHwAHAHHzHuHAAvAwAwAwAwAwAwAwAwAwAwAwAwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBeBeBeBeBeBeBeBeBeBeBeBeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaabZpogngngnysbZbZbZpogngngnysAvHsHtHuHvAHAHAHHBHCHCAHHCHCHDAHAHAHAHHzHuHAAvadaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAvAvCZHEAHAHHBHFHGHHAHHGHHHIHDAHAHAHHzAvHtAvadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvHsHtHuHvAHHJHKHLHMHNHOHNHPHQHRAHAHAHHzAvHSAvadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRAvHsHtHuHvAHAHHKHTHUAHHVAHHWHXHRAHAHAHHzAvHtAvaRaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAvAvAvAHAHAHHYHTHZIaIbIcIdHXIeIfAHAHHzHuHAAvadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadIgIhIgAHAHAHAvIiIjIjIjIjIjIjIjIkAvAHAHHzHuHAAvadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAvAvIlImEeAvAvInInInInInInInInInAvAvImEeAvAvAvaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAHAHAHAvHtIoIpIqHtIrHtHtHtHtHtAvAHAHAHAvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAHAHAHAvHtHtHtHtHtHtHtHtHtHtHtAvAHAHAHAvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAvAHAHHtIsItIuHsIvIwIwIwIwHsIxIyIsHtAHAHAvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaRaRaRAvAHAHAvAvHtIzIwIAAKAKAKAKIwHtHtAvAvAHAHAvaRaRaRaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacabaaaaaaaRdzIBAvAHHzICHtHtHtIwAKAKAKAKAKIwHtHtHtICHvAHAvIDdzaRaaaaaaabacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeacadaaaRaRffcvAvAHHzIEHtHtIrIwAKAKIFAKAKIwIrHtHtIEHvAHAvIGffaRaRaaaaacaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacadaeacacacacacacacacacacacabadaRaRdzdzIBAvAHHzICHtHtIHIwIIAKAKAKAKIwHtIJHtICHvAHAvIDdzdzaRaRaaabacacacacacacacacacacaeadacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeadadadadadadadadadadadaaaaaRdzdzcvcvdzAHAHAvAvHtHtIwAKAKAKAKAKIKILHtAvAvAHAHdzcvIMdzdzaRaaaaadadadadadadadadadadaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacadaeacacacacacacacacacacacadaaaRoYgucvcvdzHDAHHtIsItHtHsIwIwIwIwIwHsINIyIsHtAHHBdzcvcvguIOaRaaadacacacacacacacacacacaeadacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadadadadadaaaeaeaeaeaeaeaeaeaeaeaeaeacaRaRpsIPgZcvIQGLAHAvAvHtHtHtHtHtIrHtHtIJHtHtAvAvAHGnIRiKgZcvpsaRaRacaeaeaeaeaeaeaeaeaeaeaeaaaaaaadadadabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacadaeacacacacacacacacacacacadadaaISITIUcvdzHxAHAvIVHtIWIXIWIWIYIWIWIWIWHtIZAvAHHydzJaIUIPISaaaaadacacacacacacacacacacaeadacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaeaeaeaeaeaeaeadaaadaaaaadadadadaaaaaaaaaadzdzgvcvdzAHAHAvAvAvHkCfCfCfCfCfCfCfJbAvAvAvAHAHdzcvgvdzdzadaaaRadadadadadadadadadadaeaeaeaeaeaeaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacadaeJcacacacacacacacacacacabadadaddzdzdzAvAHAHAHGnAvJdHwJeJfJgHwJeHwJhAvGLAHAHAHAvdzdzdzaaadaaabacacacacacacacacacacaeadacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeaeaeaeaeaeaeaeaeaeaeaeacadadaaaaaaaaAvJiAHAHGnGaGLAHJjAHAHAHAHAHGnGaGLAHAHJiAvaaaaadadadaaacaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRababacacacacacacacacacacacabaaaaaaaaaaaaAvAvAvAvAvAvGLAHAHAHAHAHJkJlJmAvAvAvAvAvAvaRadadadaaaaabacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRaRabababababababababababababaaaaaaaaaaaaadadaaadadAvAvAvAvAvAvAvAvAvAvAvaaadaaadadaRadaRaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadadadadadadaaaaaaaaadaaaaaaaRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +"} diff --git a/maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm similarity index 100% rename from maps/RandomZLevels/centcomAway.dmm rename to _maps/RandomZLevels/centcomAway.dmm diff --git a/maps/RandomZLevels/challenge.dmm b/_maps/RandomZLevels/challenge.dmm similarity index 100% rename from maps/RandomZLevels/challenge.dmm rename to _maps/RandomZLevels/challenge.dmm diff --git a/maps/RandomZLevels/example.dmm b/_maps/RandomZLevels/example.dmm similarity index 100% rename from maps/RandomZLevels/example.dmm rename to _maps/RandomZLevels/example.dmm diff --git a/maps/RandomZLevels/fileList.txt b/_maps/RandomZLevels/fileList.txt similarity index 58% rename from maps/RandomZLevels/fileList.txt rename to _maps/RandomZLevels/fileList.txt index 2213f6a6d1e..99e3adc4b88 100644 --- a/maps/RandomZLevels/fileList.txt +++ b/_maps/RandomZLevels/fileList.txt @@ -7,14 +7,15 @@ #Do NOT tick the maps during compile -- the game uses this list to decide which map to load. Ticking the maps will result in them ALL being loaded at once. #DO tick the associated code file for the away mission you are enabling. Otherwise, the map will be trying to reference objects which do not exist, which will cause runtime errors! -#maps/RandomZLevels/example.dmm -#maps/RandomZLevels/blackmarketpackers.dmm -#maps/RandomZLevels/stationCollision.dmm -#maps/RandomZLevels/spacebattle.dmm -#maps/RandomZLevels/beach.dmm -#maps/RandomZLevels/Academy.dmm -#maps/RandomZLevels/wildwest.dmm -#maps/RandomZLevels/challenge.dmm -#maps/RandomZLevels/listeningpost.dmm -#maps/RandomZLevels/spacehotel.dmm -#maps/RandomZLevels/centcomAway.dmm \ No newline at end of file +#_maps/RandomZLevels/example.dmm +#_maps/RandomZLevels/blackmarketpackers.dmm +#_maps/RandomZLevels/stationCollision.dmm +#_maps/RandomZLevels/spacebattle.dmm +#_maps/RandomZLevels/beach.dmm +#_maps/RandomZLevels/Academy.dmm +#_maps/RandomZLevels/wildwest.dmm +#_maps/RandomZLevels/challenge.dmm +#_maps/RandomZLevels/listeningpost.dmm +#_maps/RandomZLevels/spacehotel.dmm +#_maps/RandomZLevels/centcomAway.dmm +#_maps/RandomZLevels/box2550Away.dmm \ No newline at end of file diff --git a/maps/RandomZLevels/listeningpost.dmm b/_maps/RandomZLevels/listeningpost.dmm similarity index 100% rename from maps/RandomZLevels/listeningpost.dmm rename to _maps/RandomZLevels/listeningpost.dmm diff --git a/maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/spacebattle.dmm similarity index 100% rename from maps/RandomZLevels/spacebattle.dmm rename to _maps/RandomZLevels/spacebattle.dmm diff --git a/maps/RandomZLevels/spacehotel.dmm b/_maps/RandomZLevels/spacehotel.dmm similarity index 100% rename from maps/RandomZLevels/spacehotel.dmm rename to _maps/RandomZLevels/spacehotel.dmm diff --git a/maps/RandomZLevels/stationCollision.dmm b/_maps/RandomZLevels/stationCollision.dmm similarity index 100% rename from maps/RandomZLevels/stationCollision.dmm rename to _maps/RandomZLevels/stationCollision.dmm diff --git a/maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/wildwest.dmm similarity index 100% rename from maps/RandomZLevels/wildwest.dmm rename to _maps/RandomZLevels/wildwest.dmm diff --git a/maps/MetaStation.v39A.III.dmm b/_maps/map_files/MetaStation.v39B.II.dmm similarity index 99% rename from maps/MetaStation.v39A.III.dmm rename to _maps/map_files/MetaStation.v39B.II.dmm index 81e67412ae4..d876719803c 100644 --- a/maps/MetaStation.v39A.III.dmm +++ b/_maps/map_files/MetaStation.v39B.II.dmm @@ -32,7 +32,7 @@ "aaF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area) "aaG" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/security/processing) "aaH" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fore) -"aaI" = (/obj/machinery/door/airlock/glass{name = "space-bridge access"},/obj/machinery/door_control{id = "supplybridge"; name = "Shuttle Bay Space Bridge Control"; pixel_x = 0; pixel_y = 27; req_access_txt = "12"},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"aaI" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Supply Bay Bridge Access"; req_access_txt = "0"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aaJ" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison) "aaK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/maintenance/fore) "aaL" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod3/station) @@ -118,7 +118,7 @@ "acn" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/starboard) "aco" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/starboard) "acp" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"acq" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Supply Bay Bridge Access"; req_access_txt = "0"; req_one_access_txt = "8;12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"acq" = (/obj/machinery/door/airlock/glass{name = "space-bridge access"},/obj/machinery/door_control{id = "supplybridge"; name = "Shuttle Bay Space Bridge Control"; pixel_x = 0; pixel_y = 27; req_access_txt = "0"},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "acr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "acs" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor{icon_state = "dark"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "act" = (/obj/machinery/door/airlock/glass_security{name = "Long-Term Cell 3"; req_access_txt = "2"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison) @@ -201,7 +201,7 @@ "adS" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "neutral"; dir = 10},/area/crew_quarters/courtroom) "adT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Brig Control"; req_access_txt = "3"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/security/warden) "adU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) -"adV" = (/obj/machinery/door/airlock/glass{name = "space-bridge access"},/obj/machinery/door_control{id = "supplybridge"; name = "Shuttle Bay Space Bridge Control"; pixel_x = 0; pixel_y = 27; req_access_txt = "12"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"adV" = (/obj/machinery/door/airlock/glass{name = "space-bridge access"},/obj/machinery/door_control{id = "supplybridge"; name = "Shuttle Bay Space Bridge Control"; pixel_x = 0; pixel_y = 27; req_access_txt = "0"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "adW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/brig) "adX" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/ears/earmuffs,/obj/item/clothing/tie/red,/obj/item/clothing/head/soft/red,/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "adY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fore) @@ -288,7 +288,7 @@ "afB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "afC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "afD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) -"afE" = (/obj/item/clothing/gloves/fyellow,/obj/structure/rack{dir = 8; layer = 2.9},/turf/simulated/floor/plating,/area/maintenance/starboard) +"afE" = (/obj/item/device/mmi{name = "man-machine interface"},/obj/structure/rack{dir = 8; layer = 2.9},/turf/simulated/floor/plating,/area/maintenance/starboard) "afF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "afG" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fore) "afH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/maintenance{name = "Storage Room"; req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fore) @@ -554,7 +554,7 @@ "akH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "akI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) "akJ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/prison/solitary{name = "Prisoner Education Chamber"}) -"akK" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"akK" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt{desc = "Can hold quite a lot of stuff."; name = "mutli-belt"},/obj/item/clothing/gloves/fyellow,/turf/simulated/floor/plating,/area/maintenance/starboard) "akL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) "akM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) "akN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig) @@ -590,7 +590,7 @@ "alr" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "als" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack{pixel_x = 10; pixel_y = 2},/obj/item/stack/medical/ointment{pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "alt" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) -"alu" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Port Solar Access"; req_access_txt = "10"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"; pipe_color = "blue"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) +"alu" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"; pipe_color = "blue"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/brig) "alw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "63"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig) "alx" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/engineering) @@ -608,8 +608,8 @@ "alJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig) "alK" = (/obj/machinery/door/window/eastright{dir = 4; name = "Danger: Conveyor Access"; req_access_txt = "12"},/obj/machinery/conveyor{dir = 10; icon_state = "conveyor0"; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal) "alL" = (/obj/machinery/door/poddoor{density = 1; icon_state = "closed"; id = "SecJusticeChamber"; name = "Justice Vent"; opacity = 1},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"; tag = ""},/area/prison/solitary{name = "Prisoner Education Chamber"}) -"alM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/brig) -"alN" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/brig) +"alM" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Port Solar Access"; req_access_txt = "10"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/auxsolarport) +"alN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/brig) "alO" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fore) "alP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/carpet,/area/security/detectives_office) "alQ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig) @@ -660,7 +660,7 @@ "amJ" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/fore) "amK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/brig) "amL" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig) -"amM" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/brig) +"amM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/brig) "amN" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "amO" = (/obj/machinery/atmospherics/pipe/simple/general/hidden,/obj/machinery/light/small{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "floorgrime"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "amP" = (/obj/machinery/atmospherics/pipe/simple/general/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/prison/solitary{name = "Prisoner Education Chamber"}) @@ -765,7 +765,7 @@ "aoK" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/brig) "aoL" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/brig) "aoM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/brig) -"aoN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/power/apc{cell_type = 10000; dir = 2; name = "Brig APC"; pixel_x = 1; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor{icon_state = "red"},/area/security/brig) +"aoN" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/flasher{id = "secentranceflasher"; pixel_x = 25},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/brig) "aoO" = (/obj/machinery/mineral/stacking_unit_console{dir = 2; machinedir = 8; pixel_x = 32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/disposal) "aoP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/brig) "aoQ" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/security/brig) @@ -793,7 +793,7 @@ "apm" = (/obj/machinery/washing_machine,/turf/simulated/floor{icon_state = "barber"},/area/crew_quarters/sleep) "apn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 2; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/security/brig) "apo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/brig) -"app" = (/obj/structure/table,/obj/item/clothing/under/suit_jacket/female{pixel_x = 3; pixel_y = 1},/obj/item/clothing/under/suit_jacket/really_black{pixel_x = -2; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor{icon_state = "barber"},/area/crew_quarters/sleep) +"app" = (/obj/structure/table,/obj/item/clothing/under/suit_jacket/female{pixel_x = 3; pixel_y = 1},/obj/item/clothing/under/suit_jacket/really_black{pixel_x = -2; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/obj/item/clothing/tie/waistcoat,/turf/simulated/floor{icon_state = "barber"},/area/crew_quarters/sleep) "apq" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/security/brig) "apr" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 2; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/machinery/door_timer/cell_3,/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/brig) "aps" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/firedoor,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "63"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "red"},/area/security/brig) @@ -869,7 +869,7 @@ "aqK" = (/obj/structure/stool/bed/chair{dir = 8; name = "Defense"},/turf/simulated/floor{dir = 5; icon_state = "green"},/area/crew_quarters/courtroom) "aqL" = (/turf/simulated/wall,/area/lawoffice) "aqM" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/security/brig) -"aqN" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/security/brig) +"aqN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/power/apc{cell_type = 10000; dir = 2; name = "Brig APC"; pixel_x = 1; pixel_y = -24},/obj/structure/cable/yellow,/obj/machinery/flasher_button{id = "secentranceflasher"; pixel_x = -3; pixel_y = -38; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"},/area/security/brig) "aqO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/crew_quarters/sleep) "aqP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/security/brig) "aqQ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/security/brig) @@ -981,7 +981,7 @@ "asS" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plating,/area/maintenance/fore) "asT" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/fore) "asU" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/door_control{id = "Cabin5"; name = "Dorm Bolt Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep) -"asV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/maintenance_hatch{name = "Supply Bay Bridge Access"; req_access_txt = "0"; req_one_access_txt = "8;12"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"asV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor,/area/security/brig) "asW" = (/obj/machinery/door/poddoor/shutters{id = "supplybridge"},/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "asX" = (/obj/machinery/door/poddoor/shutters{id = "supplybridge"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "asY" = (/obj/machinery/door/poddoor/shutters{id = "supplybridge"},/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -1238,7 +1238,7 @@ "axP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "axQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison) "axR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison) -"axS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 1; icon_state = "closed"; id = "hosprivacy"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/poddoor/preopen{id = "hosprivacy"; name = "privacy shutter"},/turf/simulated/floor/plating,/area/security/range) +"axS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/maintenance_hatch{name = "Supply Bay Bridge Access"; req_access_txt = "0"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "axT" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/door_control{id = "FitnessShower"; name = "Lock Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/structure/mirror{pixel_x = -28},/obj/machinery/light/small,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "axU" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera{c_tag = "Fitness Room - Fore"; dir = 2},/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "axV" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/machinery/camera{c_tag = "Mining Dock"; dir = 8; network = list("SS13")},/turf/simulated/floor{dir = 4; icon_state = "brown"},/area/quartermaster/miningdock) @@ -1556,7 +1556,7 @@ "aDV" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "aDW" = (/obj/structure/closet/boxinggloves,/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aDX" = (/obj/structure/closet/masks,/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) -"aDY" = (/obj/structure/closet/secure_closet/hos,/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) +"aDY" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor,/area/crew_quarters/sleep) "aDZ" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area) "aEa" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) "aEb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) @@ -1570,7 +1570,7 @@ "aEj" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai) "aEk" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "aEl" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/crew_quarters/fitness{name = "\improper Recreation Area"}) -"aEm" = (/obj/structure/filingcabinet/security{pixel_x = 4},/obj/machinery/light{dir = 4},/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) +"aEm" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Armory APC"; pixel_x = 1; pixel_y = -24},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/light,/obj/machinery/camera/motion{c_tag = "Armory - Internal"; dir = 1; network = list("SS13")},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/security/warden) "aEn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/command{name = "Head of Security's Office"; req_access = null; req_access_txt = "58"},/turf/simulated/floor/carpet,/area/security/hos) "aEo" = (/obj/structure/window/reinforced,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/security/range) "aEp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden) @@ -1592,7 +1592,7 @@ "aEF" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 5; health = 120; icon_state = "twindow"; reinf = 0},/turf/simulated/floor/plating,/area/hallway/primary/central) "aEG" = (/obj/machinery/flasher{id = "processinghall"; pixel_x = -28},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/processing) "aEH" = (/obj/item/weapon/soap/deluxe,/obj/item/weapon/storage/secure/safe{pixel_x = 6; pixel_y = 28},/obj/item/weapon/kitchen/rollingpin,/obj/structure/closet/crate,/obj/item/clothing/suit/xenos,/obj/item/clothing/suit/monkeysuit,/obj/item/clothing/head/xenos,/obj/item/clothing/mask/gas/monkeymask,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"aEI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/hallway/primary/starboard) +"aEI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/poddoor/preopen{id = "hosprivacy"; name = "privacy shutter"},/turf/simulated/floor/plating,/area/security/range) "aEJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Gear Room"; req_access_txt = "0"; req_one_access_txt = "1;4"},/turf/simulated/floor{icon_state = "delivery"},/area/security/warden) "aEK" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 2; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/hallway/primary/starboard) "aEL" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/structure/sign/securearea{pixel_y = 32},/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/hallway/primary/starboard) @@ -1612,7 +1612,7 @@ "aEZ" = (/obj/structure/closet/toolcloset,/turf/simulated/floor,/area/construction) "aFa" = (/turf/space,/area/supply/station) "aFb" = (/obj/structure/target_stake,/obj/item/target/syndicate,/turf/simulated/floor,/area/security/range) -"aFc" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Armory APC"; pixel_x = 1; pixel_y = -24},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/light,/obj/machinery/camera{c_tag = "Armory - Internal"; dir = 1; network = list("SS13")},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/security/warden) +"aFc" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 2; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/prison) "aFd" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/hallway/primary/central) "aFe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/quartermaster/sorting{name = "\improper Warehouse"}) "aFf" = (/turf/simulated/wall,/area/quartermaster/sorting{name = "\improper Warehouse"}) @@ -1626,7 +1626,7 @@ "aFn" = (/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/engine/break_room) "aFo" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/engine/break_room) "aFp" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/quartermaster/office{name = "\improper Cargo Office"}) -"aFq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_mining{name = "Mailroom"; req_access_txt = "50"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/quartermaster/office{name = "\improper Cargo Office"}) +"aFq" = (/obj/structure/closet/secure_closet/hos,/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -29; pixel_y = 23},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) "aFr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow,/obj/machinery/door/poddoor/preopen{id = "bridge blast"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) "aFs" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "aFt" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/engine/break_room) @@ -1641,7 +1641,7 @@ "aFC" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) "aFD" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "cautioncorner"},/area/hallway/primary/starboard) "aFE" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 2; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/office{name = "\improper Cargo Office"}) -"aFF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 23},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/hallway/primary/starboard) +"aFF" = (/obj/structure/filingcabinet/security{pixel_x = 4},/obj/machinery/light{dir = 4},/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 29},/turf/simulated/floor{icon_state = "dark"},/area/security/hos) "aFG" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/wardrobe/red,/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/checkpoint2{name = "Customs"}) "aFH" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/crowbar,/obj/item/device/flash,/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/checkpoint2{name = "Customs"}) "aFI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/door/poddoor/preopen{id = "bridge blast"; name = "bridge blast door"},/turf/simulated/floor/plating,/area/bridge) @@ -1814,7 +1814,7 @@ "aIT" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "L10"},/area/hallway/primary/central) "aIU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/starboard) "aIV" = (/obj/structure/closet/toolcloset,/turf/simulated/floor{dir = 5; icon_state = "yellow"},/area/storage/tools) -"aIW" = (/obj/machinery/camera{active_power_usage = 0; c_tag = "Armory - External"; desc = "A special camera with a long lasting battery."; dir = 1; invuln = 0; light = null; name = "security camera"; network = list("SS13"); use_power = 0},/turf/space,/area) +"aIW" = (/obj/machinery/camera/motion{c_tag = "Armory - External"; dir = 1; network = list("SS13")},/turf/space,/area) "aIX" = (/obj/structure/closet/toolcloset,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/storage/tools) "aIY" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/hallway/primary/starboard) "aIZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=16-Court"; location = "15-Central-Fore"},/turf/simulated/floor{icon_state = "L12"},/area/hallway/primary/central) @@ -1850,7 +1850,7 @@ "aJD" = (/obj/structure/transit_tube,/turf/space,/area) "aJE" = (/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/construction/hallway{name = "\improper MiniSat Exterior"}) "aJF" = (/obj/structure/transit_tube{tag = "icon-D-SW"; icon_state = "D-SW"},/obj/structure/window/reinforced,/turf/space,/area) -"aJG" = (/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"aJG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/hallway/primary/starboard) "aJH" = (/obj/structure/transit_tube{tag = "icon-W-SE"; icon_state = "W-SE"},/turf/space,/area) "aJI" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/space,/area) "aJJ" = (/obj/machinery/door/airlock/hatch{icon_state = "door_closed"; name = "MiniSat Space Access Airlock"; req_one_access_txt = "32;19"},/turf/simulated/floor/plating,/area/construction/hallway{name = "\improper MiniSat Exterior"}) @@ -2007,15 +2007,15 @@ "aME" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/engine/engineering) "aMF" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech) "aMG" = (/obj/machinery/power/rad_collector{anchored = 1},/obj/item/weapon/tank/plasma,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/engine/engineering) -"aMH" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_y = -5},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech) +"aMH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/hallway/primary/starboard) "aMI" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod1/station) "aMJ" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) "aMK" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/quartermaster/office{name = "\improper Cargo Office"}) -"aML" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry{name = "Arrivals"}) +"aML" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_mining{name = "Mailroom"; req_access_txt = "0"; req_one_access_txt = "48;50"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/quartermaster/office{name = "\improper Cargo Office"}) "aMM" = (/obj/structure/table,/obj/item/weapon/cable_coil{amount = 5},/obj/item/device/flashlight,/obj/machinery/light_construct{dir = 4},/turf/simulated/floor,/area/construction) "aMN" = (/obj/structure/table,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office{name = "\improper Cargo Office"}) "aMO" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/storage) -"aMP" = (/obj/structure/table/reinforced,/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/reagent_containers/pill/kelotane{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/engine/chiefs_office) +"aMP" = (/obj/structure/grille,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/security/checkpoint2{name = "Customs"}) "aMQ" = (/turf/simulated/wall/r_wall,/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) "aMR" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_mining{name = "Quartermaster"; req_access_txt = "41"},/turf/simulated/floor,/area/quartermaster/qm) "aMS" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/engine/engineering) @@ -2075,7 +2075,7 @@ "aNU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/engine/engineering) "aNV" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/storage/tech) "aNW" = (/obj/machinery/power/port_gen/pacman,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 31},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) -"aNX" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/turf/simulated/floor{icon_state = "neutral"},/area/engine/chiefs_office) +"aNX" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/engine/chiefs_office) "aNY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/engine/engineering) "aNZ" = (/obj/item/weapon/screwdriver,/obj/structure/lattice,/turf/space,/area) "aOa" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;48;50;1"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -2084,7 +2084,7 @@ "aOd" = (/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "Engineering"; name = "Engineering Lockdown"; pixel_x = -24; pixel_y = -5; req_access_txt = "10"},/obj/machinery/door_control{id = "atmos"; name = "Atmospherics Lockdown"; pixel_x = -24; pixel_y = 5; req_access_txt = "24"},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engine/chiefs_office) "aOe" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage) "aOf" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage) -"aOg" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/engine/chiefs_office) +"aOg" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/message_monitor{pixel_y = -5},/obj/item/weapon/circuitboard/arcade/battle{pixel_x = -4; pixel_y = 2},/obj/item/weapon/circuitboard/arcade/orion_trail{pixel_x = 4},/turf/simulated/floor{icon_state = "dark"},/area/storage/tech) "aOh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/starboard) "aOi" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/suit/armor/riot,/obj/item/clothing/suit/armor/riot,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/item/weapon/wrench,/obj/item/clothing/head/helmet/riot,/obj/item/clothing/head/helmet/riot,/obj/item/clothing/head/helmet/riot,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/security/warden) "aOj" = (/obj/structure/table/reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor{dir = 8; icon_state = "neutralcorner"},/area/engine/chiefs_office) @@ -2274,7 +2274,7 @@ "aRL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/bridge) "aRM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall,/area/maintenance/storage) "aRN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access_txt = "19"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/bridge) -"aRO" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 5; health = 120; icon_state = "twindow"; reinf = 0},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{icon_state = "dark"},/area/security/checkpoint2{name = "Customs"}) +"aRO" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/ce,/obj/item/stack/medical/bruise_pack{pixel_x = -3; pixel_y = 2},/obj/item/weapon/reagent_containers/pill/kelotane{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "neutral"},/area/engine/chiefs_office) "aRP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/plating,/area/maintenance/starboard) "aRQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall,/area/maintenance/storage) "aRR" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{dir = 8; icon_state = "caution"},/area/hallway/primary/starboard) @@ -2360,7 +2360,7 @@ "aTt" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/light{dir = 4},/obj/machinery/camera{c_tag = "Cargo - Foyer"; dir = 8; network = list("SS13")},/turf/simulated/floor{dir = 4; icon_state = "brown"},/area/hallway/primary/port) "aTu" = (/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/port) "aTv" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/obj/machinery/door/firedoor,/obj/machinery/door/window/westleft{dir = 8; name = "Cargo Desk"; req_access_txt = "50"},/turf/simulated/floor,/area/quartermaster/office{name = "\improper Cargo Office"}) -"aTw" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 5; health = 120; icon_state = "twindow"; reinf = 0},/turf/simulated/floor/plating,/area/quartermaster/office{name = "\improper Cargo Office"}) +"aTw" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/engine/chiefs_office) "aTx" = (/obj/machinery/door/airlock/highsecurity{icon_state = "door_closed"; locked = 0; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "aTy" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "cyan"; dir = 4; icon_state = "intact-c"; level = 2},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/storage) "aTz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/security/checkpoint2{name = "Customs"}) @@ -2466,7 +2466,7 @@ "aVv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "L3"},/area/hallway/primary/central) "aVw" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 29},/turf/simulated/floor{dir = 10; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "aVx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "L7"},/area/hallway/primary/central) -"aVy" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "L9"},/area/hallway/primary/central) +"aVy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) "aVz" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 9; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/maintenance/storage) "aVA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{desc = ""; icon_state = "L13"; name = "floor"},/area/hallway/primary/central) "aVB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "L15"},/area/hallway/primary/central) @@ -2507,7 +2507,7 @@ "aWk" = (/obj/machinery/door/firedoor,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_security{name = "Security Dock"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/processing) "aWl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "aWm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/entry{name = "Arrivals"}) -"aWn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) +"aWn" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor,/area/hallway/primary/port) "aWo" = (/turf/simulated/wall/r_wall,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aWp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aWq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -3018,7 +3018,7 @@ "bgb" = (/obj/machinery/vending/autodrobe,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/wood,/area/crew_quarters/theatre) "bgc" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 4; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/engine/break_room) "bgd" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "yellow"; icon_state = "manifold-y"; level = 2},/turf/simulated/floor,/area/maintenance/storage) -"bge" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "neutral"},/area/hallway/primary/port) +"bge" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/office{name = "\improper Cargo Office"}) "bgf" = (/turf/simulated/floor{icon_state = "delivery"},/area/storage/primary) "bgg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/engine/break_room) "bgh" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "yellow"; dir = 6; icon_state = "intact-y"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/maintenance/storage) @@ -3092,12 +3092,12 @@ "bhx" = (/obj/machinery/vending/tool,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering) "bhy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bhz" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 5; health = 120; icon_state = "twindow"; reinf = 0},/turf/simulated/floor/plating,/area/hallway/secondary/construction{name = "\improper Garden"}) -"bhA" = (/obj/structure/table,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/item/weapon/aiModule/safeguard,/obj/item/weapon/aiModule/quarantine,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/tyrant,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"bhA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/office{name = "\improper Cargo Office"}) "bhB" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/bridge) "bhC" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 4},/obj/machinery/newscaster{pixel_x = 32},/obj/machinery/door_control{id = "Toilet4"; name = "Lock Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "bhD" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) "bhE" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/machinery/newscaster{pixel_x = 0; pixel_y = -32},/obj/effect/landmark{name = "blobstart"},/obj/machinery/door_control{id = "Toilet1"; name = "Lock Control"; normaldoorcontrol = 1; pixel_x = -25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet{name = "\improper Restrooms"}) -"bhF" = (/obj/structure/table,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/paladin,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"bhF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/office{name = "\improper Cargo Office"}) "bhG" = (/obj/machinery/light/small,/turf/simulated/floor/carpet,/area/crew_quarters/sleep) "bhH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bhI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/construction/Storage{name = "Storage Wing"}) @@ -3505,7 +3505,7 @@ "bpu" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/hallway/primary/fore) "bpv" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/hallway/primary/fore) "bpw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) -"bpx" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/secondary/entry{name = "Arrivals"}) +"bpx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bpy" = (/obj/structure/closet/crate,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/maintenance/storage) "bpz" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "grimy"},/area/hallway/primary/port) "bpA" = (/obj/structure/closet/firecloset,/turf/simulated/floor{icon_state = "delivery"},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -3550,7 +3550,7 @@ "bqn" = (/obj/machinery/camera/autoname{dir = 2; network = list("SS13")},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/power/apc{dir = 1; name = "Quartermaster's Office APC"; pixel_x = 0; pixel_y = 30},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 1; icon_state = "brown"},/area/quartermaster/qm) "bqo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/tcomeast{name = "\improper MiniSat East Wing"}) "bqp" = (/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/turret{dir = 1; enabled = 0},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior{name = "\improper MiniSat Central Foyer"}) -"bqq" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/obj/effect/landmark/start{name = "Cyborg"},/obj/machinery/light/small{dir = 4},/obj/machinery/computer/security/telescreen{dir = 8; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = 29; pixel_y = 0},/obj/machinery/camera{c_tag = "AI Upload Foyer"; dir = 2; network = list("SS13","RD","AIUpload")},/turf/simulated/floor{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/turret_protected/ai_upload_foyer) +"bqq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor{dir = 10; icon_state = "neutral"},/area/hallway/primary/port) "bqr" = (/obj/structure/closet/secure_closet/quartermaster,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "brown"},/area/quartermaster/qm) "bqs" = (/obj/machinery/light/small,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -26},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office) "bqt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/bridge) @@ -3881,7 +3881,7 @@ "bwG" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/red,/obj/item/weapon/pen/blue{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/wood,/area/library) "bwH" = (/obj/structure/table,/obj/item/weapon/hatchet,/obj/item/weapon/coin/silver,/obj/item/weapon/minihoe,/obj/machinery/light/small,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/construction{name = "\improper Garden"}) "bwI" = (/obj/structure/table,/obj/item/clothing/suit/apron,/obj/item/clothing/suit/apron,/obj/item/weapon/corncob,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/construction{name = "\improper Garden"}) -"bwJ" = (/obj/machinery/hologram/holopad,/obj/structure/sign/kiddieplaque{pixel_y = 32},/obj/machinery/camera{c_tag = "AI Upload Chamber - Fore"; dir = 2; network = list("SS13","RD","AIUpload")},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"bwJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor,/area/hallway/secondary/entry{name = "Arrivals"}) "bwK" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_security{name = "Security Post - Cargo"; req_access_txt = "63"},/turf/simulated/floor,/area/security/checkpoint/supply{name = "Security Post - Cargo"}) "bwL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor,/area/crew_quarters/locker) "bwM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "L5"},/area/hallway/primary/central) @@ -3986,8 +3986,8 @@ "byH" = (/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor/wood,/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) "byI" = (/obj/structure/table,/obj/item/device/assembly/igniter{pixel_x = -4; pixel_y = -4},/obj/item/device/assembly/igniter,/obj/item/weapon/screwdriver{pixel_y = 16},/turf/simulated/floor{dir = 4; icon_state = "brown"},/area/storage/primary) "byJ" = (/obj/machinery/turret{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"byK" = (/obj/machinery/computer/upload/borg,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"byL" = (/obj/machinery/computer/upload/ai,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"byK" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) +"byL" = (/obj/structure/sign/kiddieplaque{pixel_y = 32},/obj/structure/table,/obj/structure/flora/kirbyplants{desc = "A simple, healthy looking potted plant. Likely one of the best friends an AI will ever have."; name = "Photosynthetic Potted Plant"; pixel_y = 8},/obj/machinery/camera/motion{c_tag = "AI Upload Chamber - Fore"; network = list("SS13","RD","AIUpload")},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "byM" = (/obj/machinery/turret{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "byN" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/crew_quarters/courtroom) "byO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -3997,7 +3997,7 @@ "byS" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hydroponics) "byT" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/binary/pump{dir = 0; icon_state = "intact_off"; name = "Air to Port"; on = 0},/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/storage) "byU" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "dark"},/area/medical/surgery) -"byV" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) +"byV" = (/obj/structure/table,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/item/weapon/aiModule/core/full/antimov,/obj/item/weapon/aiModule/core/full/tyrant,/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/supplied/quarantine,/obj/item/weapon/aiModule/supplied/safeguard,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/item/weapon/aiModule/reset/purge,/turf/simulated/floor{icon_state = "dark"},/area) "byW" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/wood,/area/lawoffice) "byX" = (/obj/effect/landmark/start{name = "Lawyer"},/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/wood,/area/lawoffice) "byY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar) @@ -4022,7 +4022,7 @@ "bzr" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) "bzs" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 2; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/crew_quarters/locker) "bzt" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/crew_quarters/locker) -"bzu" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "floorgrime"},/area/crew_quarters/locker) +"bzu" = (/obj/structure/table,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/item/weapon/aiModule/core/freeformcore,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/full/asimovpp,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bzv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/beacon,/turf/simulated/floor{dir = 2; icon_state = "neutral"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "bzw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area) "bzx" = (/obj/structure/table,/obj/item/weapon/book/manual/engineering_hacking{pixel_x = 4; pixel_y = 5},/obj/item/weapon/book/manual/engineering_construction{pixel_x = 0; pixel_y = 3},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/book/manual/engineering_singularity_safety{pixel_x = -4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering) @@ -4311,7 +4311,7 @@ "bEU" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bEV" = (/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 8; icon_state = "whitepurplecorner"},/area/toxins/telesci) "bEW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) -"bEX" = (/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) +"bEX" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/turretid{control_area = "\improper AI Upload Chamber"; name = "AI Upload turret control"; pixel_x = 8; pixel_y = 24},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -8; pixel_y = 22},/obj/effect/landmark/start{name = "Cyborg"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "AI Upload Access APC"; pixel_x = 0; pixel_y = -27},/obj/machinery/light/small{dir = 8},/obj/machinery/computer/security/telescreen{desc = "Used for watching the AI Upload."; dir = 4; name = "AI Upload Monitor"; network = list("AIUpload"); pixel_x = -29; pixel_y = 0},/turf/simulated/floor{tag = "icon-vault (SOUTHEAST)"; icon_state = "vault"; dir = 6},/area/turret_protected/ai_upload_foyer) "bEY" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/simulated/floor/wood,/area/library) "bEZ" = (/obj/machinery/newscaster{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/wood,/area/library) "bFa" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/library) @@ -4440,7 +4440,7 @@ "bHt" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/maintenance/storage) "bHu" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/maintenance/storage) "bHv" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/hallway/primary/fore) -"bHw" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/turretid{control_area = "\improper AI Upload Chamber"; name = "AI Upload turret control"; pixel_x = 8; pixel_y = 24},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -8; pixel_y = 22},/obj/effect/landmark/start{name = "Cyborg"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "AI Upload Access APC"; pixel_x = 0; pixel_y = -27},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{tag = "icon-vault (SOUTHEAST)"; icon_state = "vault"; dir = 6},/area/turret_protected/ai_upload_foyer) +"bHw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/obj/effect/landmark/start{name = "Cyborg"},/obj/machinery/light/small{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching areas on the MiniSat."; dir = 8; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = 29; pixel_y = 0},/obj/machinery/camera/motion{c_tag = "AI Upload Foyer"; network = list("SS13","RD","AIUpload")},/turf/simulated/floor{tag = "icon-vault (SOUTHWEST)"; icon_state = "vault"; dir = 10},/area/turret_protected/ai_upload_foyer) "bHx" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bHy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry{name = "Arrivals"}) "bHz" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/white,/turf/simulated/floor/wood,/area/security/vacantoffice) @@ -4595,7 +4595,7 @@ "bKs" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bKt" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bKu" = (/obj/machinery/mecha_part_fabricator{dir = 1; id = "0"; name = "counterfeit fabricator"; req_access = "0"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"bKv" = (/obj/machinery/door/poddoor{auto_close = 300; id = "smindicate"; name = "outer blast door"},/obj/machinery/door_control{id = "smindicate"; name = "external door control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/turf/simulated/shuttle/plating,/area) +"bKv" = (/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor,/area/quartermaster/storage) "bKw" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_on"; name = "O2 to Airmix"; on = 1},/obj/machinery/atmospherics/pipe/simple{pipe_color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/turf/simulated/floor{icon_state = "bluefull"},/area/maintenance/storage) "bKx" = (/obj/structure/window/reinforced,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple{pipe_color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/turf/simulated/floor{icon_state = "bluefull"},/area/maintenance/storage) "bKy" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 1; icon_state = "intact_on"; name = "Gas filter (O2 tank)"; on = 1},/turf/simulated/floor{icon_state = "bluefull"},/area/maintenance/storage) @@ -4677,7 +4677,7 @@ "bLW" = (/obj/machinery/light{dir = 1},/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "bLX" = (/obj/machinery/atmospherics/trinary/mixer{dir = 2; icon_state = "intact_on"; name = "Gas mixer (N2/O2)"; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 0; target_pressure = 4500},/turf/simulated/floor,/area/maintenance/storage) "bLY" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/maintenance/storage) -"bLZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) +"bLZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "L9"},/area/hallway/primary/central) "bMa" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) "bMb" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bMc" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple{pipe_color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/turf/simulated/floor{icon_state = "dark"},/area/maintenance/storage) @@ -4784,7 +4784,7 @@ "bNZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 5; icon_state = "green"},/area/hydroponics) "bOa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 2; icon_state = "green"},/area/hydroponics) "bOb" = (/obj/structure/disposalpipe/segment,/mob/living/simple_animal/mouse,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) -"bOc" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) +"bOc" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bOd" = (/obj/item/weapon/storage/secure/safe{pixel_x = 6; pixel_y = 30},/obj/machinery/camera{c_tag = "Chief Engineer's Office"; dir = 2; network = list("SS13")},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/engine/chiefs_office) "bOe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/engine,/area/toxins/telesci) "bOf" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) @@ -4815,7 +4815,7 @@ "bOE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/storage) "bOF" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{pipe_color = "yellow"; icon_state = "intact-y"; level = 2},/turf/simulated/floor/plating,/area/maintenance/storage) "bOG" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/maintenance/storage) -"bOH" = (/obj/structure/table/woodentable,/obj/item/toy/cards,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) +"bOH" = (/obj/machinery/computer/upload/borg,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/westleft{base_state = "left"; dir = 2; icon_state = "left"; layer = 3.1; name = "Cyborg Upload Console Window"; req_access_txt = "16"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bOI" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{pipe_color = "green"; icon_state = "intact-g"; level = 2},/turf/simulated/floor/plating,/area/maintenance/storage) "bOJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_Toxins = 0},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/medical/research{name = "Research Division"}) "bOK" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{dir = 2; icon_state = "whiteyellow"; tag = "icon-whitehall (WEST)"},/area/medical/chemistry) @@ -4883,7 +4883,7 @@ "bPU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/chapel/main) "bPV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bPW" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 1; name = "Kitchen Window"; req_access_txt = "28"; req_one_access_txt = "0"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/weapon/paper,/obj/machinery/door/window/eastleft{dir = 2; name = "Hydroponics Window"; req_access_txt = "0"; req_one_access_txt = "30;35"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/hydroponics) -"bPX" = (/obj/structure/filingcabinet/filingcabinet,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo) +"bPX" = (/obj/machinery/computer/upload/ai,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/westleft{base_state = "right"; dir = 2; icon_state = "right"; layer = 3.1; name = "Upload Console Window"; req_access_txt = "16"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bPY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Medbay Maintenance"; req_access_txt = "5"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "bPZ" = (/obj/machinery/door/poddoor/shutters/preopen{id = "kitchenhydro"; name = "Service Shutter"},/obj/machinery/door/airlock/glass_medical{id_tag = ""; name = "Service Door"; req_access_txt = "0"; req_one_access_txt = "35;28"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/hydroponics) "bQa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/construction) @@ -4898,7 +4898,7 @@ "bQj" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/atmospherics/pipe/simple{pipe_color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/hydroponics) "bQk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "L4"},/area/hallway/primary/central) "bQl" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"bQm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "L8"},/area/hallway/primary/central) +"bQm" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "floorgrime"},/area/crew_quarters/locker) "bQn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "L10"},/area/hallway/primary/central) "bQo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "L12"},/area/hallway/primary/central) "bQp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{desc = ""; icon_state = "L14"},/area/hallway/primary/central) @@ -4940,9 +4940,9 @@ "bQZ" = (/obj/machinery/power/apc{dir = 8; name = "Medical Security Checkpoint APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/alarm{pixel_y = 28},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/closet/secure_closet/security/med,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/checkpoint/medical) "bRa" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/hydroponics) "bRb" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple{pipe_color = "green"; dir = 4; icon_state = "intact-g"; level = 2},/turf/simulated/wall/r_wall,/area/maintenance/storage) -"bRc" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/obj/item/device/radio/intercom{pixel_y = -25},/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) +"bRc" = (/obj/structure/table,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/aiModule/supplied/freeform,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bRd" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"bRe" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/camera/autoname{dir = 1; network = list("SS13")},/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) +"bRe" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_y = -25},/obj/machinery/camera/motion{c_tag = "AI Upload Chamber - Starboard"; dir = 1; network = list("SS13","RD","AIUpload")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bRf" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/power/apc{dir = 2; name = "Kitchen APC"; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "bRg" = (/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/maintenance/storage) "bRh" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; icon_state = "intact-r"; level = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "caution"},/area/maintenance/storage) @@ -4965,7 +4965,7 @@ "bRy" = (/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/door_control{id = "kitchenhydro"; name = "Service Shutter Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "28"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "bRz" = (/obj/machinery/vending/medical,/turf/simulated/floor{dir = 9; icon_state = "whitegreen"},/area/medical/medbay2{name = "Medbay Storage"}) "bRA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/hallway/primary/central) -"bRB" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) +"bRB" = (/obj/structure/table,/obj/machinery/light{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -24},/obj/item/weapon/aiModule/supplied/protectStation,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bRC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "bRD" = (/turf/simulated/floor{dir = 2; icon_state = "purplecorner"},/area/hallway/primary/central) "bRE" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -5007,10 +5007,10 @@ "bSo" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "bSp" = (/obj/machinery/light_construct,/obj/structure/sign/poster{pixel_y = -32},/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/aft{name = "Aft Maintenance"}) "bSq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) -"bSr" = (/obj/structure/table,/obj/item/weapon/aiModule/freeform,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"bSr" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/motion{c_tag = "AI Upload Chamber - Port"; dir = 1; network = list("SS13","RD","AIUpload")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bSs" = (/obj/structure/stool,/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/research{name = "Research Division"}) "bSt" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "whitegreenfull"},/area/medical/medbay{name = "Medbay Central"}) -"bSu" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_y = -25},/obj/machinery/camera{c_tag = "AI Upload Chamber - Starboard"; dir = 1; network = list("SS13","RD","AIUpload")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bSu" = (/obj/machinery/door/firedoor,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) "bSv" = (/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/clothing/glasses/welding,/obj/structure/table/reinforced,/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = -30},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/lab) "bSw" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/table/reinforced,/obj/machinery/light,/obj/item/weapon/cable_coil,/obj/item/weapon/cable_coil,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/toxins/lab) "bSx" = (/obj/structure/stool/bed/chair,/obj/machinery/light/small{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/medical/medbay{name = "Medbay Central"}) @@ -5019,7 +5019,7 @@ "bSA" = (/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bSB" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "bSC" = (/turf/simulated/wall,/area/maintenance/incinerator) -"bSD" = (/obj/structure/table,/obj/item/weapon/aiModule/protectStation,/obj/machinery/light{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -24},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) +"bSD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay{name = "Medbay Central"}) "bSE" = (/obj/structure/stool/bed/roller,/turf/simulated/floor{icon_state = "whitegreen"},/area/medical/medbay{name = "Medbay Central"}) "bSF" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bSG" = (/obj/structure/table,/obj/item/device/healthanalyzer,/obj/machinery/firealarm{dir = 4; pixel_x = 26; pixel_y = 28},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/medical/medbay{name = "Medbay Central"}) @@ -5038,7 +5038,7 @@ "bST" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bSU" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bSV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/crew_quarters/hor) -"bSW" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/machinery/camera{c_tag = "AI Upload Chamber - Port"; dir = 1; network = list("SS13","RD","AIUpload")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bSW" = (/obj/structure/filingcabinet/filingcabinet,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo) "bSX" = (/obj/structure/closet/firecloset,/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/hallway/primary/central) "bSY" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bSZ" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics) @@ -5132,7 +5132,7 @@ "bUJ" = (/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/hand_labeler,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "bUK" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating/airless,/area/AIsattele) "bUL" = (/obj/structure/rack,/obj/item/weapon/extinguisher,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard) -"bUM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/incinerator) +"bUM" = (/obj/item/toy/cards,/obj/structure/table/woodentable/poker,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) "bUN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/gateway) "bUO" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitegreen"},/area/medical/sleeper{name = "Sleepers"}) "bUP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/AIsattele) @@ -5253,7 +5253,7 @@ "bXa" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/medical/medbay{name = "Medbay Central"}) "bXb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/engine,/area/maintenance/incinerator) "bXc" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 30; pixel_y = 0; pixel_z = 0},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/medbay2{name = "Medbay Storage"}) -"bXd" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; pixel_y = 2},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 28},/turf/simulated/floor{dir = 9; icon_state = "whitegreen"},/area/medical/medbay{name = "Medbay Central"}) +"bXd" = (/obj/structure/sign/poster{pixel_y = -32},/obj/machinery/light_construct/small,/obj/structure/table/woodentable/poker,/obj/item/toy/cards,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) "bXe" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Medbay Desk"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "whitegreenfull"},/area/medical/medbay{name = "Medbay Central"}) "bXf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/starboard) "bXg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "whitegreenfull"},/area/medical/medbay{name = "Medbay Central"}) @@ -5354,7 +5354,7 @@ "bYX" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/incinerator) "bYY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2{name = "Medbay Storage"}) "bYZ" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/obj/machinery/door_control{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = 0; pixel_y = 6; req_access_txt = "47"},/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "ResearchFoyer"; name = "Research Door Button"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -4},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint/science{name = "Security Post - Research Division"}) -"bZa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2{name = "Medbay Storage"}) +"bZa" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bZb" = (/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/aft{name = "Aft Maintenance"}) "bZc" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/machinery/door/firedoor,/turf/simulated/floor{icon_state = "whitegreenfull"},/area/medical/medbay{name = "Medbay Central"}) "bZd" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard) @@ -5572,7 +5572,7 @@ "cdh" = (/obj/machinery/door/poddoor{density = 1; icon_state = "closed"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage) "cdi" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) "cdj" = (/obj/structure/table/woodentable,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/showcase{desc = "The famous NanoTrasen-brand microwave, the multi-purpose cooking appliance every station needs! This one appears to be drawn onto a cardboard box."; dir = 1; icon = 'icons/obj/kitchen.dmi'; icon_state = "mw"; name = "NanoTrasen-brand microwave"; pixel_x = 0; pixel_y = 2},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) -"cdk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Gateway Atrium"; req_access_txt = "62"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor,/area/gateway) +"cdk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2{name = "Medbay Storage"}) "cdl" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "0"; req_one_access_txt = "12;17"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/gateway) "cdm" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/storage) "cdn" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) @@ -5909,7 +5909,7 @@ "cjG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/central) "cjH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/computer/general_air_control{frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; pixel_y = -2; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop")},/turf/simulated/floor{icon_state = "caution"; dir = 4},/area/maintenance/storage) "cjI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"cjJ" = (/obj/structure/sign/poster{pixel_y = -32},/obj/structure/table/woodentable,/obj/machinery/light_construct/small,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) +"cjJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cjK" = (/obj/structure/closet,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cjL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/storage) "cjM" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo) @@ -6190,7 +6190,7 @@ "cpb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access_txt = "29"; req_one_access_txt = "0"},/turf/simulated/floor,/area/assembly/chargebay) "cpc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) "cpd" = (/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/effect/decal/cleanable/cobweb2,/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) -"cpe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/centcom{name = "Morgue"; opacity = 1; req_access_txt = "6"},/turf/simulated/floor{icon_state = "dark"},/area/medical/morgue) +"cpe" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/incinerator) "cpf" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cpg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "cph" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "Command Hallway - Central"; dir = 8; network = list("SS13")},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) @@ -6225,8 +6225,8 @@ "cpK" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/medical/medbay3{name = "Medbay Aft"}) "cpL" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #4"; req_access_txt = "55"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/toxins/xenobiology) "cpM" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/central) -"cpN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "bluecorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) -"cpO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) +"cpN" = (/obj/structure/sink{dir = 8; icon_state = "sink"; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 28},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 9; icon_state = "whitegreen"},/area/medical/medbay{name = "Medbay Central"}) +"cpO" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/obj/item/device/radio/intercom{pixel_y = -25},/obj/item/weapon/kitchen/rollingpin,/obj/machinery/camera{c_tag = "Kitchen"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) "cpP" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen #3"; req_access_txt = "55"},/obj/machinery/door/poddoor/preopen{id = "xenobio2"; name = "containment blast door"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cpQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "cpR" = (/obj/machinery/light/small,/obj/structure/table/woodentable,/obj/item/weapon/folder,/obj/item/weapon/folder,/obj/machinery/camera{c_tag = "Telecoms - Control Room"; dir = 1; network = list("SS13","tcomm")},/turf/simulated/floor{icon_state = "grimy"},/area/tcommsat/computer{name = "\improper Telecoms Control Room"}) @@ -6241,7 +6241,7 @@ "cqa" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/plasteel{amount = 10},/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "bot"},/area/assembly/robotics) "cqb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Mortuary"; opacity = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) "cqc" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) -"cqd" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) +"cqd" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "cqe" = (/obj/machinery/power/solar_control{id = "aftport"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cqf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cqg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) @@ -6434,9 +6434,9 @@ "ctL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "dark"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "ctM" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "ctN" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 8; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) -"ctO" = (/obj/machinery/door/airlock/maintenance{name = "Genetics Maintenance"; req_access_txt = "5;9"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"ctO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera{c_tag = "Kitchen - Coldroom"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "ctP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/door/firedoor,/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/aft) -"ctQ" = (/obj/machinery/mineral/mint,/turf/simulated/floor,/area/mine/production) +"ctQ" = (/obj/structure/flora/kirbyplants{desc = "A plastic potted plant."; layer = 4.1; pixel_y = 3},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/hallway/primary/central) "ctR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/assembly/robotics) "ctS" = (/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/port) "ctT" = (/obj/machinery/door/window{dir = 4; name = "Mass Driver"; req_access_txt = "22"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main) @@ -6643,11 +6643,11 @@ "cxM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/toxins/xenobiology) "cxN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "cxO" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cxP" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/clothing/tie/stethoscope,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo) +"cxP" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "L8"},/area/hallway/primary/central) "cxQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cxR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) "cxS" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/assembly/chargebay) -"cxT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Genetics"; opacity = 1; req_access_txt = "5; 9"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 2; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "dark"},/area/medical/genetics) +"cxT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/firealarm{pixel_y = 28},/turf/simulated/floor{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) "cxU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/assembly/chargebay) "cxV" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 4; icon_state = "whiteblue"},/area/medical/genetics_cloning) "cxW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j2s"; sortType = 17},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/aft{name = "Aft Maintenance"}) @@ -6663,7 +6663,7 @@ "cyg" = (/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar) "cyh" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact-f"},/turf/simulated/floor,/area/mine/production) "cyi" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar) -"cyj" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_research{name = "Genetics Lab"; req_access_txt = "5; 9"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "whitebluefull"},/area/medical/genetics) +"cyj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Gateway Atrium"; req_access_txt = "62"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "delivery"},/area/gateway) "cyk" = (/obj/machinery/light/small{dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) "cyl" = (/obj/item/weapon/storage/secure/safe{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) "cym" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 2; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/toxins/xenobiology) @@ -7417,7 +7417,7 @@ "cMG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics) "cMH" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) "cMI" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 4; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3{name = "Medbay Aft"}) -"cMJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) +"cMJ" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 4; icon_state = "neutralcorner"},/area/hallway/primary/central) "cMK" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 2; icon_state = "whitebluecorner"},/area/medical/medbay3{name = "Medbay Aft"}) "cML" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office) "cMM" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) @@ -7558,7 +7558,7 @@ "cPr" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/bible,/obj/machinery/light/small{dir = 1},/obj/machinery/newscaster{pixel_x = 0; pixel_y = 32},/obj/machinery/camera{c_tag = "Chapel - Fore"; dir = 2; network = list("SS13")},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/chapel/main) "cPs" = (/obj/item/device/radio/intercom{pixel_y = -25},/turf/simulated/floor/engine,/area/toxins/xenobiology) "cPt" = (/obj/structure/table,/obj/item/trash/popcorn,/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/medical/virology) -"cPu" = (/obj/structure/rack,/obj/item/clothing/head/that,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/suit/wcoat,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) +"cPu" = (/obj/structure/rack,/obj/item/clothing/head/that,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/tie/waistcoat,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) "cPv" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/centcom/holding) "cPw" = (/turf/space/transit/north/shuttlespace_ns15,/area/shuttle/escape/transit) "cPx" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve) @@ -9276,6 +9276,7 @@ "dwt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/assembly/robotics) "dwu" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dwv" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) +"dww" = (/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor/wood,/area/security/vacantoffice) "dwx" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dwy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics) "dwz" = (/obj/structure/holowindow,/obj/item/weapon/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/source_boxingcourt) @@ -9327,8 +9328,10 @@ "dxt" = (/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve) "dxu" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/area/syndicate_mothership) "dxv" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 2},/area/tdome/tdomeobserve) +"dxw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "dxx" = (/obj/structure/sign/securearea{pixel_x = 0; pixel_y = 32},/obj/machinery/shower{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{tag = "icon-warnwhite (NORTHEAST)"; icon_state = "warnwhite"; dir = 5},/area/medical/virology) "dxy" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/grass/brown,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/area/syndicate_mothership) +"dxz" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 2; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "dxA" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdomeobserve) "dxB" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership) "dxC" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/syndicate_mothership) @@ -9449,6 +9452,7 @@ "dzN" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/shuttle/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape/centcom) "dzO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) "dzP" = (/obj/machinery/door/poddoor{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing{name = "\improper Toxins Lab"}) +"dzQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{dir = 1; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "dzR" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{dir = 9; icon_state = "whitegreen"},/area/medical/virology) "dzS" = (/obj/machinery/smartfridge/chemistry/virology,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor{icon_state = "whitegreenfull"},/area/medical/virology) "dzT" = (/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/hallway/secondary/entry{name = "Arrivals"}) @@ -9469,11 +9473,13 @@ "dAi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/medical/virology) "dAj" = (/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/machinery/meter,/obj/machinery/door_control{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access_txt = "7"},/obj/machinery/ignition_switch{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "dAk" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/toxins/mixing{name = "\improper Toxins Lab"}) +"dAl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{dir = 4; icon_state = "neutralcorner"},/area/bridge/meeting_room{name = "\improper Command Hallway"}) "dAm" = (/obj/structure/table,/obj/item/weapon/storage/box/rxglasses{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/medical/genetics_cloning) "dAn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/aft) "dAo" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/laborcamp/station) "dAp" = (/obj/structure/table,/obj/item/weapon/book/manual/infections{pixel_y = 7},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 5; icon_state = "whitegreen"},/area/medical/virology) "dAq" = (/turf/unsimulated/wall/fakedoor{name = "Centcom Security"},/area/centcom/evac) +"dAr" = (/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) "dAs" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar) "dAt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar) "dAu" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"; pipe_color = "blue"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 1; icon_state = "neutralcorner"},/area/crew_quarters/locker) @@ -9483,15 +9489,17 @@ "dAy" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics) "dAz" = (/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/assembly/robotics) "dAA" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Virology APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 9; icon_state = "whitegreen"},/area/medical/virology) -"dAB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"dAB" = (/obj/structure/table/woodentable,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/wood,/area/library) "dAC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) "dAD" = (/turf/simulated/floor{dir = 6; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) "dAE" = (/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/machinery/meter,/obj/machinery/embedded_controller/radio/airlock_controller{airpump_tag = "tox_airlock_pump"; exterior_door_tag = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; interior_door_tag = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; sanitize_external = 1; sensor_tag = "tox_airlock_sensor"},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "dAF" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) "dAG" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/hallway/primary/aft) +"dAH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor/carpet,/area/library) "dAI" = (/obj/structure/closet,/obj/item/device/assembly/prox_sensor{pixel_x = 2; pixel_y = -2},/obj/item/device/assembly/signaler{pixel_x = -2; pixel_y = 5},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "dAJ" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve) "dAK" = (/obj/machinery/atmospherics/valve{dir = 4; name = "manual outlet valve"},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/toxins/mixing{name = "\improper Toxins Lab"}) +"dAL" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) "dAM" = (/obj/machinery/door/airlock/maintenance{name = "Toxins Lab Maintenance"; req_access_txt = "8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) "dAN" = (/obj/structure/showcase/fakesec,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) "dAO" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/evac) @@ -9499,6 +9507,7 @@ "dAQ" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome/tdomeobserve) "dAR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/sign/nosmoking_2{pixel_x = 28},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/medical/medbay3{name = "Medbay Aft"}) "dAS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/hallway/primary/central) +"dAT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/centcom{name = "Genetics"; opacity = 1; req_access_txt = "9"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 2; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "dark"},/area/medical/genetics) "dAU" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) "dAV" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_Toxins = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "dAW" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -9509,6 +9518,7 @@ "dBb" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/evac) "dBc" = (/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics) "dBd" = (/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/toxins/mixing{name = "\improper Toxins Lab"}) +"dBe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/centcom{name = "Morgue"; opacity = 1; req_access_txt = "5"},/turf/simulated/floor{icon_state = "dark"},/area/medical/morgue) "dBf" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/laborcamp/station) "dBg" = (/obj/machinery/door/poddoor{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/plating,/area/toxins/mixing{name = "\improper Toxins Lab"}) "dBh" = (/obj/structure/rack,/obj/item/weapon/tank/air,/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) @@ -9570,6 +9580,7 @@ "dCl" = (/obj/machinery/door/airlock/centcom{name = "Centcom Security"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control) "dCm" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "dCn" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dCo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "dCp" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing{name = "\improper Toxins Lab"}) "dCq" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/toxins/mixing{name = "\improper Toxins Lab"}) "dCr" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/virology) @@ -9586,10 +9597,13 @@ "dCC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall/r_wall,/area/toxins/mixing{name = "\improper Toxins Lab"}) "dCD" = (/obj/machinery/light/small{dir = 4},/obj/structure/closet,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "dCE" = (/turf/space/transit/east/shuttlespace_ew5,/area/shuttle/escape_pod4/transit) +"dCF" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"dCG" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/clothing/tie/stethoscope,/obj/structure/extinguisher_cabinet{pixel_x = 6; pixel_y = -30},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo) "dCH" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry{name = "Arrivals"}) "dCI" = (/obj/item/weapon/cigbutt,/obj/machinery/hologram/holopad,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/medbay3{name = "Medbay Aft"}) "dCJ" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3{name = "Medbay Aft"}) "dCK" = (/turf/space/transit/east/shuttlespace_ew14,/area/shuttle/escape_pod4/transit) +"dCL" = (/obj/machinery/door/airlock/maintenance{name = "Genetics Maintenance"; req_access_txt = "9"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "dCM" = (/obj/structure/closet/crate,/obj/item/weapon/cable_coil,/obj/item/weapon/grenade/chem_grenade,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "dCN" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/medbay3{name = "Medbay Aft"}) "dCO" = (/turf/space/transit/east/shuttlespace_ew15,/area/shuttle/escape_pod4/transit) @@ -9629,12 +9643,16 @@ "dDw" = (/turf/simulated/wall,/area/mine/laborcamp) "dDx" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "dDy" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) +"dDz" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_research{name = "Genetics Lab"; req_access_txt = "5;9"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "whitebluefull"},/area/medical/genetics) +"dDA" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{icon_state = "door_closed"; id_tag = "AuxGenetics"; locked = 0; name = "Genetics Lab"; req_access_txt = "9"; req_one_access_txt = "0"},/turf/simulated/floor,/area/medical/genetics) "dDB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/virology) "dDC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/virology) "dDD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/medical/virology) "dDE" = (/obj/structure/lattice,/turf/space,/area/mine/unexplored) "dDF" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/obj/item/weapon/wrench,/obj/item/weapon/handcuffs,/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 5; icon_state = "whitegreen"},/area/medical/virology) +"dDG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{icon_state = "door_closed"; id_tag = "AuxGenetics"; locked = 0; name = "Genetics Access"; req_access_txt = "9"; req_one_access_txt = "0"},/turf/simulated/floor,/area/medical/genetics) "dDH" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) +"dDI" = (/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "dDJ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3{name = "Medbay Aft"}) "dDK" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3{name = "Medbay Aft"}) "dDL" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/medbay3{name = "Medbay Aft"}) @@ -9666,13 +9684,15 @@ "dEl" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/door_control{id = "isola"; name = "Privacy Shutters"; pixel_y = 25},/obj/machinery/light_switch{pixel_x = 24; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/exam_room{name = "Patient Room B"}) "dEm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "isola"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/exam_room{name = "Patient Room B"}) "dEn" = (/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/obj/structure/lattice,/turf/space,/area) +"dEo" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) +"dEp" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "dEq" = (/turf/simulated/wall,/area/medical/exam_room{name = "Patient Room B"}) "dEr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "whitegreencorner"},/area/medical/medbay3{name = "Medbay Aft"}) "dEs" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/wall,/area/mine/laborcamp) "dEt" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3{name = "Medbay Aft"}) "dEu" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 4; icon_state = "whiteblue"},/area/medical/medbay3{name = "Medbay Aft"}) -"dEv" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{icon_state = "door_closed"; id_tag = "AuxGenetics"; locked = 0; name = "Genetics Lab"; req_access_txt = "5;9"; req_one_access_txt = "0"},/turf/simulated/floor,/area/medical/genetics) -"dEw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/research{icon_state = "door_closed"; id_tag = "AuxGenetics"; locked = 0; name = "Genetics Access"; req_access_txt = "5;9"; req_one_access_txt = "0"},/turf/simulated/floor,/area/medical/genetics) +"dEv" = (/obj/machinery/door/poddoor{auto_close = 300; id = "smindicate"; name = "outer blast door"},/obj/machinery/door_control{id = "smindicate"; name = "external door control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/turf/simulated/shuttle/plating,/area/syndicate_station/start) +"dEw" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) "dEx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/server{name = "\improper Research Division Server Room"}) "dEy" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 2; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/medical/virology) "dEz" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"; tag = "icon-whitehall (WEST)"},/area/medical/exam_room{name = "Patient Room B"}) @@ -9702,6 +9722,7 @@ "dEX" = (/obj/machinery/door_control{id = "nukeop_ready"; name = "mission launch control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/syndicate_mothership) "dEY" = (/obj/machinery/door/poddoor/shutters{id = "nukeop_ready"; name = "shuttle dock"},/turf/unsimulated/floor,/area/syndicate_mothership) "dEZ" = (/obj/structure/rack,/obj/item/weapon/storage/secure/briefcase,/turf/simulated/shuttle/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape/centcom) +"dFa" = (/obj/machinery/mineral/mint{input_dir = 8},/turf/simulated/floor,/area/mine/production) "dFc" = (/turf/simulated/wall/r_wall,/area/mine/laborcamp/security) "dFd" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/mine/laborcamp/security) "dFe" = (/turf/simulated/wall,/area/mine/laborcamp/security) @@ -9938,7 +9959,6 @@ "dJJ" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/closet/secure_closet/freezer/fridge,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "dJK" = (/obj/structure/table,/obj/item/clothing/mask/cigarette/pipe,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "dJL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/medical/virology) -"dJM" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/flora/kirbyplants{desc = "A plastic potted plant."; layer = 4.1; pixel_y = 3},/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/hallway/primary/central) "dJN" = (/obj/machinery/shower{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/crew_quarters/toilet{name = "\improper Auxiliary Restrooms"}) "dJO" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/obj/machinery/door_control{id = "AuxShower"; name = "Lock Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor{icon_state = "floorgrime"},/area/crew_quarters/toilet{name = "\improper Auxiliary Restrooms"}) "dJP" = (/obj/machinery/door/airlock{id_tag = "AuxShower"; name = "Shower"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/crew_quarters/toilet{name = "\improper Auxiliary Restrooms"}) @@ -9947,7 +9967,6 @@ "dJS" = (/obj/item/weapon/folder/white,/obj/item/weapon/folder/white,/obj/item/weapon/pen/red,/obj/structure/table,/obj/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = 29; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/virology) "dJT" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "floorgrime"},/area/crew_quarters/toilet{name = "\improper Auxiliary Restrooms"}) "dJV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/crew_quarters/toilet{name = "\improper Auxiliary Restrooms"}) -"dJW" = (/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 8},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "dJX" = (/obj/structure/flora/kirbyplants{desc = "A plastic potted plant."; layer = 4.1; pixel_y = 3},/turf/simulated/floor/wood,/area/library) "dJY" = (/obj/machinery/door/airlock{id_tag = "AuxToilet1"; name = "Unit 1"},/turf/simulated/floor,/area/crew_quarters/toilet{name = "\improper Auxiliary Restrooms"}) "dJZ" = (/obj/structure/stool/bed/chair/office/light{dir = 4},/obj/effect/landmark/start{name = "Virologist"},/turf/simulated/floor{dir = 1; icon_state = "whitegreencorner"},/area/medical/virology) @@ -10063,7 +10082,6 @@ "dMp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/virology) "dMq" = (/obj/machinery/camera{c_tag = "Medbay Hallway Aft"; dir = 4; network = list("SS13","Medbay")},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/medbay3{name = "Medbay Aft"}) "dMr" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) -"dMs" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dMt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Interior Airlock"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "whitegreenfull"},/area/medical/virology) "dMu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology) "dMv" = (/obj/machinery/access_button{command = "cycle_exterior"; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 0; pixel_y = 24; req_access_txt = "39"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1449; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Exterior Airlock"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "whitegreenfull"},/area/medical/virology) @@ -10337,26 +10355,26 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaadaaaaadaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaadauWaaiabuaboaboabpaboabqaboaEzaboaboaboabtaboaaiauNahqaEGaEBaEAahqaaaaadaaaaaaaaaaIWaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadauvaEgaehaeiaejaekaaaaaEaakaaEaadaadaaaaaaaaaaaaaaaaaaaaaaaaaakaadawoawoawoawoawoaadafMaadawoawoawoawoawoaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaagaagaagaagaagaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaadaaaaadaadabYaadaadaaaaaaaaaaaaaaaauWabbabJaboabDaayabEabqabFaENabGaboabHaayabIaaiauNawyavoavnavqavpaaaaadaaaabvabvabvabvabvaaaaadaaaaaaabwabwaWyaWMaYuabwabwaaaaadaaaaaaaadaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaadaaaaaaaaaaaaaeaaElaaMaaraaraaLaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaEaaaabCabCaupabCabCaaaafMaaaabCabCaupabCabCaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaagaagaagaagaagaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaaaaadaaaaaaajEajFajEaadaaaaaaaaaaaaaadauWaaiaGeaboaccaayacdaceaDRaDSacgaboachaayacgaaiauNahqaDtauCaDrahqaadaadabvabvaDwaDvaNBabvabvaadaadabwabwaNTaDAaDCaSMaDOabwabwaadahwahwaLRahwahwaadaadaadaadaeaauvaeaaAhaAiaAjaeaaAhaAiaAjaeaaeaaBxaeaaBKaBDaAiaCBaAiaAiaAPaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaakaaaafgafgafgafgafgaupaGSaupafgafgafgafgafgaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaadaadaaaakhaQJakhaadaadaadaadaadaadauNaaiaboaboabsactaboabqaboaEtabqaboabsacvabqaaiaajayOaWfaWeaWkayOaadabvabvaOJaEqaEpaEpaErabvabvaadabwaDYaEaaEbaEeaUCaVuaEmabwaadahwaSNaSPaWxahwaaaaaaaaaaadaeaaEfaeaaDpaCUaDoaeaaDXaDGaDWaeaaiaaCEaCCaCFamiamiamiamiamiayEaadaadaadaadaadaaaaaaaaaaaaaaaaakaadafJafKafKafKafKaaAafMaazafOafOafOafOafPaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadakEakFakGakHakIaaaaadaaaaaaaadauWaBuaBvaBwaByaBAaAQaARaATaAWaBfaBqaCYaBtaBLaFVaBJaBIaBWaBRaBOaBNaadabvaDiaBBaBHaBGaBFaBEaCtabvaadaIsaJRaLCaCvaCwaCbaEVaEyaERaadaxSaAqaFbaCAaLRaaacxdcxdcxdaeaaxTaymayoaxWaxWaxUaxWaxZaydayFagGagGagGayEamiamiamiamiamiayGaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaakaadawoawoawoawoawoaadafMaadawoawoawoawoawoaaaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaadaadakTakUaFRanWakTaaaaadaaaaaaaadauWaCNaaCaCTaCOaCPaCIaCJaCGaCHaCLaCMaNbaFYaCLaDgaCHaDhaSLaGcaCTaDkaadabvaOiaBBaBHaBGaBFaBEaDaabvaadaSJaDbaQgaDcaSKaxnaQgaCXaRvaadahwaAqaAraCAahwadradradYagRaeaaeaaeaaxJaieavhavhazqayYaznavvavvayWayVayJamiamiamiamiamiayXaeaaeaaeaaaaaadaaaaaaaaaaaaaaaaadaadaaaaadaadaaaaaaaaaafMaaaaaaaadaaaaaaaadaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaoFaoFaKCalGalGalGalHakTaqaavbareakTaWoagVaWoajeaadauNaaiaaiazXazZaAaaaiazKazMazKaeMaeMaeMaeMaeMaABaAAaAzaexaexaexabvabvabvaEhazmazlaFcazjazjazEabvaadabwaKYaCeaBYaCcaAIaBXauYabwaadahwaAqaAraCAahwaAcadraAdadsaAeaKGaeaavfaieavhavjavkavkavkavxavvavSavNavTamiamiamiamiamiawbawaawdawcaaaaadaadaadaadaadaadaadaaaaaaaaaaadaaaaaaaaaafMaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaadaadaaaakhaQJakhaadaadaadaadaadaadauNaaiaboaboabsactaboabqaboaEtabqaboabsacvabqaaiaajayOaWfaWeaWkayOaadabvabvaOJaEqaEpaEpaErabvabvaadabwaFqaEaaEbaEeaUCaVuaFFabwaadahwaSNaSPaWxahwaaaaaaaaaaadaeaaEfaeaaDpaCUaDoaeaaDXaDGaDWaeaaiaaCEaCCaCFamiamiamiamiamiayEaadaadaadaadaadaaaaaaaaaaaaaaaaakaadafJafKafKafKafKaaAafMaazafOafOafOafOafPaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadakEakFakGakHakIaaaaadaaaaaaaadauWaBuaBvaBwaByaBAaAQaARaATaAWaBfaBqaCYaBtaBLaFVaBJaBIaBWaBRaBOaBNaadabvaDiaBBaBHaBGaBFaBEaCtabvaadaIsaJRaLCaCvaCwaCbaEVaEyaERaadaEIaAqaFbaCAaLRaaacxdcxdcxdaeaaxTaymayoaxWaxWaxUaxWaxZaydayFagGagGagGayEamiamiamiamiamiayGaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaakaadawoawoawoawoawoaadafMaadawoawoawoawoawoaaaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaadaadakTakUaFRanWakTaaaaadaaaaaaaadauWaCNaaCaCTaCOaCPaCIaCJaCGaCHaCLaCMaNbaFYaFcaDgaCHaDhaSLaGcaCTaDkaadabvaOiaBBaBHaBGaBFaBEaDaabvaadaSJaDbaQgaDcaSKaxnaQgaCXaRvaadahwaAqaAraCAahwadradradYagRaeaaeaaeaaxJaieavhavhazqayYaznavvavvayWayVayJamiamiamiamiamiayXaeaaeaaeaaaaaadaaaaaaaaaaaaaaaaadaadaaaaadaadaaaaaaaaaafMaaaaaaaadaaaaaaaadaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaoFaoFaKCalGalGalGalHakTaqaavbareakTaWoagVaWoajeaadauNaaiaaiazXazZaAaaaiazKazMazKaeMaeMaeMaeMaeMaABaAAaAzaexaexaexabvabvabvaEhazmazlaEmazjazjazEabvaadabwaKYaCeaBYaCcaAIaBXauYabwaadahwaAqaAraCAahwaAcadraAdadsaAeaKGaeaavfaieavhavjavkavkavkavxavvavSavNavTamiamiamiamiamiawbawaawdawcaaaaadaadaadaadaadaadaadaaaaaaaaaaadaaaaaaaaaafMaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNOaMzaMuaoHamnaMmaMlakTamoawJamqakTaLOaLEaEHaWoajeauNauNaaiaaiaAHaaiaaiaaiaAHaaiafQaAGaAEaAFaeMaCdaCKaCzaexaAuaLnaAvabvabvabvaAtaAsabvabvabvabvabvawhabwabwawGawIaEnawzawFabwabwawhahnaDeaDjaEoahwadradradsadsaALaAMaeaaxJaieaxEaiXaiUaiUaxPajJawKahSaliaxBamiamiamiamiamiaxBaxCakOakVaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaadaadaadaadafMaadaadaadaadaadaakaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaoFaugaoFaveamnavXaxbalDakTaluanbakTaxDazoawYatCajeaadaadaadaaaaadaaaaaaaaaaaaaaaakBakAakCatUarGasBaqvaqAaexaknailakmabvakuakoakpakxawtatyatwaoTabvanMamBaaQaqTaqwanYattatsaaQahWaqqahnatvatuakvahwamzadsadsadsadsadraeaalraltalsalkaljaljallajJakOahSaliakWamiamiamiamiamiakWaleakOakVaadaadaaaaaaaaaaaaaaaaadaaaaaaaadaadaaaaaaagUaiOagUaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaqjamZaqjaqXargaqlaqmarkarJakKbGxaWoarTamuasFatQasnaadaadaadaadaadaadaadaadaadaadafQaeMaeMaeMaeMajLacZajMaexaikailaimabvaqcaipaiqairaiJakbacBanHakdakwakkajOajNajVajPajXajWajZajYakzakaakjakcarfahwaicadsajwaibadsadrajfahYaieaiYaiXaiVaiUaiTajJajKahSajHajBamiamiamiamiamiajyajzajkajxaaaaadaadaadaadaadaadaadaadaadaadaaaaaaaaaamXamYamXaaaaaaaadaaaaacaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaoFaugaoFaveamnavXaxbalDakTalManbakTaxDazoawYatCajeaadaadaadaaaaadaaaaaaaaaaaaaaaakBakAakCatUarGasBaqvaqAaexaknailakmabvakuakoakpakxawtatyatwaoTabvanMamBaaQaqTaqwanYattatsaaQahWaqqahnatvatuakvahwamzadsadsadsadsadraeaalraltalsalkaljaljallajJakOahSaliakWamiamiamiamiamiakWaleakOakVaadaadaaaaaaaaaaaaaaaaadaaaaaaaadaadaaaaaaagUaiOagUaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaqjamZaqjaqXargaqlaqmarkarJalubGxaWoarTamuasFatQasnaadaadaadaadaadaadaadaadaadaadafQaeMaeMaeMaeMajLacZajMaexaikailaimabvaqcaipaiqairaiJakbacBanHakdakwakkajOajNajVajPajXajWajZajYakzakaakjakcarfahwaicadsajwaibadsadrajfahYaieaiYaiXaiVaiUaiTajJajKahSajHajBamiamiamiamiamiajyajzajkajxaaaaadaadaadaadaadaadaadaadaadaadaaaaaaaaaamXamYamXaaaaaaaadaaaaacaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaoFapeaoFanQaisaiDaoOaoFbHMapyarXapKarXapvapRanJaWoapZaKBagVaKBaKBaKBaaaadradradrafQagXagZagYahjahGahDahEapWahBahAahBaiNahKahKaiEaiCaiLaiKaiHaiHapMahJahIahHaguahzahyaiAaizaiyaixaiwaiSaijaiiahxahwagQadsadsanIadsadraiaahYaieagGaigaifaiPaihahPahQahSagNahUamiamiamiamiamiafFaeaahOaeaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaagUanDaqRanDagUaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaoFamWaqkaqkaqkagnamVaoFaoYaiBbrTaWoanKamHanEanFaWoaKBaKBarnaKBafNaKBafZadraklaicafQafYafXafWagdageagfaggaexagaagbagcabvagjagkaglaoyabQaenaidanGaexakiafzahiaguahkaffahuahtahvafjahoahnahnagtadradradradradrafHadradraeaagIagHagGagGagLagKagJahrahragMagNahNamiamiamiamiamiafFbWIcsgavAavAavAavAavAavAafravAavAaaaaaaaadaadaadaoBaoCamYaoDaoEaadaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaadaaaaadaaaaadaaaaoFaesaiFaiIajqalKammaoFbrTaiBbrTaKBardbrTbrTbrTdKcaKBbrSaKSaKBaKBaKBahLafxagOaviahMafyafyafAafvaeraiRalvabvahgafwaheabvabvacCagyacCabvahhahCagWaduaflafzagxagwaguagsagiaftafsafjagpagoagmafeaeYaeYaeYafGaeXaioaeXaeXahFagEagFafLafLafIagBagzafCafCafCafDafBamiamiamiamiamiafFaUoaQsavAaePafEaQsaeZavAagCagDavAavAaaaaadaaaaaaaptapuaoIandaptaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaKBaKBafUaKBaadaaaaadaadaadaadaadaKBafUaKBaoFahdahfaoFaoFaoFaoFbrTahbarXaeJajnagqaiWbrTajAaKBbHMagSagvafVaKBadYahsagPagAafQaeLaeKaeKafTaeraiRacPacIaeDaeEaeFahlafbaemaenaeoabvaenacBafkaexafSafzafoafnafqafpaeHaeGafcafjahVacTacTaaQaaQaaQaaQaocadradradradraeaadZadXadFadnadkadjadgaeRaeVaeeaeNaecaebaebaebaebaebaeWaThaQsavAaQsaQsaQsaQsavAaQsaQsaQsavAaaaaadaaaaaaaptanoadfafmaptaaaaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaadaaaaadaaaaadaaaaoFaesaiFaiIajqalKammaoFbrTaiBbrTaKBardbrTbrTbrTdKcaKBbrSaKSaKBaKBaKBahLafxagOaviahMafyafyafAafvaeraiRalvabvahgafwaheabvabvacCagyacCabvahhahCagWaduaflafzagxagwaguagsagiaftafsafjagpagoagmafeaeYaeYaeYafGaeXaioaeXaeXahFagEagFafLafLafIagBagzafCafCafCafDafBamiamiamiamiamiafFaUoaQsavAaePakKaQsaeZavAagCagDavAavAaaaaadaaaaaaaptapuaoIandaptaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaKBaKBafUaKBaadaaaaadaadaadaadaadaKBafUaKBaoFahdahfaoFaoFaoFaoFbrTahbarXaeJajnagqaiWbrTajAaKBbHMagSagvafVaKBadYahsagPagAafQaeLaeKaeKafTaeraiRacPacIaeDaeEaeFahlafbaemaenaeoabvaenacBafkaexafSafzafoafnafqafpaeHaeGafcafjahVacTacTaaQaaQaaQaaQaocadradradradraeaadZadXadFadnadkadjadgaeRaeVaeeaeNaecaebaebaebaebaebaeWaThaQsavAaQsaQsaQsaQsavAaQsaQsafEavAaaaaadaaaaaaaptanoadfafmaptaaaaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKBajtbMbaKBanLamsamsamsamsamsajsaKBbrSajtaKBaeTaDnaefbMeaspaKBbwqaedbMbaKBardafdafuaeSaeOaKBaeubrTaqhbrTaKBaetahsaczaczaczacKacKacKacKadWaiRassadTadUaeAaeBadQaeIadOaeyaevaewaenaaXaghaexaezadRadPadNadMadLadJadKadJadIadHafaadEadEaepadBaaQaocadrabXabZaklabcabcabcabcabcaciacmackabcabcabcabcabcabVavAabWacbadlavAavAaQsavAaQsaQsacnaQsavAaThaddacoavAaaaaadaaaaaaaptaqZadearbaptaaaaadaaaaaaaaaaadaaaaadaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaaaaaaaaaaaaaadaadafUaeCaeUadVafRbrTbrTbrTbrTbrTahcaaIaeqbKoacqacrbrTbrTbrTbrTbrTaqhbQSadradradradradradradradradradracAadradradrabUaczacyacxacwacuacsacKacLaiRacPacIacJacQacSacFadoacGacHabPabQacDacEaegaduadzadvadcadaadtadmacWacVacYacXacUacTabNadpabNabRaaQaaHaaSaaKaibadsabcaaZaaYaaVabyabxabrabdabcabBabzabAabcavAavAaQsaThaQsaUoavAaQsavAadlaQsabOaQsavAabSaQsabOavAavAcgaavAavAarNarNabTaclarNarNcgaarNarNacMarNaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaeaaeaadaadaaeaadaaaaadaadaadaKBaKBasVaKBaKBasWasXasXasXasXasXasYaKBaKBaKBaKBaGraGCaGCaGCaGCaGCaGVbQSadraInatDatEatFawpatGatIasaasaatKasaasaascaApaAkatSatWatVauaatYacKatoatmatnabvabQatpabQatraAgazpabvabvabvaEJaAoaexaexaaQazuaszaslazuaaQazCazBaaQazyacTacTaAbaAbaAbaaQaaQaocadradsauqadsabcarmauoaumaulaukarIarHausautauuarFabcauravAaufaddacoadGavAaQsavAavAavAbvSavAavAavAavAbvSavAarOaQsbWIaUoaQsaQsaubatRarNaQsaQsaucarNcsgarNaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaaaaaaaaaaaaaadaadafUaeCaeUadVafRbrTbrTbrTbrTbrTahcacqaeqbKoaaIacrbrTbrTbrTbrTbrTaqhbQSadradradradradradradradradradracAadradradrabUaczacyacxacwacuacsacKacLaiRacPacIacJacQacSacFadoacGacHabPabQacDacEaegaduadzadvadcadaadtadmacWacVacYacXacUacTabNadpabNabRaaQaaHaaSaaKaibadsabcaaZaaYaaVabyabxabrabdabcabBabzabAabcavAavAaQsaThaQsaUoavAaQsavAadlaQsabOaQsavAabSaQsabOavAavAcgaavAavAarNarNabTaclarNarNcgaarNarNacMarNaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaeaaeaadaadaaeaadaaaaadaadaadaKBaKBaxSaKBaKBasWasXasXasXasXasXasYaKBaKBaKBaKBaGraGCaGCaGCaGCaGCaGVbQSadraInatDatEatFawpatGatIasaasaatKasaasaascaApaAkatSatWatVauaatYacKatoatmatnabvabQatpabQatraAgazpabvabvabvaEJaAoaexaexaaQazuaszaslazuaaQazCazBaaQazyacTacTaAbaAbaAbaaQaaQaocadradsauqadsabcarmauoaumaulaukaDYarHausautauuarFabcauravAaufaddacoadGavAaQsavAavAavAbvSavAavAavAavAbvSavAarOaQsbWIaUoaQsaQsaubatRarNaQsaQsaucarNcsgarNaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaeaaeaaeaaeaaeaCVaaeaadaadaKBaKBaKBatHaBPaKBaadaaaaaaaaaaaaaaaaaaaadaadaadaaaaKBasLaUDbHMarlbrTbHMaEsaDuaDFaEvagrasNamJadradrataatbatbatbatbatbatcadraczasGasKasJasIasHasqasraiRassasgaskasiasgaskasjaskasgaskaAyaskasjasbarZashasgaqxapoaskaskaskasgaskasmafQasoainainainainaeMaocadradsadsadsabcabcabcabcabcatBatzatlalZarcabcabcabcatkavAaUoaQsabOaQsavAaQsavAbbNavAatjbvHbvHbvHatiathbYbbYbbYbbYbbYbbYbbYbbuqaQsaQsaQsaQsatgacMasRacMaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaadaadaaeaadaBVaadaaeaaeaaeaaeaaeaaeaCDaAxaCDafRaqhaKBaKBaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaKBaKBaKBbHMbrTavabHMaGPaAfaGJazTaFubJhazYadraaaaaaaaaaaaaaaaaaaaaaaaaaaaczaqiaqeaqdaqgaqfaoZapcaqtaquaqpaqsaqnaqoaqsazcaqDaqoaqBaqCawgawvaqQaqPaqsaqNaqMaqFalQalQaraaqYaqVaqUaAnaqSajgajhajiaBraeMaocadrasSadYasTabcarUabzaseabyabxabrasOabcasUaaYasZabcatdavAavAavAbvSavAavAaQsavAaQsavAatfarNarRarNarWarNarNarNarNarNarNarNarNarNarNbWIarNarNarNarNarNarYaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaeaaeaaeaaeaaeaaeaadaaeaaeaaeaadaKBaKBaKBarnaqhbrTaKBaaaaaaauIauJauKauJauLaaaaadaadaKBaovaKBbtwaouaXOaXOaDlbrTaKBaDfarSaowaoxadraaaavUavUavUavUavUavUavUaaaaczaotaosaoraoqaooacKaoLapqaiGayMapfapnaiGapzapfapqapAapraiMapwapxaoNaoMaoQaoPaoJapaanSamSapaaozaoKapbaoVaoUaoXaoWapNapLaeMaocbaabaabaabaabaaarFarDaryarLarKarIarHarparrarjarmabcartarsbvHbvHaribvHbvHbvHbvHbvHbvHarQarNapSazrapUapTasPaDQasPatLatMatNatMatOarNarNarNatLatMatOatPasPaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaadaadaaeaadaBVaadaaeaaeaaeaaeaaeaaeaCDaAxaCDafRaqhaKBaKBaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaKBaKBaKBbHMbrTavabHMaGPaAfaGJazTaFubJhazYadraaaaaaaaaaaaaaaaaaaaaaaaaaaaczaqiaqeaqdaqgaqfaoZapcaqtaquaqpaqsaqnaqoaqsazcaqDaqoaqBaqCawgawvaqQaqPaqsasVaqMaqFalQalQaraaqYaqVaqUaAnaqSajgajhajiaBraeMaocadrasSadYasTabcarUabzaseabyabxabrasOabcasUaaYasZabcatdavAavAavAbvSavAavAaQsavAaQsavAatfarNarRarNarWarNarNarNarNarNarNarNarNarNarNbWIarNarNarNarNarNarYaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaeaaeaaeaaeaaeaaeaadaaeaaeaaeaadaKBaKBaKBarnaqhbrTaKBaaaaaaauIauJauKauJauLaaaaadaadaKBaovaKBbtwaouaXOaXOaDlbrTaKBaDfarSaowaoxadraaaavUavUavUavUavUavUavUaaaaczaotaosaoraoqaooacKaoLapqaiGayMapfapnaiGapzapfapqapAapraiMapwapxaqNaoMaoQaoPaoJapaanSamSapaaozaoKapbaoVaoUaoXaoWapNapLaeMaocbaabaabaabaabaaarFarDaryarLarKarIarHarparrarjarmabcartarsbvHbvHaribvHbvHbvHbvHbvHbvHarQarNapSazrapUapTasPaDQasPatLatMatNatMatOarNarNarNatLatMatOatPasPaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaeaaeaaeaaeaaeaaeawHaaeaadaadaadaadaKBbHMaqhardafUaaaaaaavLaUaapIavOavLavPavQavRawVawVawVawVanOawVawVadradraKBanNaKBadrakYadraaaavUavVavWaBTavYavZavUaaaalLanPanRalBamPamPacKajjavKajlaeMajmavJajoaeMajpawPajraeMapHajpapsaeMalfanAanzanCanBaldaldalXanxanwaldaldaneaeMaeMaeMaeMaeMaocbaaapVapXanlbaaabcabcabcabcapYaqOaqbalZarcabcabcabcavAaqWaUobWIaQsaUoarhaQsarNarNarNarNarNanVaAJanUanTauyaACauyauAauBatTauBauEatMauFatMauGauBatTatPauHaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaeaaeawmaaeaaeaaeaaeaadaaaaadafUbtwaqhbrTaKBaaaaaaauKawQawRawQauKawSawTawUawVawWazFaBeanharuawVatqarMazxaxdaxeadrakYadraaaavUaxfaxgaxhaxiaxjavUaaaalLamNamNamQamPamOacKajQajRajSaeMajTajRajSaeMajUajRajSaeMamKamLamMaeMamEamGamFamIazLaldaunamyamxamAazkaztaneamDamCamCamCamCansbaaaomaolaokbaaapmappapmabcaoAaopaonaodaofaobaobaobbvHanXarNarNarNarNarNarNarNannannanaaBsanfancamUamTavFasPasPaadaadauBavHauBauBauBauBauBavIauBauBayIaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaeaadaaeaadaadaaeaaeaadaadaKBaKBbMeaqhaKBaKBaaaaaaavLawQawQawQaylanjaynaynaniaypayqayramgaqyaqEaqzaywayxayyayzadrakYadraaaavUayAayBasfaxiayDavUaaaalLalIalCalBalFalEacKakqajRakraeMakqajRaksaeMakqajRaktaeMalNacRalMaeMalValUalTalSalRaldayHajualPaoRaoSapGanealOaeXaeXaeXalYalWbaaankanmanlbaaanpanqanqantanranvanuabcabcabcabcabcavAanyarNamkayaanZamwaxYbwtamlaycaycaycaycampamvamtawNawOasParqaadaadaaaaaaaaaaadaadaaaaaaaadaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaeaaeawmaaeaaeaaeaaeaadaaaaadafUbtwaqhbrTaKBaaaaaaauKawQawRawQauKawSawTawUawVawWazFaBeanharuawVatqarMazxaxdaxeadrakYadraaaavUaxfaxgaxhaxiaxjavUaaaalLamNamNamQamPamOacKajQajRajSaeMajTajRajSaeMajUajRajSaeMamKamLaoNaeMamEamGamFamIazLaldaunamyamxamAazkaztaneamDamCamCamCamCansbaaaomaolaokbaaapmappapmabcaoAaopaonaodaofaobaobaobbvHanXarNarNarNarNarNarNarNannannanaaBsanfancamUamTavFasPasPaadaadauBavHauBauBauBauBauBavIauBauBayIaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaeaadaaeaadaadaaeaaeaadaadaKBaKBbMeaqhaKBaKBaaaaaaavLawQawQawQaylanjaynaynaniaypayqayramgaqyaqEaqzaywayxayyayzadrakYadraaaavUayAayBasfaxiayDavUaaaalLalIalCalBalFalEacKakqajRakraeMakqajRaksaeMakqajRaktaeMamMacRalNaeMalValUalTalSalRaldayHajualPaoRaoSapGanealOaeXaeXaeXalYalWbaaankanmanlbaaanpanqanqantanranvanuabcabcabcabcabcavAanyarNamkayaanZamwaxYbwtamlaycaycaycaycampamvamtawNawOasParqaadaadaaaaaaaaaaadaadaaaaaaaadaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaeaaeaaeaaEaaaaadaadaadaKBaKBbHMbHMaqhafUaaaaaaaaaauKawRawRawRauKazGazHazIazJaypaynaroakyaxVawVazNazOazPazQahZadrakYadraaaazSazwazUazVazWauwavUaaaaczakXakRakQakJakDaczakLakMakNafQakLakMakNafQakLakMakNafQalwakPalJafQalfalhalgafQalcaldatAalbalaapEapFatxaneakZbaabaabaaalpbaabaaalqamcbaabaaamfameamdangamRamjamhalZamaabzabAabcambacjarNalmazraycaycalnaloaAJaANalyalxalxalxalAalzayiayjaykaaaaaaaadaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaEbmNaAZbmNaakaaaaadaaaaadaKBafVarnbGxaqhaKBaKBaaaaaaavLaBaaBbaBcavLaBdavQavRawVbjXaynaBgakyaBhawVaBiaBjaBkaBlbtbadrakYadraaaaBnavUaBoaBpaBoavUavUaaaacKbnzbnGbnEbnEbnzacKbnNbnVbnObnZbnObnVbnObyGbnObnVboaboebobbombolbxKbygbywblxafQainanebCWaqrbpXbqsbqWbCXaneakZbaabnubnvbntbpmbpmbpnbjWboHaZHbjVbjTbjUbiQbjbbiLarHbhPbhObhMbhGabcaQsacjarNbmMaAJbmLbmJbmHbmFbmEbmAbnyazzazzazzbnwbnxayiayjazDaaaaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaabmNbJAbmNaadaadaadaadaadaKBbrTbrTbrTarVbaQaKBaaaaaaaCmauJaCnauJaCoaaaaadaadaCpaCqaCraCsbgGaCuawVbglbgmaCxaCybDdadrakYadraaabbxaaabgobgnbgoaaaaadaaaacKbphbnGbnEbnEbpiacKarvbkxbpjbEBbpobplbplbEIbplbprbpobpvbpubptbpsbAgbAhbzRbzZafQainaneanebEcbubanebsianeaneakZbaabaabaabzJbcEboDboEbkkbklbotbkgbjtbkjbkebkebkfanuabcabcabcabcabcaThacjarNaBZbkbaDxboZboOboIboYboSaAObpgbpebpfaASbpdayiayjaAUaAVaadapBaaaaaaaaaaaaapBaaaaaaapBaadaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10364,79 +10382,79 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabmNbmNaEUbJJaEWaCkaCkaCkaEXbJFaEYaEZaKBaKBaqhaKBaaaaFaaFaaFaaFaaFaaFaaFaaaaaaaawVawVawVblgbmIawVawVbrxbrAbrzbrpbhrbnsblIbpkbqjbrHbrIbrBbrCbrDbGUbrLbrMacKacKbGWaczbHlaczaczaxwaxwaxwaxwaxwaxwaxwbGSaxwbiBawnblTaoaaoaaoabrmbrmbrmbrmbrmaoabrlaoaaqLaqLaqLaqLbrnaqLakZbaabaabaabxtbhDbaabrcbaabHbbaabmUbmVbmWalZbnabnebngalZbnkbnBbnqabcbNoacjarNasPasPasPasPasPbwtbrdaDBaAObqXasPaDDaDEaycbtJaycaDHazDaadaaaaaaaadaadaadaadaadaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabmNaEUaEUaEUaCkaCkaCkaCkaCkaCkaEUaEUaGtaKBaqhafUaaaaFaaFaaFaaFaaFaaFaaFaaaaaaaaGubymbsebaVbaybkJbbUboubaTbaUbaRbisbiqbikbgBbhrbicbidbtmbipbimbDpbAObAQbAfbtibDebDoaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaabEdbEwbEpbiCaoabiEbiDbivaoebvnaogaohaoiaojaoabyEadqbtXbvcaDsaqLbynbaabhEbAabcEbhDbaabhCbaabKlbaaaUwaUfaUtaCWaCWaCWaCWaCWaCWaCWaCWaCWavAacjarNaTMaTBbtgaFZasPbylaAJaDBbhRaDHaEOaEPaEQaoGaAKaESawMazDaadapBaadaadaaeaaeaaeaadaETaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaabmNbwkaCkaCkaCkaCkaCkaCkaCkaCkaEUaEUaEUbstbCmaKBaaaaFaaFaaFaaFaaFaaFaaFaaHVaHWaHXbwlaHZbcKbcGaIcaIdaIebpRbcIbdzbdMbdMbnlbdMbdMbdMbnmaYhbjqbjsbjgbitbjjaYhaYhaYhbjlaaaaaaaFsaFsaFsaFsaFsaFsaFsaaaaaaaxwbjuatZbjwapdbjvaohbjFapgaphapiapjapkaplaoabyXaDqbyWbjzbzCaqLbnMbaabaabaabiFbiFbaabaabaabaabaaaXEaXXaZaaCWaUBaVJaWibbDbaMbdebchaCWciUacjarNaTBaTBbjcaHFaHGazrampaGhbjdbthasPbhfaGkaGlaGmaGnaGoazDaadaaaaaaaadaGpaGqaaeaadaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbmNaJiaCkaCkaCkaCkaJjaCkaCkaCkaCkaEUaJkaKBaqhaKBaaaaFaaFaaFaaFaaFaaFaaFabFOaJmbFOaHYaJnaJoaJpbrgaJraJsbrfbewbetbldblabkZbJibJibJibUraYhbAcbkUbkWbkRbkTbkNbkPbkLbkMaCQaGUaGUbkIbkKbwJbkHbkBaLUaLUaBzbkwbkzaLXbiCaoabkvaohapOaohapPaohapQaohaohaoabzYaBSbyWaBUbwoaqLbkpbgybdjbuSbkcbjGbdlbeVbkibdkbfBbiGaIGbfhaCWbfTbdibdibdibdhaHebdfaCWbPMacjarNaKhaKhaHEaHFaHGbkbbypbyobjHbjRaHNaHOaHPaHQaHRaHSawMazDaadaaaaHTaadaaeaaeaaeaadaadapBaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKqaCkaCkaKraCkaCkaCkaCkaCkaCkaCkbytaKBaKBaqhaKBaaaaFaaFaaFaaFaaFaaFaaFaaKsaKtaKsaKuaJnaKvaKvaKwaKvaIebeKbeLbftaKBaKBaKBaKBaKBaKBasNaYhbmybmzbmzbmwbmxbmxbmxbmvbjlaaaaFsbhFaGYaGYaGYaGYaGYbhAaFsaaaaxwblUavgblTaoablRaqGaqHaohaqIaohaqJaqKaohbmubBvbBDbBhbBtbxiaqLblZbmabliblibliblkbllbllblmblmblBbhvbhwbiHbhzaeQaIyaIyaIyaIyaIyakSaCWaiQacjarNaKhblOaHDaGaasPbyraAJbysaAOblfasPaJeblhaDxaDxaDxaDyazDaadaaaaaaaadaadaadaadaadaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLjaLkaLlaaaaLmaCkaCkaCkaCkaCkaCkbPDbPHbPHbQabzKaKBaUDaqhaKBaaaaFaaFaaFaaFaaFaaFaaFaaLoaHWaLpbPkaJnaLraKubvjaLtaLubBAbBIbBkbBrbqrbqnbqJbqHaKBasNaYhbyjbmzcjRcnmckeckeclsbyIbjlaaabNqbyJaGYbyKaJGbyLaGYbyMbORaaaaxwbiBawnblTaoabyNarxadSarzarAarzarBarCbyPaoacoucpTcwQcxabPtaqLbqYaIEaIFaJSaKRbtHbztbzubzqbzsbzhbribrebrhbqZbraadhadibrPadiadibrkaCWaUoacjarNasPbwtbwtasPasPbwtbzNbzMbzObzxasPasPaCfasPasPaCgbdIbzwaKpaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiZaMIaMJaMIajcbmNaCkaCkaCkaCkaCkaCkaCkaCkaCkbRIaMMaKBbwqbwraKBaaaaFaaFaaFaaFaaFaaFaaFaaKsaMOaKsaKuaJnaKvaKvaKwaKvaIebpRbEobEsaMRbtKbsUbsobsnaKBbzzbzAbgfbmzbOTbzDbzFbOTcMVbQRbjlaaabPRbsqaLQbPVbPTbPVaLQbSrbSiaaaaxwbiBawnbQXaoaastasuasuasvaswastasuasxasyaoaaqLcSncNkcRzaqLaqLbrZaIEaJSaKRbAIbnbaIEaIFaKRaKRaJSbwNbAFbsGbsubswaIyaIyacaaIyaIyacfaCWaTNacjarNbAlbAkbDHbAmbzPbhxaAJbysaAObAMbpebALaLhbAKayiayjaAUbAJaadapBaaaaaaapBaaaaaaaaaaaaapBaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaacWwcWwcWwcWwcXQcWwcWwcWwcWwcXQcWwcWwcWwcWwcXQcWwcWwcWwcWwaaaaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCaMIaObaMIajCbmNaJiaEUaCkaCkaCkaCkaCkaCkaCkbUcaOcaKBaqhbrTaKBaaaaFaaFaaFaaFaaFaaFaaFacdhaOecdhaOfaJnaKvaSpaSqaSraSsbKgaIebJraKAbvPbvzaOnbwuaKBbBBaYhbBwbmzbOTbBEbBFbRUcMVbTKbjlaaaaFsbTjbSWaLQbTmaGYbSubSDaFsaaaaxwbAXatZbjwaChbKQaueaueaueaojaueauebAZbQtaoacTidtNdAubBabTobsLbBabBcbChbChbCebupbutbsRburbusbsQbsRbsMbsOaCWbtPauiauiaujauibuCauhaCWaQsbuParNbCrbCqbCpbCobCAbAibAbbzVbxfbBPaMDaMDaMEbBQayiaMGazDbDXaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXdDNbUobBHbBHbBHbzTbBHbBHbBHbBHbZMbBHbBHbBHbBHbzSbBHbBHbBHaXfcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbmNaJiaCkaCkaCkaCkaJjaCkaCkaCkaCkaEUaJkaKBaqhaKBaaaaFaaFaaFaaFaaFaaFaaFabFOaJmbFOaHYaJnaJoaJpbrgaJraJsbrfbewbetbldblabkZbJibJibJibUraYhbAcbkUbkWbkRbkTbkNbkPbkLbkMaCQaGUaGUbkIbkKbyLbkHbkBaLUaLUaBzbkwbkzaLXbiCaoabkvaohapOaohapPaohapQaohaohaoabzYaBSbyWaBUbwoaqLbkpbgybdjbuSbkcbjGbdlbeVbkibdkbfBbiGaIGbfhaCWbfTbdibdibdibdhaHebdfaCWbPMacjarNaKhaKhaHEaHFaHGbkbbypbyobjHbjRaHNaHOaHPaHQaHRaHSawMazDaadaaaaHTaadaaeaaeaaeaadaadapBaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKqaCkaCkaKraCkaCkaCkaCkaCkaCkaCkbytaKBaKBaqhaKBaaaaFaaFaaFaaFaaFaaFaaFaaKsaKtaKsaKuaJnaKvaKvaKwaKvaIebeKbeLbftaKBaKBaKBaKBaKBaKBasNaYhbmybmzbmzbmwbmxbmxbmxbmvbjlaaaaFsbzuaGYaGYaGYaGYaGYbyVaFsaaaaxwblUavgblTaoablRaqGaqHaohaqIaohaqJaqKaohbmubBvbBDbBhbBtbxiaqLblZbmabliblibliblkbllbllblmblmblBbhvbhwbiHbhzaeQaIyaIyaIyaIyaIyakSaCWaiQacjarNaKhblOaHDaGaasPbyraAJbysaAOblfasPaJeblhaDxaDxaDxaDyazDaadaaaaaaaadaadaadaadaadaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLjaLkaLlaaaaLmaCkaCkaCkaCkaCkaCkbPDbPHbPHbQabzKaKBaUDaqhaKBaaaaFaaFaaFaaFaaFaaFaaFaaLoaHWaLpbPkaJnaLraKubvjaLtaLubBAbBIbBkbBrbqrbqnbqJbqHaKBasNaYhbyjbmzcjRcnmckeckeclsbyIbjlaaabNqbyJaGYbOHbOcbPXaGYbyMbORaaaaxwbiBawnblTaoabyNarxadSarzarAarzarBarCbyPaoacoucpTcwQcxabPtaqLbqYaIEaIFaJSaKRbtHbztbQmbzqbzsbzhbribrebrhbqZbraadhadibrPadiadibrkaCWaUoacjarNasPbwtbwtasPasPbwtbzNbzMbzObzxasPasPaCfasPasPaCgbdIbzwaKpaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiZaMIaMJaMIajcbmNaCkaCkaCkaCkaCkaCkaCkaCkaCkbRIaMMaKBbwqbwraKBaaaaFaaFaaFaaFaaFaaFaaFaaKsaMOaKsaKuaJnaKvaKvaKwaKvaIebpRbEobEsaMRbtKbsUbsobsnaKBbzzbzAbgfbmzbOTbzDbzFbOTcMVbQRbjlaaabPRbsqaLQbPVbPTbPVaLQbRcbSiaaaaxwbiBawnbQXaoaastasuasuasvaswastasuasxasyaoaaqLcSncNkcRzaqLaqLbrZaIEaJSaKRbAIbnbaIEaIFaKRaKRaJSbwNbAFbsGbsubswaIyaIyacaaIyaIyacfaCWaTNacjarNbAlbAkbDHbAmbzPbhxaAJbysaAObAMbpebALaLhbAKayiayjaAUbAJaadapBaaaaaaapBaaaaaaaaaaaaapBaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaacWwcWwcWwcWwcXQcWwcWwcWwcWwcXQcWwcWwcWwcWwcXQcWwcWwcWwcWwaaaaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajCaMIaObaMIajCbmNaJiaEUaCkaCkaCkaCkaCkaCkaCkbUcaOcaKBaqhbrTaKBaaaaFaaFaaFaaFaaFaaFaaFacdhaOecdhaOfaJnaKvaSpaSqaSraSsbKgaIebJraKAbvPbvzaOnbwuaKBbBBaYhbBwbmzbOTbBEbBFbRUcMVbTKbjlaaaaFsbTjbSraLQbTmaGYbRebRBaFsaaaaxwbAXatZbjwaChbKQaueaueaueaojaueauebAZbQtaoacTidtNdAubBabTobsLbBabBcbChbChbCebupbutbsRburbusbsQbsRbsMbsOaCWbtPauiauiaujauibuCauhaCWaQsbuParNbCrbCqbCpbCobCAbAibAbbzVbxfbBPaMDaMDaMEbBQayiaMGazDbDXaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXdDNbUobBHbBHbBHbzTbBHbBHbBHbBHbZMbBHbBHbBHbBHbzSbBHbBHbBHaXfcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaQNaPqaPraPsaQNbmNaCkaEUbVDbVXbVEaCkaCkaCkaCkbUcaEUaKBaqhbrTafUaaaaFaaFaaFaaFaaFaaFaaFaaPtaHWaPuaPvaJnaKvaKvaKwaKvaIebKgaIebKZaKAbyfbyebydbxcaKBasNaYhbDcdDRbTqbTCbTDbOTcMVbDfbjlaadaFsaFsaFsbCYaNlaNkaFsaFsaFsaadaxwbjuaIvblTaBQcbbaueaueaueaojaueauebCUaojaBQbkcdDPbCVbwLaIFbvtaIFaIEaJSaIFbDOaIFbwOaJSaKRaIFaKRaJSbDLbDMaCWbwmbwHbwIatebvCbwwbwmaCWbwxacjarNbWcaTgbDCbDBbDIbAVbDKbDJbDxbDyaAKaAKbDzayhayiayjaNYaaaaaaaadaaaaaaaaaaaaaadaaaaaaaNZaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXbtoaIlbDvbDrbDraFUbDrbDrbDrbDraJUbDrbDrbDrbDraFUbDrbDrbDsaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaQNbCLbCJbCZaQMbmNbueaEUaQPbJGbCdaEUaEUaEUbuwbDAbEmaKBbKdasdaKBaaaaFaaFaaFaaFaaFaaFaaFaaaaaaabpMaPvaQTaJoaJpbtAaSrbmXbopbozblLaPyaPyaPyaPyaPyaKBbsbbsgbshbsdbsdbrQbrRbrNbLjbHobHqaaaaaaaaaaFsaFsaSFaFsaFsaaaaaaaaabEdbEwbHvblTaChbroavlarPbmfaojaojbsDbsIaojaChbkcbsjbslbsmbsrbonbsrbsvbECboqbsrbsrbsrbsrbsrbsrbsrbsJbsPbuHaCWaCWaCWaCWapJaCWaCWaCWaCWavAacjarNbtdbtcbtcbtabsZbsVbsTbsSbtkbtlbvubtnbteawMawNaPoasPaaaaadaadaaaaaaaaaaaaaadaaaaaaaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXbtoaIlcCmaaaaaaaFUaaaaaaaaaaaaaJUaaaaaaaaaaaaaFUaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaQNaQNaSiaShaQNaQNaQNbvfaQNaQNbFublSaQNaQNaQNbFraQNaQNbFjavAaQNaaaaFaaFaaFaaFaaFaaFaaFaaaaaaaaZpbqlaJnaKvaKvaKwaKvaIeaJuaIebuKaPybrvbqdbmtbmOaKBasNaYhbtCbtDbtFbtrbtsbttbLlbtxbjlaTLbINaTLaNnbHwbukbqqaNnaTLbINaTLaxwbuhbwRbuiaoaaoaaoaaoaaoabtMbtUbufaojbrwaoabkcbtLbtHbuHaCZaCZaCZaCZaCZaCZaCZbuFbuGbuLbovbuBbuDaCZbuSbuSavAbuObYbbYbborbYbbYbbYbbYbbYbbuqarNaNLaNLaNLaNLbuvbuubwtbuybuVbuWbuUaAJbuTavEasPasPasPaadaadauBaQIauBauBauBauBauBauBauBauBbvBaadaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXbtoaIlcCmaaaaaaaFUaFUaFUaFUaFUaJUaFUaFUaFUaFUaFUaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaTpaZDbrsbIdaZfbsfbrsbtfbHybHrbHybHBbIebHybIjbInbIJbILbISaQNaaaaaaaFaaFaaFaaFaaFaaaaaaaaaaaZpbvgaJnaKvaKvaKwaKvaIeaTAbumbujbwKbtqbtjbxSbyyaKBasNaYhaYhaYhbjqbvMbvNbjlbsHbsabjlbSXbTHbNpaNnbvAaNpbvraNnbrFbIVbvdbIUbvebqFbuZbuYbuMbLGbrGaoaaoaazAbvGazvaoaaoabvDbvEbvFbvDaCZbwybJmbowboCboFavAavAavAavAbbOavAavAavAavAavAavAacjaUoaQsaJzaJzaJzaJzaJzaJzaJzaNLbvZbvUbvTaNLbEnbBLaNLbwabvObwtbwtbvQbvRbqNauybLcauyaScauBbirauBatLatMaSfatMatOauBbiratPauHaadaadaaEaakaakaakaaEaadaaEaakaakaaEaaEaakaakaakaaEaadaadaadaadaadaAXaNKbIiaLIaLIaLIaLIaLIavcavcavcbwpavcavcavcaLIbwsaLIaLIaLIbHdcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaXFbwBaUMaUMbMnaUMaUMaUMaUOaYbbMFbMEbKcbKcbKcbKnbLHaUQbyFaQNaaaaaaaadaadaaaaaaaaaaaaaaaaaaaZpbxlaJnaKvbVqbxaaGDbxgaGDbuAbqmbEzbGdbwnbBjbBzaKBbpHbxbbOSbITbxebuzbwXbvhbwbbsKbtOaVkcdbaVkbBNbBMaVsbziaVtaVkbJRaVvbwMaVxaVybuEaVAaVBaVCaVDaVDaVDbvbbpcaVDaVDaVHaVDbpbboQaVDboJaVDbwvboGavAbpTbpUbpVbpUbpUbqybpUbqObpUbqRbYbbYbbuqaThaQsaJzbxBbxJbxLbpSbxObxPaNLbzHbxpbxpbOdbxpbzIaNLbxubuVbzkaHoaHoaHoaHoaHoaRfasPaTnatMaToatMauGasPasPasPaTnatMauGatPasPaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaAXbtoaIlcCmaaaaFUatXatXayKbJjbJaaxxbJCbJjayLatXaGvaFUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadboibojaPBaWgaQNaTpaWhaTpbwBaUMaWLaWYaTpaWhaTpaZCaWlaWmaWnaKBaKBaKBaKBaWpaWqaWraKBaKBaKBaKBaZpaORaOUaOVaOSaOTaKvaOkaPzaOmaOlaPyaPyaPyaPyaPxaKBaKBaSuaKBaKBaWCaOQaOOaWKaMhaWWaWVaWKaMhaOFaOHaWWaOIaWKaWKaWKbbLaWNaOKaFTaITaIZaWSaWTaWKaWKaWKaWKaWUaOAaWKaWKaWVaWKaOBaWKaWKaWKaWKaLeaKLaVMaVMaVMapJaVMaVMaVMavAaKJavAacjavAavAaHUaHUaHUaHUaOyaOuaOuaOtaKdaOraNLaOdaOgaNXaQFaOjaUNaNLaNUaNSaNRaHoaUIaVZaNMaHoaNQasPasPasPasPasPasPasPaDUasPasPasPasPasPasQaadaaEaAXaAXaaEaAXaAXaAXaAXaaEaAXaAXaAXaAXaaEaAXaAXaAXaAXaAXaAXaAXaAXaNKaIlcCmaaaaFUatXaweaxqaCRaxtaxraxuaCRaxvaweaGvaFUaaaaMfaIlcCmaMbaMbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaULaadaaaaadaaaaXFbeNaXFaVgaVgaUTaVbaXFbeNboiaXKaQNaXLaVEaOaaXOaXOaXOaXOaXOaXOaXOaNJaXOaNmaNraNsaQSaKzaSbaSAaUPaNqaHfaNDaNEaHfaNNaKcaHfaOvaOxaOwaOLaOzaSWaUHaYpaNzaNCaNCaFSaFJaNHaNGaNeaNgaLNaUsaUsaUsaUsaUsaUsaUsaLsaYyaSYaSYaSYaSYaSYaSYaSYaSYaSYaUEaNiaTjaSYaNjaSXaSYaSYaLdaYGaUFaVMaJgaJVaJOaIXaIVaVMbxQaIPavAacjavAaaaaHUaINaIKaHUaMAaMHaMFaMyaMwaKaaNLaMTaMUaMVaMWaMPaQKaNLaMSaMoaQhaHoaSEaMkaMiaHoaHFaHFaHFaHFaHFaHFaHFaHFaHFaHFaHFaMpaMqaMpaMqaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaacXQaMcaIlcCmaaaaFUatXaNyawqatXawlawkawjatXawiaSCaGvaFUaaaaMfaIlcWuaaaaMbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaaaaULaWhaZhaSlaSlaSlaSlaZiaWhaULaaaaQNaZjaSeaZlaZlaZlaZlaZlaZlaZlaZlaZmaNaaHfaHfaHfaTwaTwaTwaHfaHfaNxaHfaTHaTFaTGaTDaTEaTvaTuaGRaGQaHdaTtaSWaRmaYpaRpaZNaZNaTRaZNaRoaZLaZLaRqaZLaYgaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXpaZTaZTaZUaZTaZTaZTaZTaZTaZTaEMaYpaRkaVMaXGaOsaOqaODaOCaVMbPMaThavAacjcgaaaaaQGaQHaQLaRaaNVaNIaNPaRdaRbaOpaNLaQxaQzaQwaQwaQBaQDaNLaQAaRgaQAaHoaRhaRjaXHaHoaRlasPasPasPasPasPasPasPasPasPbtpasPasPaRfasPaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaAXaQtaQraQoaUVaFUaFUaFUatXaTsawfavmatXatXatXauZavdaSHaGvaFUaFUaFUaUYaXfcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaQNaQNaSiaShaQNaQNaQNbvfaQNaQNbFublSaQNaQNaQNbFraQNaQNbFjavAaQNaaaaFaaFaaFaaFaaFaaFaaFaaaaaaaaZpbqlaJnaKvaKvaKwaKvaIeaJuaIebuKaPybrvbqdbmtbmOaKBasNaYhbtCbtDbtFbtrbtsbttbLlbtxbjlaTLbINaTLaNnbEXbukbHwaNnaTLbINaTLaxwbuhbwRbuiaoaaoaaoaaoaaoabtMbtUbufaojbrwaoabkcbtLbtHbuHaCZaCZaCZaCZaCZaCZaCZbuFbuGbuLbovbuBbuDaCZbuSbuSavAbuObYbbYbborbYbbYbbYbbYbbYbbuqarNaNLaNLaNLaNLbuvbuubwtbuybuVbuWbuUaAJbuTavEasPasPasPaadaadauBaQIauBauBauBauBauBauBauBauBbvBaadaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXbtoaIlcCmaaaaaaaFUaFUaFUaFUaFUaJUaFUaFUaFUaFUaFUaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaTpaZDbrsbIdaZfbsfbrsbtfbHybHrbHybHBbIebHybIjbInbIJbILbISaQNaaaaaaaFaaFaaFaaFaaFaaaaaaaaaaaZpbvgaJnaKvaKvaKwbKvaIeaTAbumbujbwKbtqbtjbxSbyyaKBasNaYhaYhaYhbjqbvMbvNbjlbsHbsabjlbSXbTHbNpaNnbvAaNpbvraNnbrFbIVbvdbIUbvebqFbuZbuYbuMbLGbrGaoaaoaazAbvGazvaoaaoabvDbvEbvFbvDaCZbwybJmbowboCboFavAavAavAavAbbOavAavAavAavAavAavAacjaUoaQsaJzaJzaJzaJzaJzaJzaJzaNLbvZbvUbvTaNLbEnbBLaNLbwabvObwtbwtbvQbvRbqNauybLcauyaScauBbirauBatLatMaSfatMatOauBbiratPauHaadaadaaEaakaakaakaaEaadaaEaakaakaaEaaEaakaakaakaaEaadaadaadaadaadaAXaNKbIiaLIaLIaLIaLIaLIavcavcavcbwpavcavcavcaLIbwsaLIaLIaLIbHdcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaXFbwBaUMaUMbMnaUMaUMaUMaUOaYbbMFbMEbKcbKcbKcbKnbLHaUQbyFaQNaaaaaaaadaadaaaaaaaaaaaaaaaaaaaZpbxlaJnaKvbVqbxaaGDbxgaGDbuAbqmbEzbGdbwnbBjbBzaKBbpHbxbbOSbITbxebuzbwXbvhbwbbsKbtOaVkcdbaVkbBNbBMaVsbziaVtaVkbJRaVvbwMaVxbLZbuEaVAaVBaVCaVDaVDaVDbvbbpcaVDaVDaVHaVDbpbboQaVDboJaVDbwvboGavAbpTbpUbpVbpUbpUbqybpUbqObpUbqRbYbbYbbuqaThaQsaJzbxBbxJbxLbpSbxObxPaNLbzHbxpbxpbOdbxpbzIaNLbxubuVbzkaHoaHoaHoaHoaHoaRfasPaTnatMaToatMauGasPasPasPaTnatMauGatPasPaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaAXbtoaIlcCmaaaaFUatXatXayKbJjbJaaxxbJCbJjayLatXaGvaFUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadboibojaPBaWgaQNaTpaWhaTpbwBaUMaWLaWYaTpaWhaTpaZCaWlaWmaVyaKBaKBaKBaKBaWpaWqaWraKBaKBaKBaKBaZpaORaOUaOVaOSaOTaKvaOkaPzaOmaOlaPyaPyaPyaPyaPxaKBaKBaSuaKBaKBaWCaOQaOOaWKaMhaWWaWVaWKaMhaOFaOHaWWaOIaWKaWKaWKbbLaWNaOKaFTaITaIZaWSaWTaWKaWKaWKaWKaWUaOAaWKaWKaWVaWKaOBaWKaWKaWKaWKaLeaKLaVMaVMaVMapJaVMaVMaVMavAaKJavAacjavAavAaHUaHUaHUaHUaOyaOuaOuaOtaKdaOraNLaOdaTwaROaQFaOjaUNaNLaNUaNSaNRaHoaUIaVZaNMaHoaNQasPasPasPasPasPasPasPaDUasPasPasPasPasPasQaadaaEaAXaAXaaEaAXaAXaAXaAXaaEaAXaAXaAXaAXaaEaAXaAXaAXaAXaAXaAXaAXaAXaNKaIlcCmaaaaFUatXaweaxqaCRaxtaxraxuaCRaxvaweaGvaFUaaaaMfaIlcCmaMbaMbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaULaadaaaaadaaaaXFbeNaXFaVgaVgaUTaVbaXFbeNboiaXKaQNaXLaVEaOaaXOaXOaXOaXOaXOaXOaXOaNJaXOaNmaNraNsaQSaKzaSbaSAaUPaNqaHfaNDaNEaHfaNNaKcaHfaOvaOxaOwaOLaOzaSWaUHaYpaNzaNCaNCaFSaFJaNHaNGaNeaNgaLNaUsaUsaUsaUsaUsaUsaUsaLsaYyaSYaSYaSYaSYaSYaSYaSYaSYaSYaUEaNiaTjaSYaNjaSXaSYaSYaLdaYGaUFaVMaJgaJVaJOaIXaIVaVMbxQaIPavAacjavAaaaaHUaINaIKaHUaMAaOgaMFaMyaMwaKaaNLaMTaMUaMVaMWaNXaQKaNLaMSaMoaQhaHoaSEaMkaMiaHoaHFaHFaHFaHFaHFaHFaHFaHFaHFaHFaHFaMpaMqaMpaMqaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaacXQaMcaIlcCmaaaaFUatXaNyawqatXawlawkawjatXawiaSCaGvaFUaaaaMfaIlcWuaaaaMbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaaaaULaWhaZhaSlaSlaSlaSlaZiaWhaULaaaaQNaZjaSeaZlaZlaZlaZlaZlaZlaZlaZlaZmaNaaHfaHfaHfbhAbhFbgeaHfaHfaNxaHfaTHaTFaTGaTDaTEaTvaTuaGRaGQaWnaTtaSWaRmaYpaRpaZNaZNaTRaZNaRoaZLaZLaRqaZLaYgaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXtaXpaZTaZTaZUaZTaZTaZTaZTaZTaZTaEMaYpaRkaVMaXGaOsaOqaODaOCaVMbPMaThavAacjcgaaaaaQGaQHaQLaRaaNVaNIaNPaRdaRbaOpaNLaQxaQzaQwaQwaQBaQDaNLaQAaRgaQAaHoaRhaRjaXHaHoaRlasPasPasPasPasPasPasPasPasPbtpasPasPaRfasPaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaAXaQtaQraQoaUVaFUaFUaFUatXaTsawfavmatXatXatXauZavdaSHaGvaFUaFUaFUaUYaXfcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAbaBbaCbaBbaDbaBbaBbaDbaBbaCbaEbaFaQNaZjaXabaHaMCbaJbaKaQkaQjaSGaZlaZmaPFaPVaPWaPQaPJaPQaPQaPSaPQaQCaHfaQVaQlaQqaQvaQyaREaReaSyaSnaRcaKTbbcaHiaQaaPZaZNaQcaIBaNFbaOaZLaTfaQdaTLaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaZTbdnbbCaURbflbdDbdpbdoaZTaWabbFbbGaVMaPdaMsaMraMtaPKaVMavAavAavAaudavAaaaaHUaPbaLiaHUaPeaMvaPhaPkaPjaMxaNLaPnaPpaPwaTbaPCaPDaNLbwtaPNbwtaHoaPMaPPaPOaHoaJqaJqaJqajCajcaaaaaaaaaaaaaadaaaaaaasPaMqasPaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcWwcWwaLKaOYaIlaOXaLLaaaaaaaFUaPaaEjaWZatXatXaSUatXatXbycaPAaOZaFUaaaaaabcgaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaabaAbaEbaBbcjbckbckbclbcmbcnbcobcpaGObckbcqbcraTpaZjaSeaROaRJaRFaRKbcxaRAbczbcAbaeaTlaHuaHtaHtaIaaIbaHIaHfaHfaHfaHfaHgaHraHsaHjaHqaGZaGXaGRaGQaHdaHbaHaaIHaYpbRAaZNaHHaIDaMeaIzaItaLPaIuaEFaadaadaHAaHBaHCaGMaZPaGWaHyaGMaZPaGWaGGaGGaFIaadaadaZTaICaLAbdqaIAbdqbdraSvaZTaIpaYpaHmaVMaVMaFAaFzaFyaVMaVMaHzaFBaVaaIkaVaaVaaHUaHUaHUaHUaJzaJzaJzaIhaFxaJzaNLaHMaHKaNLaNLaHJaHKaNLaHpaHvaHpaHoaHwaHlaHkaHoaHnaHxdBLdBvdBvdBKaaaaaaaaaaadaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaeaJJaJEaIqaJEaJTcCmaaaaaaaaaaFUaImaweaJBaJWbBfbBgaJQaJWaxsaweaGvaFUaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcqbecbedbeebckbefaEdbefaEdbefaEdbefbckbegbehaXFaZjaQUaZlaFGbekaQRbemaQEaFHaZlaXQaEcaFWaFXaGdaGiaGsaGyaGzaFmaFpaFqaFEaFKaFNaFPaFQaGBaGAaGFaGEaGIaGHaGNaHiaYpaRnaZNaGKaFwaYDaJPaZLaADaFdaTLaadaadaFhaKxaEEaDdaRibfaaxlbfcaAYaBmaECaJxaFraadaadaZTbfiaClbfkaGTaGLaDVaDzaZTaEMaGxaGwazgbfAaExbfAbfwayfaEwbfAbfAaEIaEKbfAayuaEDaFFbfAbfAbfAbfAayubfwaEKaELbfAaCSaFDaQuaTmaziaFLaFMaFnaFoaFnaOPaFlaFkaFnaFgbcebcedBCdBBdBzdBJaaaaaaaaaaadaacaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaaeaJJaJEaGbaJEaJKcCmaaaaaaaaaaFUaGfaGgayKaEiaFiaJMaweaEkaJLatXaGvaFUaFUaFUaFUckMcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaabaAbaEbaBbcjbckbckbclbcmbcnbcobcpaGObckbcqbcraTpaZjaSeaMPaRJaRFaRKbcxaRAbczbcAbaeaTlaHuaHtaHtaIaaIbaHIaHfaHfaHfaHfaHgaHraHsaHjaHqaGZaGXaGRaGQaHdaHbaHaaIHaYpbRAaZNaHHaIDaMeaIzaItaLPaIuaEFaadaadaHAaHBaHCaGMaZPaGWaHyaGMaZPaGWaGGaGGaFIaadaadaZTaICaLAbdqaIAbdqbdraSvaZTaIpaYpaHmaVMaVMaFAaFzaFyaVMaVMaHzaFBaVaaIkaVaaVaaHUaHUaHUaHUaJzaJzaJzaIhaFxaJzaNLaHMaHKaNLaNLaHJaHKaNLaHpaHvaHpaHoaHwaHlaHkaHoaHnaHxdBLdBvdBvdBKaaaaaaaaaaadaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaeaJJaJEaIqaJEaJTcCmaaaaaaaaaaFUaImaweaJBaJWbBfbBgaJQaJWaxsaweaGvaFUaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcqbecbedbeebckbefaEdbefaEdbefaEdbefbckbegbehaXFaZjaQUaZlaFGbekaQRbemaQEaFHaZlaXQaEcaFWaFXaGdaGiaGsaGyaGzaFmaFpaMLaFEaFKaFNaFPaFQaGBaGAaGFaGEaGIaGHaGNaHiaYpaRnaZNaGKaFwaYDaJPaZLaADaFdaTLaadaadaFhaKxaEEaDdaRibfaaxlbfcaAYaBmaECaJxaFraadaadaZTbfiaClbfkaGTaGLaDVaDzaZTaEMaGxaGwazgbfAaExbfAbfwayfaEwbfAbfAbfAaEKbfAayuaEDaMHaJGbfAbfAbfAayubfwaEKaELbfAaCSaFDaQuaTmaziaFLaFMaFnaFoaFnaOPaFlaFkaFnaFgbcebcedBCdBBdBzdBJaaaaaaaaaaadaacaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaaeaJJaJEaGbaJEaJKcCmaaaaaaaaaaFUaGfaGgayKaEiaFiaJMaweaEkaJLatXaGvaFUaFUaFUaFUckMcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfPbckbckbaCbckbefaEdbefbfQbefaEdbefbckbegbehaXFaQQaQpaZlbfSaQnaTzbfVaTzbaHbaHaNcaNvaNxaHfaNuaNfaNtaMXaMZaMKaMNaHfaIwaLWaMnaHjaLVaHfaLTaLqaKVaKUaKTbbcaIHaYpbRAaZNaLSaIoaSwaLMaZLbbRbbsaTLaZPaIIaZPaOEbgsbgwbgubgvbgtbgsbgubgwbgvaNAaZPaIIaZPaZTaYtaYtaYtaIxbgAaQbbgCaZTaPlaLZaLYaLbbgMbgMbgMbgObgMaLcbgMbgMbgMaKKbgMaLvaIjaLgaLfbgMbgMbgMaQmaIiaKKbgSaKMaKOaKQaKPaTmaFvaKWaKWaKZaLxaKWaKWaLzbbEaMjaLDbcebcedBsdBvdBvdByaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaddlJaaaaaaaaaaadaLLaLLaLKaLJaIlcCmaaaaaaaaaaFUaFUaImatXatXatXaTxatXatXatXatXaLHbwsaLGaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcqbhkbedbeebckbefaEdbefaEdbefaEdbefbckbegbehaXFbhlbhmbhnaKeaKbaJZaJZaKgaKfaKebcCaKiaKkaHfaKyaJwaJyaJNaKmaIRaISaHfaIfaHLaILaIOaIQaHfaKHaKNaKIaKFaKDaSWaKEbbFaKlbleblebleblebleaZLaHhaHcaKobhUbqxaPHaNhbgubgubgubguaDTbgubgubgubguaIgaBCaMBaZPaPXaJYaMabifbigaKjaPfaNoaZTaFCbilaKnazsbiwaFObiwaGjbiwaMYbiwbiwaIUbiwbiwaOGaKXbiwaIraIUaFObiwaOGaGjbiwbiyaIJaFOaIYaEuaJaaFjaJcaJdaJfaMjaJlaJlaJhaZbaFtaJqaTmaTmaTmajCaDZaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaJAaJvaJDaJCaJHaJFajeaJIaIlaFUaFUaFUaFUaFUaJXaLFaJXaJXaLwaLyaLwaMQaMQaNWaMdaMgaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiTbiUbaBbcjbckbckbiVbckbiWbiXbckbiYbckbcqbiZaULaZjbjabmsbbpbbrbbzbbtbbnbblbbpbmPbjkbaXaHfbiobiIbjebixaHfaHfaHfaHfaHfaHfaHfbjEaHfaHfbbcbbbbbabbhbbebbdbbiaYpaXoblebbjaVSbbkblebbybbqbjQaQZaZPbnHaZMbhBbjMbmSbjIbaSbjKbjIbjIbjLbjMbjNbjObnJaZPaZTaYtaYtaYtbljaYtaYtaYtaZTbmTaYpbahbkdbcTbcUbcTbkdaSaaSaaSaaSaaSaaSaavAavAbcSavAavAavAbdtavAavAavAavAbdmavAbddbdgaUSbdaaTCbcYbcVbhuaJlbcNbcRbcQaZbaSmaJqaTmbhsbcFbcLbcubcubctbcDaaaaadaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaJAbbSbbQaaaaadbbIbbHbfWbbBbhNbrKaJXbhibkYbhobhdbhhbhqaJXbofbmbbgNbinbnLbhWbhWbiuaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiTbaBbaCbaBbaDbaBbaBbaDbaBbaCbiUbkDaQNbiabkFbkGaSWbbTaYOaTaaYObbPaSWaZcaXYaZdbaibkXbizaYLaYMbkmbizbjJbkAbizbkEbkXaYNbkXbagaXZaYIaYFbkObkXbjYbibblcbRAaZoaVTaZsaYJbleaTLaTLaTLaTLaZPaQfbloblpblqbeoaQXbssboRbqzaQYblrblqblyblzaQeaPYaZTblCblDblEbigaPRaYtbijaZTbkhaYpaOMbaIbaGbaPbgibkdbawbazbfrbaubatbavaSRaQsbDEavAaUqaSRbasbWIbOoavAbWIbaravAbambaobapbaqbakbakbakbfqbfoaJlaJlbggbfnaPgbgabfYbeGbeybfRbfGbfGbfObfIbfEbfCbfEbfEbfCbfEbfEbfEbfEbfEbfEbfCbfEbfEbfEbfEbfEbfEbfCbfEbfFbfHbfGbfGbfGbeabdZbejbebbebberbfsbnhbcfbcibdSbdTbdUbdVbdWbdYbbWbbYbbZbcbbccbcdaYZaLIaLIbrJcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaTpaWhbmpaSlaSlaSlaSlbmqaWhaTpaaaaQNaZjbmrbruaSWbktbdKblPbdKbspaSWbsxbjxbfubmCbcXbrEbmDbmCbmCbfxboMbmGbmBbmCbmCbfvbmCbmCbmCbfzbfybmKbmKboXbBebdPbnUblebdQbtWbcBbleaSobdLbeiaSBbtIblrbmYbeobskbsYbvibndblGbndaSDboPboybvkbnjaTkaSZaZTboobnnbnobnpaTraZTaZTaZTaEMbnraWQbkdbgKbgJbgIbkdbgPbyHbgLbgrbvxbgkbgjbgHbgFbgEbgDbgZbhabgWbgYbhebhgbhbavAbddaYabgQaTmbgUbgVbogbjybgTbcZbgxbgcbmmaZbbafbadbkybjDcXlaaaaaabyhbbQaaaaadaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaUkbezbcDaaaaadaMfbfLbuobulbtzbtvbsXbrObwZbxnbwTbwVbsNbwSbvKbvLbsCbvJbvIbhWbvlbvsaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaTpaadaaaaadaaaaXFbzWaXFbpQbqcaVgbpAaXFbzWboibojaQNaZjbpxbpwaSWbqTbdKbdFbdKbpzaSWbpPbhVbdAbdBbosbmobkVbdwboxbdCbnCbosbosbosbosaWPbosbmnbohbkVbdvbosbosbnDboAboBbnUblebbubbVbbfboNbbfbbvbbfbbfbtIaRWaRZboLboLboLbszbppbeJbdEbsyboLboLboLaRNaRLaZPaZTblKboTboUboVboWaZTbbXaXNbaYbpaaWQbcTbeIbeObeMbkdbeRbtNbeSbjfaSaaSaavAavAbeHavAbOobeDbeEaQsavAavAbeFaRPavAbeAaYabeBaTmaJqaJqaJqaJqbeCaJqaJqaWRbjraZAaTmaTmbffbfebeUaaaaJAbqUaaaaaaaadaaaaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaUkbezbcDaadbeubesbqSbexbqKbtBaJXbrbbqfbqhbqvbqCbhXaJXbqpbpCbqeaMQbqkbqobhWbiuaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaTpaWhbmpaSlaSlaSlaSlbmqaWhaTpaaaaQNbyKbmrbruaSWbktbdKblPbdKbspaSWbsxbjxbfubmCbcXbrEbmDbmCbmCbfxboMbmGbmBbmCbmCbfvbmCbmCbmCbfzbfybmKbmKboXbBebdPbnUblebdQbtWbcBbleaSobdLbeiaSBbtIblrbmYbeobskbsYbvibndblGbndaSDboPboybvkbnjaTkaSZaZTboobnnbnobnpaTraZTaZTaZTaEMbnraWQbkdbgKbgJbgIbkdbgPbyHbgLbgrbvxbgkbgjbgHbgFbgEbgDbgZbhabgWbgYbhebhgbhbavAbddaYabgQaTmbgUbgVbogbjybgTbcZbgxbgcbmmaZbbafbadbkybjDcXlaaaaaabyhbbQaaaaadaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaUkbezbcDaaaaadaMfbfLbuobulbtzbtvbsXbrObwZbxnbwTbwVbsNbwSbvKbvLbsCbvJbvIbhWbvlbvsaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaTpaadaaaaadaaaaXFbzWaXFbpQbqcaVgbpAaXFbzWboibojaQNaZjbwJbpwaSWbqTbdKbdFbdKbpzaSWbpPbhVbdAbdBbosbmobkVbdwboxbdCbnCbosbosbosbosaWPbosbmnbohbkVbdvbosbosbnDboAboBbnUblebbubbVbbfboNbbfbbvbbfbbfbtIaRWaRZboLboLboLbszbppbeJbdEbsyboLboLboLaRNaRLaZPaZTblKboTboUboVboWaZTbbXaXNbaYbpaaWQbcTbeIbeObeMbkdbeRbtNbeSbjfaSaaSaavAavAbeHavAbOobeDbeEaQsavAavAbeFaRPavAbeAaYabeBaTmaJqaJqaJqaJqbeCaJqaJqaWRbjraZAaTmaTmbffbfebeUaaaaJAbqUaaaaaaaadaaaaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaUkbezbcDaadbeubesbqSbexbqKbtBaJXbrbbqfbqhbqvbqCbhXaJXbqpbpCbqeaMQbqkbqobhWbiuaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaboibojaPBaWgaQNaULaWhaULbtybrsbcybcMaULaWhaULaZDbrrbpNbkFbkGaSWaUUaSVaTaaSVaUUaSWbcWaXraXiaSWaTeaXmaTiaSWaSWaTcaSWbqabqaaXcbaLbaNaXcbqabqabqabqabqabqabqabqgbboaLBaWJaWIaXwaSTbdsaSTaPEaWFaPGbalbaWbcvbqtbbgbqtbqtbqubajbqwboLboLbdyboLbcObdcaZTbdGaRBbqAbdqbqBbdbaZTbdXaYtaEMbqFaLabkdbkdbkdbkdbkdaTTaTSaSaaSaaSabdJbdJavAaTUavAavAaUnbbNbbMavAaUqaTZaTXaTYaUhaUiaUbaUgarwarwarwarwapDbelaJqbhcaYsaYnbduaYvaYTaYzaYxbcuaYdaXqaadaadaadaadaadaadaaaaadaaaaadaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaddlJaaaaUkaUjaJCaUmaUlajeaLJaIlaFUaUraUpaYKaYRaYAaYEaJXaJXaWjaWzaXdaMQaMQbePaYYaPIaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaXFaZDbrsaZfaYXaZfbrsbrsbrtaQOaYbaYWaXMaXMaXMaXJaRzbryaRyaXVaRraRxaRwaRuaRtaRsaRraXnaTqaRIaUxaUxaUyaUxaUxbrSaRHaWDbqabwEaWEbrXbrYbscbqaaWwaWvbqaaWwaWvbqaaWAaYpbRAbleaVqaRGaONbleaOWaOoaNwaVpbtIaZuaZxboLaZnaXRaXSbssbssaYQaYUaXTaYmboLaWGaWdaZTaXBbsAbsBaXbaSIbsEbsFaTdaYtaEMbqFaJbaSaaTPaSdaTQaPcaRUaRYaRXaStaPmaSzaSxaPiaSjaJtavAavAavAavAavAavAavAaRPavAaRRaRSaRTbgXbiJaRQbiJbiJbiJbgXbgXbiJbiKaRMbiNbbAbcsaIMbiRbiSbgXbgXbgXaadaaaaaaaaaaadaaaaadaaaaadaaaaaEaaaaaEaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaAXaQtaIlcCmaSSaFUaZKaZOaZQaTJaTKaTVaTWaUuaUAaUKaVcaWcaLIaLIaSQaFUaFUckMcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaXFbwBaUMaUMbfUaUMaZyaUcaUeaUeaUeaUebiebhyaZSbcaaZEbiAbacaXjaKebgebhpbgRbhtaXeaXhaXgbbKbcJbaxbbJbltaZGaUxaYCaXlbrTbqaaYwaYqbrXbrYbscbqaaYobDDbqaaYobDDbqabqgaYpbRAblebleaYBblebleblebeXbeWaUGbleblublvblwbssbndbndbtQbtRbtSbtTbtTbcHbtVblQbmZblWbdqbtZbuaaZzbucbudaZTbhHaYtaYPbqFaRkaSaaPLbhYaRUaXsaRUbhZbcPaRUaRUaVXaXuaXzaXyaXxaXvaXPaXUaXAaXCbiiavAaRPavAaPTaYaaXWbgXaYkaYlaZVaYebncbgXbnfbabbdHbkuaVRbkabtubjCbjBbcwbjPbkCbgXaadaadaadaadaadaadaadaaaaaEaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcCmaaaaFUbnKboKbniaTJbfbbfJbdRbeqbfNbfXbfKaTJaFUaaaaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaXFbwBaUMaUMbfUaUMaZyaUcaUeaUebpxaUebiebhyaZSbcaaZEbiAbacaXjaKebqqbhpbgRbhtaXeaXhaXgbbKbcJbaxbbJbltaZGaUxaYCaXlbrTbqaaYwaYqbrXbrYbscbqaaYobDDbqaaYobDDbqabqgaYpbRAblebleaYBblebleblebeXbeWaUGbleblublvblwbssbndbndbtQbtRbtSbtTbtTbcHbtVblQbmZblWbdqbtZbuaaZzbucbudaZTbhHaYtaYPbqFaRkaSaaPLbhYaRUaXsaRUbhZbcPaRUaRUaVXaXuaXzaXyaXxaXvaXPaXUaXAaXCbiiavAaRPavAaPTaYaaXWbgXaYkaYlaZVaYebncbgXbnfbabbdHbkuaVRbkabtubjCbjBbcwbjPbkCbgXaadaadaadaadaadaadaadaaaaaEaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcCmaaaaFUbnKboKbniaTJbfbbfJbdRbeqbfNbfXbfKaTJaFUaaaaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaZhbojaQNaWgaPBaWgaQNckJaSlbxFaQNaWgaQNaQNaQNaQQaQpaKBaZwaKBaKBbuQbuRbuQaUXbuQbuQbuQbuQaUxaUxaZIaZFaUxaUxaUxacpbHMbqaaVebrVbrXaYibqabqaaVdbqabqaaUZbqabqabenaYpbRAbgzbgpbfgbeTbfpbeTbfgbfgbkSblsbdcbkrbqtbjZbndbvmbfdbvobvpbvqbfmbjmboLbjibjhaZTbvvbvwbdqbhQbhjbvyaZTaYjaYtaEMbqFaRkaSaaVNaVPaVOaVOaXIaVQaVOaRUaVUaVWaVVaRUaVXaRUaVYaVfaVhaVfaViaNdavAaRPavAaXkaVlaVnaUvaVoaVGaVIaVKbfjbgXaQiaZJaZRbmeaUdbjAbmhblXbmibmjbiObPGbgXaadbgXbgXbgXbgXbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcCmaaaaFUaZXaZZaZWaTJaYSaZgaZkaZqaZraZtaZvaTJaFUaaaaaacWwaOYaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfdzWbwgbwhaZjbwiaKBaRHbtwcnSbuQdLtbxHccRdLwdLudLvbuQcpocpocsUdJRdJYcsQaUxacpcbObqabwFbJpbrXbrYbrUcbNbrVbrUcbJcbFdJXaXcbqgaYpcaVbgzcsPcsMcsNcsOcsOcsOcsWcsTblsclWcnTaZPaZPaZPdLAdLydLzdLydLxaZPaZPaZPcmjclWaZTaZTbtYaZTaZTaZTaZUaZTcgSaYtcsScsRaRkcjqcjscjscjsaUzcjscjtcjsaRUaRUcjxaXuaVUcsVchpchYcimdIGcimcidciYavAaRPavAdLBaVlcjdaZBcjhblXbnYcjpcjHcjLcjybnPbnQbnRaUdbnSbnTaYcbgdbnXbnWcnVcsXbVZbWjbocbodbodbgXaadaaaaRDaaaaRCaaaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcCmaaaaFUaFUaFUaFUaTJcoIconcpubfNcrjcpRcrqaTJaFUaaaaMfdIJbBHdLCcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbxDbxEbxFaZjbxGaKBacpbWqcmDbuQchIbxHccRbWmchLdLqbuQdKkdJVcnjdJTaUxaUxaUxacpaKSbqabXybXnbrXbrYbrXbrXbrXbrXbrXbtEbrXbaLcdicbhcrHcrCcrucrAcrucrucrucrAcrucsaciachmcfXchocrUcrMcrIcrIcrNcrJcrIcrLcrKcivckxclEclFcrMcrMcipcrMcsocsqcrMcsrcsccsmbyDaWQchWaRUaRUaRUaRUaRUaRYaRUaRUaVXaRUaXuaVUclLchpchYcimcigaXUcidcnUavAaRPavAbnFciqbeBaUvcirblXblYblXcitciubmcbksbmdbpyaYfbnIbpBbmgbmlbmkblbciybUiaadbNCbpJbodbpKbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcCmaaaaaaaaaaaadIDbUtbMUbMUdICclMdICbMUbMUaSOaLGaFUaFUckMdIEciNaaaaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfcjrdzTcjraZjdHpaKBcmCbNSbGxbuQcfmbxHccRbxHbxHchQbuQaUxdJPaUxdJRdJQcrkaUxacpbrTbqabwFbJpbXibWUbvabvabvabvabvacbPbvabeYboAcqVcqZcrecbrcbscbrcbtccxcqNcqMbZVbZUbZYcqRcqncqOcqncqmcqmcqkcqJcqmcqpcqocpQcpScpNcpOcqdcqjcpVcqccpxcpBcprcpscpHcpMcpEbZSchlcdpchnchdchdchechkaRUaVUaVWchpaXuaVUcfTchpchqcfZcdccgzcgccfUdKTcfWavAbpqcgQcgYcgUcgLcgBcgOcgMdKrcfHdIuaVFaUWaVjaVmaVzaYcaWHbrjaVLaYVcfMbHWbQYbRbbrqbodaPUbgXaadaacaRDaaaaRCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcXPcWwcWwaaaaaaaJUdIvcnIdIwbHidIybHidIzcnOdIAaJUaaaaMfaIlcCmaMbaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbADbAEbxFaZjdCHaKBcmvaKBaKBbuQdBDdCAdBrbxHbxHbxHbuQdJOdJNaUxaZeaUxaUxaUxacpahccdabrVbrVbtEbZfbzobrVbrVbrVbrVcpnckVaXcbqgbWCbnUbSAbSAcdebSAcddbSAbSAbBqbBqccSbUhbBqcpmblscoNcoMcoPcoOcpacoMcphblscpmbCGbCGcdkccWbCGbCGbDRcdycdrbCGcdlcBKcmYbBybYHcdQbzecdKcdNcdAcdEcdncdpcdpcepcdpcejcdpcdTcdpcdSceFceCceycewcesavAbxhavAcfjcfhcfebiRceYcePceMceGbiRbiScdfaSkbmjbsWaYraRVaTIaTyaTIaTyaTOcdgcdmaadbgXbgXbgXbgXbgXaadaaaaRDaaaaRCaaaaRDaakaaEaadaaEaakaakaaEaaEaakaakaakaAXaAXaAXaAXaQtdLmbBHbBHcppajeajeaJUcDBcdOcdVcLMclMcLMcdVcdOdAZaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfdzWaULbwhaZjbyVaKBacpaKSaUDbuQdLZccRbCfcnlchQbxHbuQdKmctXaUxdKkdKjctWaUxacpbrTbqabETbETbtEbrYbwDbwDbwEclmbwFckWbqabqacdibCwcaVbSAcllckrckIcjYcnhcbicNedLYcvOckLbBqaadcufcutcoMcoMcuscoMcoMcuqcugaadbCGdLXdvNdvOdvTbCGbCGbCGbCGbCGcPEcBKcmYbCObqGaSaduvchPcjsbAecnJcjscjschPaXubAdaRUaRUaRUaRUcnQcimcnCcnFcnDcnHavAbxharNcntcnocnubiNcnycnvcnBcnzbiPcohbuxbdNbepbevbevbeZbgqbghbgdbfZbfMcltbHnbVZbWjbuIbuJbuJbgXaadaadaWsaadaWuaadaRDaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaAXaaadEnbDrbDsaIlcCmaaaaJUdJlcdOcdOcdOdJkcdOcdOcdOdJjaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaddLWbojaQNaWgaPBaWgaQNckJaSlbxFaQNaWgaQNaMLdAbbZmbAGcfodnUarXagvbuQcmJcmsbCfcmtbDqbEHbuQaUxaUxaUxaUxaUxaUxaUxacpbrTbqacmpctHbtEbrYbrVbrVcckbrVbyabybbqacjbbqgaYpcaVbSAbDQcgscgxcgCcmqcbicgFcgGcgHcgDcgEaadctIctNctKctJbzvctKctJctMctLaadckDcjWdLVdLSdLTdLUcvxcPCcOKbCGcgVcBKckKbEhbEibEjbEjbEjcmEcmKbEjcmGcmGbEjcmybEjcLicLjcLlcnJcmBbnAbjScmVbjSbjSavAbxhciocvZcvYciobgXbgXbgXbgXbgXbiMbiNcmWaZYcneblXbvVbvWbvXbvYbnTbbmbanbMhbUiaadbNCbwcbwdbwebgXaadaaaaRDaaaaRCaaaaWtaAXaAXaAXaAXaaEaAXaAXaAXaAXaaEaAXaadaaEaAXaAXaAXaAXaAXaMfaIlcCmaaaaJUceTdJgdJfcdOdJecdOdJddJcceIaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaXFaZDbrraZfaZfaZfbrsbrsdLQbrsbrsbrsdLPbrrbrsbpNcuPaKBaZmbHMaqhbuQclnclobxHbxHbxHcljbuQbzmasdarnctrdKedKhaKBacpbMbbqabCtbEYbtEbrYbwCbwCbwGbrVbrVcnkbqacgbbqgaYpcfPbSAcdGcefceqchgceecbiceAcetceuceNbBqcfsbFmcfsbFmbFmbFnbFmbFmcfsbFmcfsbCGcjobJPchRchTdLMcicchNchAbCGcgVcBKdLNbqFbqGbEjcmhcmobFCbFBclZcmacmaclSclYbEjbEjbEjbEjbEjbEjbEjbjSclOclNbgbavAbxhciocvRcuUcvXciodIYctCaQsaSRbgXbxqcfKcfJcfNcuQbxvbxwbxxbxychHbbmcficcCbHWbQYbRbbxCbuJcfVbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMbaQtctBaLIaLIdIUaLGdIWdIVcdOdIXcdOdISdITdIDdIUaLIaLIctwcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfdzWbwgbwhaZjbwiaKBaRHbtwcnSbuQdLtbxHccRdLwdLudLvbuQcpocpocsUdJRdJYcsQaUxacpcbObqadABbJpbrXbrYbrUcbNbrVbrUcbJcbFdJXaXcbqgaYpbRAbgzcsPcsMcsNcsOcsOcsOcsWcsTblsclWcnTaZPaZPaZPdLAdLydLzdLydLxaZPaZPaZPcmjclWaZTaZTbtYaZTaZTaZTaZUaZTcgSaYtcsScsRaRkcjqcjscjscjsaUzcjscjtcjsaRUaRUcjxaXuaVUcsVchpchYcimdIGcimcidciYavAaRPavAdLBaVlcjdaZBcjhblXbnYcjpcjHcjLcjybnPbnQbnRaUdbnSbnTaYcbgdbnXbnWcnVcsXbVZbWjbocbodbodbgXaadaaaaRDaaaaRCaaaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcCmaaaaFUaFUaFUaFUaTJcoIconcpubfNcrjcpRcrqaTJaFUaaaaMfdIJbBHdLCcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbxDbxEbxFaZjbxGaKBacpbWqcmDbuQchIbxHccRbWmchLdLqbuQdKkdJVcnjdJTaUxaUxaUxacpaKSbqabXybXnbrXbrYbrXbrXbrXbrXbrXbtEbrXbaLcdicbhcrHcrCcrucrAcrudzQcrucrAcrucsaciachmcfXchocrUcrMcrIcrIcrNcrJcrIcrLcrKcivckxclEclFcrMdAlcipcrMcsocsqcrMcsrcsccsmbyDaWQchWaRUaRUaRUaRUaRUaRYaRUdAraVXaRUaXuaVUclLchpchYcimcigaXUcidcnUavAaRPavAbnFciqbeBaUvcirblXblYblXcitciubmcbksbmdbpyaYfbnIbpBbmgbmlbmkblbciybUiaadbNCbpJbodbpKbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcCmaaaaaaaaaaaadIDbUtbMUbMUdICclMdICbMUbMUaSOaLGaFUaFUckMdIEciNaaaaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfcjrdzTcjraZjdHpaKBcmCbNSbGxbuQcfmbxHccRdwwbxHchQbuQaUxdJPaUxdJRdJQcrkaUxacpbrTbqabwFbJpbXibWUbvabvabvabvabvacbPbvabeYboAcqVcqZcrecbrcbscbrcbtccxcqNcqMbZVbZUbZYcqRcqncqOcqncqmcqmcqkcqJcqmcqpcqocpQcpScprdxwdxzcqjcpVcqccpxcpBcprcpscpHcpMcpEbZSchlcdpchnchdchdchechkaRUaVUaVWchpaXuaVUcfTchpchqcfZcdccgzcgccfUdKTcfWavAbpqcgQcgYcgUcgLcgBcgOcgMdKrcfHdIuaVFaUWaVjaVmaVzaYcaWHbrjaVLaYVcfMbHWbQYbRbbrqbodaPUbgXaadaacaRDaaaaRCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaWBcXPcWwcWwaaaaaaaJUdIvcnIdIwbHidIybHidIzcnOdIAaJUaaaaMfaIlcCmaMbaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbADbAEbxFaZjdCHaKBcmvaKBaKBbuQdBDdCAdBrbxHbxHbxHbuQdJOdJNaUxaZeaUxaUxaUxacpahccdabrVbrVbtEbZfbzobrVbrVbrVbrVcpnckVaXcbqgbWCcMJbSAbSAcdebSAcddbSAbSAbBqbBqccSbUhbBqcpmblscoNcoMcoPcoOcpacoMcphblscpmbCGbCGcyjccWbCGbCGbDRcdycdrbCGcdlcBKcmYbBybYHcdQbzecdKcdNcdAcdEcdncdpcdpcepcdpcejcdpcdTcdpcdSceFceCceycewcesavAbxhavAcfjcfhcfebiRceYcePceMceGbiRbiScdfaSkbmjbsWaYraRVaTIaTyaTIaTyaTOcdgcdmaadbgXbgXbgXbgXbgXaadaaaaRDaaaaRCaaaaRDaakaaEaadaaEaakaakaaEaaEaakaakaakaAXaAXaAXaAXaQtdLmbBHbBHcppajeajeaJUcDBcdOcdVcLMclMcLMcdVcdOdAZaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfdzWaULdAbaZjdALaKBacpaKSaUDbuQdLZccRbCfcnlchQbxHbuQdKmctXaUxdKkdKjctWaUxacpbrTbqabETbETbtEbrYbwDbwDbwEclmbwFckWbqabqacdibCwcaVbSAcllckrckIcjYcnhcbicNedLYcvOckLbBqaadcufcutcoMcoMcuscoMcoMcuqcugaadbCGdLXdvNdvOdvTbCGbCGbCGbCGbCGcPEcBKcmYbCObqGaSaduvchPcjsbAecnJcjscjschPaXubAdaRUaRUaRUaRUcnQcimcnCcnFcnDcnHavAbxharNcntcnocnubiNcnycnvcnBcnzbiPcohbuxbdNbepbevbevbeZbgqbghbgdbfZbfMcltbHnbVZbWjbuIbuJbuJbgXaadaadaWsaadaWuaadaRDaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaAXaaadEnbDrbDsaIlcCmaaaaJUdJlcdOcdOcdOdJkcdOcdOcdOdJjaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaddLWbojaQNaWgaPBaWgaQNckJaSlbxFaQNaWgaQNaQNaQNbZmbAGcfodnUarXagvbuQcmJcmsbCfcmtbDqbEHbuQaUxaUxaUxaUxaUxaUxaUxacpbrTbqacmpctHbtEbrYbrVbrVcckbrVbyabybbqacjbbqgaYpcaVbSAbDQcgscgxcgCcmqcbicgFcgGcgHcgDcgEaadctIctNctKctJbzvctKctJctMctLaadckDcjWdLVdLSdLTdLUcvxcPCcOKbCGcgVcBKckKbEhbEibEjbEjbEjcmEcmKbEjcmGcmGbEjcmybEjcLicLjcLlcnJcmBbnAbjScmVbjSbjSavAbxhciocvZcvYciobgXbgXbgXbgXbgXbiMbiNcmWaZYcneblXbvVbvWbvXbvYbnTbbmbanbMhbUiaadbNCbwcbwdbwebgXaadaaaaRDaaaaRCaaaaWtaAXaAXaAXaAXaaEaAXaAXaAXaAXaaEaAXaadaaEaAXaAXaAXaAXaAXaMfaIlcCmaaaaJUceTdJgdJfcdOdJecdOdJddJcceIaJUaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaXFaZDbrraZfaZfaZfbrsbrsdLQbrsbrrbrsdLPbrrbrsbpNcuPaKBaZmbHMaqhbuQclnclobxHbxHbxHcljbuQbzmasdarnctrdKedKhaKBacpbMbbqabCtbEYbtEdAHbwCbwCbwGbrVbrVcnkbqacgbbqgaYpcfPbSAcdGcefceqchgceecbiceAcetceuceNbBqcfsbFmcfsbFmbFmbFnbFmbFmcfsbFmcfsbCGcjobJPchRchTdLMcicchNchAbCGcgVcBKdLNbqFbqGbEjcmhcmobFCbFBclZcmacmaclSclYbEjbEjbEjbEjbEjbEjbEjbjSclOclNbgbavAbxhciocvRcuUcvXciodIYctCaQsaSRbgXbxqcfKcfJcfNcuQbxvbxwbxxbxychHbbmcficcCbHWbQYbRbbxCbuJcfVbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMbaQtctBaLIaLIdIUaLGdIWdIVcdOdIXcdOdISdITdIDdIUaLIaLIctwcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaXFbwBaUMaUMbfUaUMaUMcumdLIdLHaUeaUeciMcihcgRdLLdLKaKBaZmbMeaqhbuQdLwbGabxHbxHbGabxIbuQdKddKcagSarXagvdKeaKBacpctmbqacjUbxXckacjZbrVccDckdckcctncdtbqacdFbqgaYpcdIbSAcbRbFvdLGcgJcbicbicbUcbXcdPctZbBqctcctactdbGzbGAbGBdLDclGcticthctlbCGdLEbJPcgndLFbCGcglcgXcgWbCGcgVcBKcjGbqFceXcktckubGRckqbOlbGVbFCbFCbVackobEjbMoceWcffceWbIzbEjckSckRcoGckNavAbxhciocuOcuNcuMcioaQsaQsaQsckFbgXbxqceHcerbiJbiJbiJbyTblXckjblXbbmcbGbMhbUiaadbgXbgXbgXbgXbgXaadaaaaaEaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaIlcCmaaaaaaaJUcuucdOcdOcisdINciwcunaJUaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaZhbmqceQaTpaQNbuNbojaQNaWgaQNbuNbojaQNaQNccNaQNaQNaKBaZmbMbaqhbuQbxIbWkbHzbxHbHzclybuQdJKbrTbrTaKSbxMbrTaKBacpbHMbqabqabMvbMDbMwbMvbqabqabqabqabCubqabqabGobbFbNwbSAbKsbFvbKkbVpbJQcbibNvbNhbNubMQbBqcNNcNObIfcLFbIgbIfcLLbIfciQcMqcMUbCGbHEbJPbLubLDcNLbWxbWnbWpbCGbQWcBKbXkbqFbqGbUXcwybLzbLEcMTbUZbFCbLzbVadJJbEjbEQbHacchbHabIzbEjbbwbPsbPrbPvbVmbVtciocjPciSckwcioapCdJCckCcfYbgXbArbZqbZpbVWbiJbAvbxyblXbxwbOybOzccZcltbHnbVZbWjbAAbABbACbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaIlcCmaaaaaaaJUbVscmNcmObYzcmUcmRbVsaJUaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaXFbeNaXFaaaaaaaaaaadaaaaaaaaaaadaaaaKBbUwarXbUxbUybyObUycfwbuQbuQbuQbuQbUvbuQbuQbuQdJGbMebHMbrTbUAbQsaKBacpciAbqabKRbKPbKObHPbHgbKMbKfbqabKNbJYbJWbqabqgaYpbWgbSAbDQbFvbGCbHxbDQcbibJSbIocMCbJObBqcincaycxwcfLcgNbWQcfEcyvbJHbJIdJHbCGbFsbGIbPJbGNcMBbUQbUCbUNbFpbEFcBKbUBbqFbqGbTObTRbTNbTNcdxbIAcdubUbbUdcdzbEjcMybHacftbKbbIEbEjbyicfFcQmbTlavAbxhciociociociociocluaQsaQscelbgXbArbZqbZpbUebBXbAvbBYbnTbxwbAwbbmcaObMhbUiaadbNCbCabCbbCcbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaIlcCmaaaaaaaJUclBbMUbZtciJbZFbMUclCaJUaaaaaaaMfaIlcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaULceQaULaadaadaadaadaadaadaadaadaadaKBbSFaXOaXOaXOaXlbrTaqhbHMaUDbtwbrTaDnccJbMbaKBaKBaKBaKBaKBbTcaKBaKBbSYaKSbqabHHbHSbHRbHRbHPcekbTfbqabFccgibFabqaaWAaYpbUjbSAbDQbTdbEfbTedJFcbibDlcKpcJWbBqbBqcegcdDbLdcdjccMccLcdvcdscuhcdqceibCGbEadJDbDYdJEcLZbSIbSIcKwbCGbGYcBKbSJbqFbqGbEjbRfbRjbRybFCbRcbRebOlbRYbRZbSbbScbRBbRCbRMbRSbEjbjSbjSbjSbjSavAbxhavAcxnckFaQsaQsaOhaThckEaQsbgXbgXcfpaSkbAubiJccgbDhblXbDibOybbmchBccCbHWbQYbRbbDkbABcPDbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaQtckGaFUaFUaFUaLHaLIaLIaLIbwsaLIaLIaLIaSQaFUaFUaFUckMcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaULceQaULaadaadaadaadaadaadaadaadaadaKBbSFaXOaXOaXOaXlbrTaqhbHMaUDbtwbrTaDnccJbMbaKBaKBaKBaKBaKBbTcaKBaKBbSYaKSbqabHHbHSbHRbHRbHPcekbTfbqabFccgibFabqaaWAaYpbUjbSAbDQbTdbEfbTedJFcbibDlcKpcJWbBqbBqcegcdDbLdcdjccMccLcdvcdscuhcdqceibCGbEadJDbDYdJEcLZbSIbSIcKwbCGbGYcBKbSJbqFbqGbEjbRfbRjbRybFCcpOcqdbOlbRYbRZbSbbScctObRCbRMbRSbEjbjSbjSbjSbjSavAbxhavAcxnckFaQsaQsaOhaThckEaQsbgXbgXcfpaSkbAubiJccgbDhblXbDibOybbmchBccCbHWbQYbRbbDkbABcPDbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaQtckGaFUaFUaFUaLHaLIaLIaLIbwsaLIaLIaLIaSQaFUaFUaFUckMcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaKBaKBaKBaKBbQsbxRaXObQhbKtbQlbKtbKtbKtccabKtbKtbKtbKtbKtbKtbQVbKtbJibQUbrTbqabEZbFtbFqcdMbJpbERbEybqabqabqabqabqabAWaYpcaVbSAbSAbQTbQTbQTbSAbSAbBqbBqcEbbBqbBqcCLcCxbMGcCLcDccDccDccCxbMIcCLcCxbCGbCGbCGbCGbCGbCGbQQbQQbQQbCGbCNcBKbSzbqFbNWaZLbMNbMNbMNbPZbMNbMNbPWbMPbMNbMNbMNbMNbEjbCSbQfbEjbOobPMbEqaQsbLLbLMavAckCckzckyaQsaOhaQsaQsbWIbgXbPIbmcbPLbiJbiJbiJcdLblXbEDbEEbbmcbGbMhbUiaadbgXbgXbgXbgXbgXaadaadaWtaadaWuaadaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaIlcCmaaaaaaaaaaaaaaaaaabQgaaaaaaaaaaaaaaaaaaaMfaIlcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaKBaKBbzdccPaWoaKBccQaKBaKBaKBcoLbYwbYwbYwbYwbYwbYwbYwbrTbZwaQWbVBbqabVwbUaccebTnbJpbHPbWoccfbVFbtwaKBcbQbqgcorbYeccrccnccicciccicclcdoccrdBiccidAScosccrccrcoycowcowcowcoxcowcovccccccccKcoEbXwcfSdBoccocciccicciccObTzcccccmbqFciechbcbobWDbWEbXWbXZbYFbYGbVlbVrbVubVxbVybEjcbecbjcbWbzcbvHbRPasMbLMaQsavAavAavAavAavAcAkcxnbgXbgXbgXccbbmcaSkbFPbFQcoqbnIbFSbFTbFUbOzchXcltbHnbVZbWjbFWbFXbFXbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaIlcXPcWwcWwcWwcWwcWwcWwbQgcWwcWwcWwcWwcWwcWwaOYaIlcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaKBaKBbzdccPaWoaKBccQaKBaKBaKBcoLbYwbYwbYwbYwbYwbYwbYwbrTbZwaQWbVBbqabVwbUaccebTnbJpbHPbWoccfbVFbtwaKBcbQbqgcorbYeccrccnccicciccicclcdocxTdBiccidAScosccrccrcoycowcowcowcoxcowcovccccccccKcoEbXwcfSdBoccocciccicciccObTzcccccmbqFciechbcbobWDbWEbXWbXZbYFbYGbVlbVrbVubVxbVybEjcbecbjcbWbzcbvHbRPasMbLMaQsavAavAavAavAavAcAkcxnbgXbgXbgXccbbmcaSkbFPbFQcoqbnIbFSbFTbFUbOzchXcltbHnbVZbWjbFWbFXbFXbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfaIlcXPcWwcWwcWwcWwcWwcWwbQgcWwcWwcWwcWwcWwcWwaOYaIlcXlaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaaacnwcixbzacoBcnwbrTcaYbrTdAcaKBcolbYwcnXcnAcnscnrcngbYwbrTbHMaQWbHMbqabqabqabqabqabqabqabqabqabQSbHMaKBcijbqgbOUbOVaWKaWKaWKaWKaWKaWKaWVaWKbPjbOXaWXaWWaWKaWKbOYbOZcojbPbbPcbPdbPebPfaWKaWKcaXbPhaWKaWKaWVaWKaWKaWKaWKbSRaWKbPjcnYcfzcfycawbUmbUnbFFbFFbFFbVcbUkbFFbFFbTJbUlbEjdvYdAacatcarcaoaUobWIbOnbQMaUobOocasbZiavAbvSavAbgXcmLcaxcaKcaMcaUchfchfchfaVzblXblXblXbbmcgTbMhbUiaadbNCbHsbHtbHubgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaMfdvMbBHbBHbBHbBHbBHbBHbBHcmAbBHbBHbBHbBHbBHbBHbBHdvJcCmaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaacnwclJbyZcifcnwbrTdJybrTaKBaKBdACbYwcjBclDctGclUdKGbYwavabrTbZAbKtbKtbKtbKtbKtbZDbZEbZEbZEbZEbOMbOSdokcQabTPclHbQdbQcbQebZXbQdbQdbQdchGbQdbTUaVCbUgbQiaVCaVCbRqbQkbRQbQmbQnbQobQpbQqaVCbZnchccgZcgZchacdUchachachachiclAbRXckbchhbSaceVceUbTabTbbNAbNAbJZbNAbSjbNAbNAbSZbShbMNbMNbMNbMNatJbasaUoaUoaUoaUoaUobZeasMasMckPcqWbYxbZdbYybYpbYubYkbYmblXblXblXblXblXbnTblXbbmccjccCcksbQYbRbbIPbFXbUSbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaabDrbDrbDrbDrbDrbDrbDrbDrcpvbDrbDrbDrbDrbDrbDrbDrbDraaaaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaEaadaaEaAXaadcnwcqedzMbyYcnwbVBbrTbrTaKBcjKcvobYwcjwcpqcjucjncuSbYwbYwbYwbYwbYwbYwdJpbYwbYwcjIbYcbYdbHMbMebrTbMbaKBaKBaZLaZLaZLaZLaZLaZLaZLaZLaZLaZLdJMbRwbRwcezceDbRwcNWbRwcjmcbDbqFcbBcbCbRDcTgbRDbXDcexbRDbRDcjlaZLbSXbNpbNpciTaZLcaebMNcevbROcevbMNbQGbRabNAbNAbQFbNAbQEbNAbNAbQDbPNbMNbOjbOkbQjbyQbXlasMasMasMasMasMbXfbWTbMicjjbMibMibiNbRhbWLbWMblXbWHbevbevbevbevbevbWGblXbbmcbGcjibgXaadbgXbgXbgXbgXbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMbaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaacnwclJbyZcifcnwbrTdJybrTaKBaKBdACbYwcjBclDctGclUdKGbYwavabrTbZAbKtbKtbKtbKtbKtbZDbZEbZEbZEbZEbOMbOSdokcQabTPclHbQdbQcbQebZXbQdbQdbQdchGbQdbTUaVCbUgbQiaVCaVCbRqbQkbRQcxPbQnbQobQpbQqaVCbZnchccgZcgZchacdUchachachachiclAbRXckbchhbSaceVceUbTabTbbNAbNAbJZbNAbSjbNAbNAbSZbShbMNbMNbMNbMNatJbasaUoaUoaUoaUoaUobZeasMasMckPcqWbYxbZdbYybYpbYubYkbYmblXblXblXblXblXbnTblXbbmccjccCcksbQYbRbbIPbFXbUSbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaabDrbDrbDrbDrbDrbDrbDrbDrcpvbDrbDrbDrbDrbDrbDrbDrbDraaaaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaEaadaaEaAXaadcnwcqedzMbyYcnwbVBbrTbrTaKBcjKcvobYwcjwcpqcjucjncuSbYwbYwbYwbYwbYwbYwdJpbYwbYwcjIbYcbYdbHMbMebrTbMbaKBaKBaZLaZLaZLaZLaZLaZLaZLaZLaZLaZLctQbRwbRwcezceDbRwcNWbRwcjmcbDbqFcbBcbCbRDcTgbRDbXDcexbRDbRDcjlaZLbSXbNpbNpciTaZLcaebMNcevbROcevbMNbQGbRabNAbNAbQFbNAbQEbNAbNAbQDbPNbMNbOjbOkbQjbyQbXlasMasMasMasMasMbXfbWTbMicjjbMibMibiNbRhbWLbWMblXbWHbevbevbevbevbevbWGblXbbmcbGcjibgXaadbgXbgXbgXbgXbgXaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMbaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaacnwbLKcracrbcnwaKBaKBaKBaKBbYwcvobYwbSnbSobSpbSqbSkbYwbSlbSmbRKbYwbRRbQLbREbYwczGbYwbYwbYwbYwbYwbYwbYwbRzbRpbRxbRlbRnbRmcxLbQZbRkbRicxLbUIbXObUIbXRbXQbUIbXObUIbYIbMzbSKbMSbRLcwbbSNcwbbLObYKcwbbSNcwbbRLbPObPObPObPObPOcpcbMNbFxbEMbFFbFFbNybJZbNAbNAbJZbNAbJZbNAbNAbNHbNZbMNbBpbPwbMNatJaTZbMibMibMibMibMibMibMjavAbSBbSCbSCbgXbXNbLVbLTbLRbLQbnTblXblXbWHbevbLXchHbbmbMgbMhbgXaadaadaadaadaadaadaadaadaWsaadaWuaadaWtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaaaaabMqbMrbMrbMtbMsbMBbMAaaaaadaaaaaaaaabYwcvobYwbYwbYwbYwbTwbYwbYwbTtbTubTtbYwbYwbYwbYwbYwbTicjvbYwcdYbxmbUJbxkbUGbUFbUubUEbUubTQbTIbTEbTycwvbTxbSObThbSxbYWbNYbPQbYWbYTbSGbXObTLbTSbTTbSNbPSbTVbTWbTXbZIbTWbTVbTZbSMbPObZKbYZbZLbPObWwbMNbOgbOabOObzpbOhbJZbPmbzpbzpbzpbPnbzpbzpbzpbPpbPobUpbUpchScpjaQsaUobULbNaavAavAavAavAavAbUMbVGbVObgXbVjbMKblXblXbxwbMLbnXbnXbMRbMTbMRbnXbMYbMZbMhbgXbgXbgXaadaaaaaaaaaaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaabIWaaaaadbKmbKjbKjbKeaadaadaadaadaadbYwbGbbFZbKYbYwbLabLebZbbYwbLgbLhdJrbKubKzbQLbKHbYwbKIbuXbIHbIhbxjbIZbKabJEbKpbXxbZabYYbGybGvcxLcxLbHjbGFbLibLybMabWdbEObWibWhbKGbXsbXEbTLbTSbTTbVebVfbVgbVhbKqbWSbVkbVkbFwbFybTkbSgbRJbQubPObWwbMNbyCbyxbznbzlbARbzpbzfbySbzjbzgbBObATbEJbCxbASbMNcfQbICbMNatJaQsavAavAavAavAbLAbLIbLJbLWbLZbVQbNRbgXbLFbKFbKDbKCbKAbMcbKybKxbKwbMkbKWbKUbKLbKJbMhbWWdOqbWWaadaaaaaaaaaaadaaaaRDaaaaadaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaAXaadaaEaAXaadaaabIWaaaaadaadaadaaaaaaaaaaaaaaaaadaaabYwbYwbYwcvobYwbMCbFZbNbbNcbMXbGwbMlbQLbQLbZbbMybYwbMmbMxbYwcuScmzdDYdEcbYwbMHbNmbNjbNibNgbNfbNlbYIbYIbAUbYIbNDbDmbXobXobXqbXsbXrbXsbXEbTLbWrbHpbVebVfbVfbVfbWtbUfbTYbWvbBCbXJbXIbWlbVibWAbPObWwbMNbMNbMNbMNbMNbMNbLbbMNbMNbMNbMNbMNbMNbMNbMNbMNbMNbMNbMNbMNatJbNKavAcfRchjavAbNJbOqbOBbObbOcbTvbNnbgXbNNbNNbOCbNNbXLbNNbOCbONbXLbXLbMhbNNbQNbPibXMbgXbgXbgXaadaaaaaaaaaaadaaaaRDaaaaadaadaadaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYRaaaaaaaaaaadaaaaaaaaactSaaaaaaaadaaaaaaaaaaaaaaaaacaadaaabYLbYEbYwbYfbYnbYobYwbYwbYwbXYbYabYqbYrbYsbYwbYwbYwbMmbZhbYwaKBbxzbxzbxzbxzbxzbxzbXCbNibXVbXTbXcbYIbXdbYQbZcccwccvbSEczybSEcctcctdJAbUIbTLbTSbTTcwbbZBbUYbTGbTpcbcccHbXGbXHccIbPOccyccqcbAbPObOAbXXbXXbXXbXXbXXbPgctubXXbXXbXXbXXbXXbXXbXXbXXbXXbZQbOWbZWasMckvbZCbNrbZJdJCavAbZObYXbZjbZkbZrbZybZzbgXbgXbgXbYSbOEbOFbOEbOIbOEbOFbOFbODbOEbYRbgXbgXbgXaadaadaadaadaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaaaaabMqbMrbMrbMtbMsbMBbMAaaaaadaaaaaaaaabYwcvobYwbYwbYwbYwbTwbYwbYwbTtbTubTtbYwbYwbYwbYwbYwbTicjvbYwcdYbxmbUJbxkbUGbUFbUubUEbUubTQbTIbTEbTycwvbTxbSObThbSxbYWbNYbPQbYWbYTbSGbXObTLbTSbTTbSNbPSbTVbTWbTXbZIbTWbTVbTZbSMbPObZKbYZbZLbPObWwbMNbOgbOabOObzpbOhbJZbPmbzpbzpbzpbPnbzpbzpbzpbPpbPobUpbUpchScpjaQsaUobULbNaavAavAavAavAavAcpebVGbVObgXbVjbMKblXblXbxwbMLbnXbnXbMRbMTbMRbnXbMYbMZbMhbgXbgXbgXaadaaaaaaaaaaadaaaaRDaaaaRCaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaabIWaaaaadbKmbKjbKjbKeaadaadaadaadaadbYwbGbbFZbKYbYwbLabLebZbbYwbLgbLhdJrbKubKzbQLbKHbYwbKIbuXbIHbIhbxjbIZbKabJEbKpbXxcdkbYYbGybGvcxLcxLbHjbGFbLibLybMabWdbEObWibWhbKGbXsbXEbTLbTSbTTbVebVfbVgbVhbKqbWSbVkbVkbFwbFybTkbSgbRJbQubPObWwbMNbyCbyxbznbzlbARbzpbzfbySbzjbzgbBObATbEJbCxbASbMNcfQbICbMNatJaQsavAavAavAavAbLAbLIbLJbLWcjJbVQbNRbgXbLFbKFbKDbKCbKAbMcbKybKxbKwbMkbKWbKUbKLbKJbMhbWWdOqbWWaadaaaaaaaaaaadaaaaRDaaaaadaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaAXaadaaEaAXaadaaabIWaaaaadaadaadaaaaaaaaaaaaaaaaadaaabYwbYwbYwcvobYwbMCbFZbNbbNcbMXbGwbMlbQLbQLbZbbMybYwbMmbMxbYwcuScmzdDYdEcbYwbMHbNmbNjbNibNgbNfbNlbYIbYIbAUbYIbNDbDmbXobXobXqbXsbXrbXsbXEbTLbWrbHpbVebVfbVfbVfbWtbUfbTYbWvbBCbXJbXIbWlbVibWAbPObWwbMNbMNbMNbMNbMNbMNbLbbMNbMNbMNbMNbMNbMNbMNbMNbMNbMNbMNbMNbMNatJbNKavAcfRchjavAbNJbOqbOBbObcjJbTvbNnbgXbNNbNNbOCbNNbXLbNNbOCbONbXLbXLbMhbNNbQNbPibXMbgXbgXbgXaadaaaaaaaaaaadaaaaRDaaaaadaadaadaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYRaaaaaaaaaaadaaaaaaaaactSaaaaaaaadaaaaaaaaaaaaaaaaacaadaaabYLbYEbYwbYfbYnbYobYwbYwbYwbXYbYabYqbYrbYsbYwbYwbYwbMmbZhbYwaKBbxzbxzbxzbxzbxzbxzbXCbNibXVbXTbXcbYIcpNbYQbZcccwccvbSEczybSEcctcctdJAbUIbTLbTSbTTcwbbZBbUYbTGbTpcbcccHbXGbXHccIbPOccyccqcbAbPObOAbXXbXXbXXbXXbXXbPgctubXXbXXbXXbXXbXXbXXbXXbXXbXXbZQbOWbZWasMckvbZCbNrbZJdJCavAbZObYXbZjbZkbZrbZybZzbgXbgXbgXbYSbOEbOFbOEbOIbOEbOFbOFbODbOEbYRbgXbgXbgXaadaadaadaadaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaabwYbwYbwYbwYbwYaadcuLaadbwYbwYbwYbwYbwYaaaaAXaaaaadaadbYwcaTbPlcaCbYwbYwbYwbxNbYwbYwbYwbYwbYwbYwbYwcaGclwbMmcaDdEebYwcazcaBcafcagcbmbxzcaQcaPcaJcaIcaHbYIcaFcaEcaLbStcambZNbZNchVbGicbqbGicdHcbvbTSbYNbYObYPbCnbCnbYPbCncdCbYPbYUbYVbPOccAcczccBbPObGTcizbWBbWBbWBbWBbPFbWBbEbbEbbEbbEbbEbbEbbEbbEbbEbbZgbYwbQLaQsaQsaQsavAaQsaQsavAcbwcbfcbgcaZcbacbncbucbkcblaadbPBaadbPCaadbPBaadbPEbPubPqaadbPqcaWaadaadaadaaaaaaaadaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaadcuHcuIcuIcuIcuIcuKcuLbMWbMMbMMbMMbMMbMVaaeaaeaaaaadaaabYwbVYbYwbGbbFZbFZbFZbFZbFZbVRbZxbZxbZxbZxbZxbZxbZxbVSclpcslbVJbUObUUbVUbVVbNkbxzbWfbCTbBZbVPbWfbYIbXebXabYIbXzbXgbZNbXAbZPbCvbZRbYjbZNbYMbTSbZTbYPbXUcdBcdBbXFbXPbXKbYPbQrbGJcadcaNcadbPObPOczlbYwbWBbJfbDNbSsbNzbFdbEbbFIbFIbFIcaSbNsbNxbFIbEbbZgbYwbWNaUobWFbWJavAciVcjQavAbVdbWsbTsbBWbWybCybTsbTsbWbbgXbNFbNCbNFbgXbNFbNCbNFbgXbNEbNCbNBbgXaadaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaAXaadbwWbwWbwWbwWbwWaaacuLaaabwWbwWbwWbwWbwWaaaaAXaaaaadaaabYwbYwbYwbYwbYwbYwbYwbYwbYwbQKbYwbYwbXhbXjbXjbXjbXjbJdbXjbXjbXjbXpbXtbXubXvbJgbXBbNObJlbJnbNQbOsczubJobXSbNUbJzbKrbNVbPybPxbYDbYCcapbZNbYMbTScdwbYPcahcaabZHbIubDFbSPbYPbYJbOJbOtcsdbWBcuScmzbNIcjvbWBbWVccEbunbOfbQwbEbbFIbOebNXbNTbNPbNMbNLbEbbZgbYwbYwbYwbYwbYwavAavAavAavAavAavAarNbWZbXbbWYbTsdQfbWXbgXbOwbWObOxbgXbOubSdbOvbgXbOibNdbOmbgXaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaaaadaaaaadaadaadaaacabaaaaadaaaaadaaaaadaaaaAXaadaadaaabYwcfdceZcfncfrcfucfxbZsbZudIFbYwbzQbyUcbHcbIbzLcaAbEgcbLcbMbYwcfAbyRbHkbyAbGGbGHbHCbRHbzrbzbbRobRrbRobzbbRobFhbGecbdbJucfvbJqbJkbIrbGibYMbTSbYNbCnbItbIsbIvbIubIxbIwbIQbyubyvaXDaYHbWBcaqbaZbGfckTbWBbGuccGbFGbFHbQPbEbbFIbFIbFJbFIbFIbFLbFKbEbbZgbYwceRbBnbYwbBobVHbVIbBKbVKbVTbWearNbBWbCsbCybTsbLCaadbgXbVLbWPbCEbgXbRgbSebCkbgXbOGbNecbTbgXaadaadaadaadaadaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaabwYbwYbwYbwYbwYaadcuLaadbwYbwYbwYbwYbwYaadaAXaaaaadaaacfGcfOcaicgIcgPcalbZocgybYwbQKbYwccTccUccVbzXccXbGqbGrbzUbIIbYwbIKbzGbIkbIlbImbLBbLwbIcbzEbLxbGpbSEbSEbSEbLtbFzbGjbLvbLocfvbLqbJkcbzbZNciWbTScgobYPbKSbKhbKhbLfbDFbJXbYPbzBbZvbWzbVNbWBbdObYvbGTbfDbWBbrWbJVbDVbDTceLbEbbEbbGEbGDbGMbGLbEbbGKbEbbGQcbxcakbCFbYwbCDaQsaQsaQsbQLcpqbENbYvbCHbCRbGZbDPbLCaadbgXbVLbGkbVLbgXbRgbGsbRgbgXbLYbGtbLYbgXaadaaaaaaaaaaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadcuHcuIcuIcuIcuIcuKcuLbMWbMMbMMbMMbMMbMVaadaAXaaaaadaaacacbZGbZocaicajcalcaubYwbYwbQKbYwcdZceacebceccedcaAbyzbAYbyzbYwbxzbExbyBbEAbxzbxzbEXcyUbEWcemcemcenceobBscemcemcshbZNcbycfvbEUbUqbZNbZNbDbbTScavbYPbYPbDacdBcfIbBubAqbYPbDGbGJbRLbRLbWBaUJbYvbEGbWBbWBbRLbKKbxobRLbRLbDUbDSbDZbDWbEkbEebYBbYhbEbbZgbYwbErbEubYwbTFcpqbZbbQLbZlbQLbYwbYvbTsbMpbTsbTsbBiaadbgXbgXbgXbgXbgXbgXbgXbgXbgXbgXbgXbgXbgXaadaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadbwWbwWbwWbwWbwWaaabUWaadbwWbwWbwWbwWbwWaaaaAXaaaaadaaacacccFcaicdWceJcalcdJceKdJpbQKbYwcfacfbcfcccYbFNcaAbCBbDnbEPbYwbwPbyqbFlcflbGmbHUbPPbNYbPQcembPXbCKcfqbDjclicemctGbZNceOcfvbHLbHDbGibFVbykcfBbxAbFobFkbFgbGPbGnbDFbFbbBJbGlbQAbQyaWbaWObVfaVwbFEbOraVrbOpbFibFfbVfbFebDUbEVbEScbSccuccdcbZcbYbEbbZgbYwbYwbVzbYwbVobVvbQLbQLbIXbVCclraadbTsbNtbTsbCzbBlaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaSgaaaaadaaaaadaaaaadaaabIWaaaaadaaaaadaadaadaadaSgaaaaadaaacuwcurcaicalcalcaicaictgdJpbQKbYwcgdcgecgfcggcghcaAcjEcgjcgkbRTcgmbLnbLmcgpcgqcgrbUVbNYbPQcgtcgucgvcgwbLpctecembQLbZNbMJcgAbRWbRVbRtbRsbRubTSbRFbRvbRNbRGbQvbQbbQzbQxbQObQCbRdbAxbBxbJsbURbBCbIRbUTbUTbUTbIybIpbIDbJybwUbIFcrtcqSckQcjXcmrclQcqicmubYwbIMcsYceScfkbZlbQLbQLcotbHfbYwaadbTsbBmbTsbYtdOUaaaaaaaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadcuHcuIcuIcuIcuIcuKcuLbMWbMMbMMbMMbMMbMVaadaAXaaaaadaaacacbZGbZocaicajcalcaubYwbYwbQKbYwcdZceacebceccedcaAbyzbAYbyzbYwbxzbExbyBbEAbxzbxzbSucyUbEWcemcemcenceobBscemcemcshbZNcbycfvbEUbUqbZNbZNbDbbTScavbYPbYPbDacdBcfIbBubAqbYPbDGbGJbRLbRLbWBaUJbYvbEGbWBbWBbRLbKKbxobRLbRLbDUbDSbDZbDWbEkbEebYBbYhbEbbZgbYwbErbEubYwbTFcpqbZbbQLbZlbQLbYwbYvbTsbMpbTsbTsbBiaadbgXbgXbgXbgXbgXbgXbgXbgXbgXbgXbgXbgXbgXaadaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadbwWbwWbwWbwWbwWaaabUWaadbwWbwWbwWbwWbwWaaaaAXaaaaadaaacacccFcaicdWceJcalcdJceKdJpbQKbYwcfacfbcfcccYbFNcaAbCBbDnbEPbYwbwPbyqbFlcflbGmbHUbPPbNYbSDcembSWbCKcfqbDjclicemctGbZNceOcfvbHLbHDbGibFVbykcfBbxAbFobFkbFgbGPbGnbDFbFbbBJbGlbQAbQyaWbaWObVfaVwbFEbOraVrbOpbFibFfbVfbFebDUbEVbEScbSccuccdcbZcbYbEbbZgbYwbYwbVzbYwbVobVvbQLbQLbIXbVCclraadbTsbNtbTsbCzbBlaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaSgaaaaadaaaaadaaaaadaaabIWaaaaadaaaaadaadaadaadaSgaaaaadaaacuwcurcaicalcalcaicaictgdJpbQKbYwcgdcgecgfcggcghcaAcjEcgjcgkbRTcgmbLnbLmcgpcgqcgrbUVbNYbPQcgtcgucgvcgwbLpctecembQLbZNbMJcgAbRWbRVbRtbRsbRubTSbRFbRvbRNbRGbQvbQbbQzbQxbQObQCbRdbAxbBxbJsbURbBCbIRbUTbZabUTbIybIpbIDbJybwUbIFcrtcqSckQcjXcmrclQcqicmubYwbIMcsYceScfkbZlbQLbQLcotbHfbYwaadbTsbBmbTsbYtdOUaaaaaaaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaabwYbwYbwYbwYbwYaadbJUaadbwYbwYbwYbwYbwYaadaAXaaaaadaaacaccvqcaicvjcaicaicaubYwbYwbxZbLSchscgechtcggchuchvchwbDuchychzbDwbLPchCchDchEchFbVAbLNbDmchJchKbDgchMbLschMchObTBbZNbOPbOKbTAbTrbGibRsbRubTSbRFbRvbCnbSLbSwbSvchZbQBbBJbSyclkbzybLrbBVciicikbVnbVkbVkbVkbJBbVbbBGbJTbJNbJLbJKbPabJxbJwbJvbJtbEbbZgbYwbJebJbcfDcakdJxbIXcuJbQLcfCclraadbFRbFYbFRbZZaadaadaaEaRCaRCaRCaRCaRCaRCaaEaRCaRDaRCaWuaadaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadcuHcuIcuIcuIcuIcuKcuLbMWbMMbMMbMMbMMbMVaadaAXaadaadaaacacbOHcalcgIcalchrbZbchxbYwbQKbYwciBciCciDciEciFcaAciGcfgciHbYwbJMchUbKiciLbTgbHUbSHbNYbKTcemciOciPbHAciRcilcembMubZNbZNbZNbMObZNbZNbZNbMfciXbMdbYPbYPbYPbYPbYPciZbLUbYPbWBbWBbSQbSTbSUcjgbSVbSSbLkbLkbLkbLkcjkcjkbIBcjkbEbbEbbEbbHcbGXbHedJubEbbZgbYwbIMbElbYwcbEcbKbQLbQLbQLbHhbYwaadaadaadaadaadaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadbwWbwWbwWbwWbwWaaabUWaaabwWbwWbwWbwWbwWaaaaAXaaaaadaadcaccalchrcalcjJbZlcjBcjTbYwbQKbYwcjzcjAcjVcjCcjDcaAbKXcjFbIqbYwbPYcehcehcehcehcehcjabAtbTMbIbbKVcjMbHFcjObHTcembwQbPzbPzbPzbxYbxWbuXbokbHVbHXbHYbHZbIabPzbHIbHGbHKbHJbHNbHIbHQbHOckfckgckhckibtGckkcklckmckncjkdJvbJcbOQbEvbEtbEbbEbbEbbEbbEbbEbbZgbYwbYwbYwbYwbYwbYwbYwclrbYwbYwbYwaaaaadaaaaaaaaaaadaadaadaaEaRDaRDaRDaaEaRDaRDaRDaaEaRDaWtaRDaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaaaaaaadaadaadaaaaaacvTaadaaaaaaaadaadaaaaaaaAXaaaaadaaadMEdMFdMFdMDbYwdMCdMBbYwbYwbQKbYwbYwbYwbYwbYwbYwbYwbYwcshbYwbYwbYAbYwcxZcxYcyfcyebVAcukcuDcemcuAcyGcxPcoCcoCcoCcoCcoCcoCcoCcxJctOcxJcxJctPcrncrobYwcmzdEddEcbYwcjccjcdAgcjcckUctYckYckZckhclaclbclccldclecylcjkclgdHadHccxzcvEbYvdEedEebYwcpXclpdLcbYwcABcjvbYwaaaaadaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaadaaaaadaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadcuHcuIcuIcuIcuIcuKcuLbMWbMMbMMbMMbMMbMVaadaAXaadaadaaacacbUMcalcgIcalchrbZbchxbYwbQKbYwciBciCciDciEciFcaAciGcfgciHbYwbJMchUbKiciLbTgbHUbSHbNYbKTcemciOciPbHAciRcilcembMubZNbZNbZNbMObZNbZNbZNbMfciXbMdbYPbYPbYPbYPbYPciZbLUbYPbWBbWBbSQbSTbSUcjgbSVbSSbLkbLkbLkbLkcjkcjkbIBcjkbEbbEbbEbbHcbGXbHedJubEbbZgbYwbIMbElbYwcbEcbKbQLbQLbQLbHhbYwaadaadaadaadaadaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadbwWbwWbwWbwWbwWaaabUWaaabwWbwWbwWbwWbwWaaaaAXaaaaadaadcaccalchrcalbXdbZlcjBcjTbYwbQKbYwcjzcjAcjVcjCcjDcaAbKXcjFbIqbYwbPYcehcehcehcehcehcjabAtbTMbIbbKVcjMbHFcjObHTcembwQbPzbPzbPzbxYbxWbuXbokbHVbHXbHYbHZbIabPzbHIbHGbHKbHJbHNbHIbHQbHOckfckgckhckibtGckkcklckmckncjkdJvbJcbOQbEvbEtbEbbEbbEbbEbbEbbEbbZgbYwbYwbYwbYwbYwbYwbYwclrbYwbYwbYwaaaaadaaaaaaaaaaadaadaadaaEaRDaRDaRDaaEaRDaRDaRDaaEaRDaWtaRDaRDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaaaaaaadaadaadaaaaaacvTaadaaaaaaaadaadaaaaaaaAXaaaaadaaadMEdMFdMFdMDbYwdMCdMBbYwbYwbQKbYwbYwbYwbYwbYwbYwbYwbYwcshbYwbYwbYAbYwcxZcxYcyfcyebVAcukcuDcemcuAcyGdCGcoCcoCcoCcoCcoCcoCcoCcxJdCLcxJcxJctPcrncrobYwcmzdEddEcbYwcjccjcdAgcjcckUctYckYckZckhclaclbclccldclecylcjkclgdHadHccxzcvEbYvdEedEebYwcpXclpdLcbYwcABcjvbYwaaaaadaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaadaaaaadaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSgaaaaaaaaaaaaaaaaaaaaacvTaaaaaaaaaaaaaadaaaaaaaSgaaaaadaaaaaaaaaaaaaadbYwbYwbYwbYwcgKbQKbZhcucdCMbQLdNecuSbZhclwctGbYwbYlbQLbYwcwrcwqcwhcwfcBdcxhcxfcemcemcemcemcoCctbdMAdMzcsZcsLcoCcsxcsEctoctpctqbTSbYNbYwdDWdDUdDYbYwctEdBlclXctFckUcAJcmbcmccmdcmecmfcmgdDXcmidDZcjkcmkcmldGMcwScuobYvbCQbFAdEadEbbZhdLadEadLbcotclraadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaEaAXaAXaAXaaaaaaaaacvTaaaaaaaaaaAXaAXaAXaSgaAXaadaadaadaadaadaadaadaaebYwdNlbYwbIOdJtbXXbXXbXXbXXbXXbXXbXXbXXbXXcwtbQLczwbYwczYczRcAiczRczEczIcyYctjcQFcxvcxxcoCdMJcwHcwYcxicwGcoCcxjcxocxAcxEctqbTSbYNbYwbYwbYwbYwbYwcxScxUcxIcxKckUbTXcmXcBEcmZcnacnbcnccnccndcxycjkcnfcmldHjcnicJRbYvdJwdKHbYwbZgbQLcOzbYwbQLcpZbYwaaaaadaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaAXaadcBBaadaAXaaaaaaaadaaaaaaaadaaaaaaaaaaaaaadaadajIcnEbPlckAcxtckAdJrbQLbQLbQLbQLcizdNkbQLbQLbQLcpWdKGckXbYwdEjdEkdEldEmdEgdEhdEictjczmczocvBcoCcuFcuGcuBcuEdMIcoCdMHdMGcxJcxJcvGbTScBgcmPdNgdNfcwzdNidNhcwFcvHdNjckUcpJcjeczqbLkdEfcnZcoacobcocdCmcjkcoecofdHicxXcoibYvbYwbYwbYwbZgbYwdLdbYwbYwbYwbYwaadaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaAXaaaaadaaaaAXaaaaaaaadaadaadaadaaaaaaaaaaadaadaaaaaeaaebYwdBhbYwbQLbZhbQLbQLdNzbYwbYwbYwbYwbYwbZhcpWcuScmzbYwdEzcNScOycOucMIcMJcMKcNjcLNcMmcLzcMGdMPcNmcJOcJPcBQctocCMcDYcJQcxJcbvbWrcNBclRdNAcmScmScmSdBtcmTcmTcmTcOAcuRcjecpfbLkbLkbLkbLkbLkbLkbLkcjkcjkcjkdLgcjkcjkbYvcpXclpclpcpYbYwbQLdLecubdKZcubaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaacaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaAXaAXaAXaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaaaaaaadaaebYwbYwbYwcdYbYwcmzcJZclfbYwdKIdKJdKIbYwcdYcpWbYwbYwbYwdEqdEqdEqdEqdErdEtdEucyscyncyqcxVcyjdMOdMNdMMdMLdMKdEvcyIcyRcAKdEwcDSbTSdBMcjcdNndNmdNmdNmdNhcmTczKczLbIGcBOcKNdJidovdIBdHRdHSdHldHOdJqdJWdKydKCdKDdKMdoBcdYdJobQLbQLbYwbYwdLfbYwbYwbYwbYwaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaAXaaaaadaaaaAXaaaaaaaadaadaadaadaaaaaaaaaaadaadaaaaaeaaebYwdBhbYwbQLbZhbQLbQLdNzbYwbYwbYwbYwbYwbZhcpWcuScmzbYwdEzcNScOycOucMIdEocMKcNjcLNcMmcLzcMGdMPcNmcJOcJPcBQctocCMcDYcJQcxJcbvbWrcNBclRdNAcmScmScmSdBtcmTcmTcmTcOAcuRcjecpfbLkbLkbLkbLkbLkbLkbLkcjkcjkcjkdLgcjkcjkbYvcpXclpclpcpYbYwbQLdLecubdKZcubaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaacaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaAXaAXaAXaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaaaaaaadaaebYwbYwbYwcdYbYwcmzcJZclfbYwdKIdKJdKIbYwcdYcpWbYwbYwbYwdEqdEqdEqdEqdErdEtdEucyscyncyqcxVdDzdMOdMNdMMdMLdMKdDAcyIcyRcAKdDGcDSbTSdBMcjcdNndNmdNmdNmdNhcmTczKczLbIGcBOcKNdJidovdIBdHRdHSdHldHOdJqdDIdKydKCdKDdKMdoBcdYdJobQLbQLbYwbYwdLfbYwbYwbYwbYwaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadaadaadaadaadaaabYwbYwbYwbYwbYwbYwbYwbYwbYwbYwbYwbQLcpWbYwcqucpKcLscLrbWKctvdEOdAPdARctjdNadNbdMZcoCdMXdMWdMWdMWdMYcoCdELdEKdEMcnRdENcnNcNBcpbdOfcmScmScmSdBtcmTcmTcmTcOAdAdcqGdNodNpdOddOedNqdNrdOmdOndNrbJDdOndNvdNwdoBdovcqQdBwdovdovdNudOjdOhdOidNtaadaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcYFdpecYFaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaadaaaaaaaaaaadaadaaaaaaaaaaadaaaaaabYwbQLdECcshcLPcJYcpDcpCcpzcpydEEdEFdEGctjcKjdAmcJUcoCdNDdNCdNBdMQdMTcoCdEBcKOcKOcxJdMUbTSbYNcjcdNEdNfdNFdNGdNhdBAcLvcLYckUbTXcrEcrFdNHdNIdNMdLhdNJdNJdMfdMydMRdMSdLpdLRdoBdppdNQdNRdNSdLodNOdNOdNOdNPdOgaadaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcYQcYFdsCcYFcYQaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaadaaaaaaaaaaaaaadaaaaaaaaaaadaaaaaabYwbZhcpWbYwcuecqqdCIcOccsbcrDdolcrBdMkctjctjcryctjcoCcoCcoCcoCcoCcoCcoCcxTcxJcxJcnpcrmcrncnqcjcckUckUckUcOAdBGckUckUckUckUcrpcjecqldrxdssdptdsgdshdspcBCcBFdsedsfcLmcOecKJdsrdtidtkdoPdsEdtJdufdoVdpcduiaadaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcsGcszcsFcsHcsKcszcsGaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaadaaaaaaaaaaaaaadaaaaaaaaaaadaaaaaabYwbZhcpWbYwcuecqqdCIcOccsbcrDdolcrBdMkctjctjcryctjcoCcoCcoCcoCcoCcoCcoCdATcxJcxJcnpcrmcrncnqcjcckUckUckUcOAdBGckUckUckUckUcrpcjecqldrxdssdptdsgdshdspcBCcBFdsedsfcLmcOecKJdsrdtidtkdoPdsEdtJdufdoVdpcduiaadaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcsGcszcsFcsHcsKcszcsGaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaadcwucwucwucyJcwucwucwuaaaaadaaaaaaaaaaadaaaaaabYwcizcpWbYwbYgdnEcqqdMicqIctvdmVdnddnDctvdmJcrdcqXckOclIclKclIdMjclIcwBclKcwAckOclPbYMbTSbRFbRvcjSdnJcsCcvbdBEcvzcttcnncvJcqUbSTcqDdovcAecAecBlcAbcAccxlcxBcxNcyycyCczHdoBdpvdpwdpxdovdpydqGdrbdovdrxdovaaeaadaaaaaaaadaaaaaaaadaadaadaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadcrScrTcrVcrWcrWcrWcstcrScrTaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaacwudCudCvdCudCrdCucwucwucyJcwucyJcwucwuaadaadbYwdEecpWbYwbYwbYwbYwbYwbYwbYwdMqduXduRduUduYcAactfckOcDPdBIclIclKclIduAduNcDRckOdBFbYMbTSbRFbRvcsfcsicrzcrzdAycrxdAzcqacvJbTXcjeckZdrYdoBdoBdoBdoBdoBdowdoBduzdvIdtCdujdoBdovcqQdBwdovdBpdBjdBkdBgcpGaaeaaeaadaadaadaadaadaadaadaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadczXcBoczXcrWcMocrWcCKcGdcYFaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaAXaadcwudzYdzXdAhdzZdzYdAidAAdApdzSdzRdzUcwuaaaaaabYwbYwdrHdtrdtrdtrdtrdtsdttbPYdpjdpqdpudpzdpIdqAcsncpecoScyEcoScoScyOcyTdoCdMndoAcsBcnMcnNcyrcsecsecoocuicuidAwcwOcqEbBRcvJcpJcjebBbdoBdvPdzPdCpdCqdBddBadBddAEdAKdstdoBbYvcvpdACcjvdovdovdovdovdovcomcxdaaeaadaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaadcrScrTcyVcrWcrWcrWczrcrScrTaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaAXaadcwudzYdzXdAhdzZdzYdAidAAdApdzSdzRdzUcwuaaaaaabYwbYwdrHdtrdtrdtrdtrdtsdttbPYdpjdpqdpudpzdpIdqAcsndBecoScyEcoScoScyOcyTdoCdMndoAcsBcnMcnNcyrcsecsecoocuicuidAwcwOcqEbBRcvJcpJcjebBbdoBdvPdzPdCpdCqdBddBadBddAEdAKdstdoBbYvcvpdACcjvdovdovdovdovdovcomcxdaaeaadaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaadcrScrTcyVcrWcrWcrWczrcrScrTaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaacwuczcdJLdJIdJBczcczcdJzdJsczgdJZdJScwuaaaaaaaaacwucwucwucwucwuctvdKBctvctvdADdAFdKbctvdAvdAxcujckOcnGclKclIclKclIcsjcskcLocrGcLCdAGcfBcrZcsecrYcpAcLQcLQdAwcqTcqEcrvcvJcAJcuabCgdrxdvPdzPdwfdwfdwsdvBdvEdvHdvIdvAdoBcuScdXcvobQLdAIbYwaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcsGcYQcYTcYMcYNcYLcsGaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadcwudEUdDSdEAdEydDFdDBdDQdDMdEIcBebBSdAfdAedzVcAhdAfdwbdwFdxxcwudCJdCNctvdvVcrXdzOdDybYwbYwbYwbYwckOclIclKclIcKnclIctDctAcKkckOcJVdAnbTSctscsecqAcpAcsucsvctycqzctRcupdwtbBTdABbBUdoBdvPdzPdwfdKfdBddIIdBddAjdIHdAkdoBcvmbQLcvobQLdvubYwaadaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcszcYFcYGcYFcYJaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaacyJdMddMcdDHdMadMmdMldMhdMedMsdMrdMpdModDCdMudKWdMtdKXdDHdDDdMvdDKdDLdMwdDJdDOdMxcrXbYwdGIbIXdGFbYwbYwbYwbYwbYwbYwbYwcvWbYwbYwcnpdDrbTSbYNcsecsscpAcuicuicLQcxrcGhcLObCMbCPdGDcAxdExdExdExdExdExdExdBUdExdCzdAMdCCdoBbQLbQLcvobQLbYwbYwbYwaadaadaaaaaaaadaaaaaaaacaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcYFdpecYFaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaadcwudEUdDSdEAdEydDFdDBdDQdDMdEIcBebBSdAfdAedzVcAhdAfdwbdwFdxxcwudCJdCNctvdvVcrXdzOdDybYwbYwbYwbYwckOclIclKclIcKnclIctDctAcKkckOcJVdAnbTSctscsecqAcpAcsucsvctycqzctRcupdwtbBTdCobBUdoBdvPdzPdwfdKfdBddIIdBddAjdIHdAkdoBcvmbQLcvobQLdvubYwaadaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcszcYFcYGcYFcYJaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXaaacyJdMddMcdDHdMadMmdMldMhdMedCFdMrdMpdModDCdMudKWdMtdKXdDHdDDdMvdDKdDLdMwdDJdDOdMxcrXbYwdGIbIXdGFbYwbYwbYwbYwbYwbYwbYwcvWbYwbYwcnpdDrbTSbYNcsecsscpAcuicuicLQcxrcGhcLObCMbCPdGDcAxdExdExdExdExdExdExdBUdExdCzdAMdCCdoBbQLbQLcvobQLbYwbYwbYwaadaadaaaaaaaadaaaaaaaacaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcYFdpecYFaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjaaacDjcDjcDjcDjcDjaaacDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaacwudKFdKEdKYdKVbCCdLidLldLkdLrdLnbCIcwudDpdDodDqcwudKqdIRcyMcwudBqdIZctvdCsdCxdCydKwbYwdFSdFTdFVbYwdAWbZxbZxbZxbZxdKlcARclpcsldKpdKncwecLkcsecPTcrhcsycsycsycxmcvLcwRdwybCldDxcASdJhdBxdKsdLsdLJdLOdJbcBPbYidAUclpclpclpclpbCiclpbCjcwpbYwbYwbYwaaeaaaaadaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjaaacDjcDjcDjcDjcDjaaacDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadcwucACcAGczccAFcACcADcAycAzcAlcAwcAfcwucwEaaaaaacwucwucwucwucwuctvcwCctvctvctvctvctvbYwcmmcwNclhbYwcwocuxcuxcuxcuxcuxcuxcuxcuxcnpczJczZczDczFdMbdBccsJcplcuicxucmHcnLcvJbVfdAVdKicAIdIxdIPdIQdIMdIOdGmcBPclwcxCbYwbYwbYwbYwbYwbQLbAoclTbPlcmnbPlcmFaadaadaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaacDjcDjcDjcDjcDjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaacwucBmcBnczccBncBhcBiczcczccBcczcczccwuaadaadaadbYwcmzcdYbQLcxgcBJcBIclpcBLcBHdKtdKubYwcogbJbbGwcBDcwMcuxcAZcBbcBacuxcAXcAYcANcuxcALcAMcAHczFcokcvcdBucsAcuicmQcsedAYcsebWacvVclqcAIcAtcyWcmxcAgczkcDgcBPbQLcxCbYwcmIcmwcpkbYwbQLbApdCDbYwbYwbYwaaeaaaaadaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10461,7 +10479,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDaaaaaaaadaaacwZcCvcCvcCvcCNcCOcCPcCQcCRcCScCTcCocCocCUcwZaadaaaaaaaaaaadaadaAXaadcDpcDqcDqcDqcDqcDrcDicDtcDucDucDucDucDvaadaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDaaaaaaaadaaacwZcBScBScBScBScDdcDecDfdQhcDdcBScBScBScBScwZaadaaaaaaaaaaaaaadaAXaadcDAcDAcDAcDAcDAaaacDiaadcDAcDAcDAcDAcDAaaaaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDaaaaaaaadaaacwZcCncCocCocDmcCqcCrcDfcAucDncDocCvcCvcCvcwZaadaadaaaaaaaaaaadaSgaaaaadaaaaadaaaaadaaacDUaaaaadaaaaadaadaadaadaSgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDaaaaaaaadaaacwZcCvcDxcCvcpPcrccCrcDfcAucpLcoZcCvcCvcCvcwZaadaaaaaaaaaaaaaaaaAXaaacDhcDhcDhcDhcDhaadcDXaadcDhcDhcDhcDhcDhaadaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDaaaaaaaadaaacwZcCvcDxcCvcpPcrccCrdEpcAucpLcoZcCvcCvcCvcwZaadaaaaaaaaaaaaaaaaAXaaacDhcDhcDhcDhcDhaadcDXaadcDhcDhcDhcDhcDhaadaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDaaaaadaadaadcwZcCvcCvcCvcDCcDDcCPcDEcApcCScDFcCocCocCUcwZaadaaaaaaaaaaaaaadaAXaadcDpcDqcDqcDqcDqcDZcEacDZcDucDucDucDucDvaadaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCIcCIcCIcCIcCIcCIcCIcCIcCIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDaaaaadaaacwZcwZcBScBScBScBScDdcDHcDfcAucDdcBScBScBScBScwZcwZaadaadaadaadaadaadaadcDAcDAcDAcDAcDAaaacAWaaacDAcDAcDAcDAcDAaaaaAXaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCIcCIcCIcCIcCIcCIcCIcCIcCIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDcCDaaaaadaaacwZcCncCocCocDJcCqdwHcDKcDfcAucAudwGcTPcTOcCvcCvcwZaaaaaaaaaaaaaaaaaEaaaaaaaadaadaadaaaaaacAWaadaaaaaaaadaadaaaaaaaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCIcCIcCIcCIcCIcCIcCIcCIcCIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10666,7 +10684,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOaaaaaaaaacLDdBYcLHcLIcLJdBXcLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOaaaaaaaaacLDcNXcLIcLIcLIcNYcLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOaaaaaaaaacLDcNocLIcLIcLIdCbcLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOaaaaaaaaacLDcNocLIcLIcLIdCbcLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOdzJdyOaaaaaaaaacLDcNocLIdEwcLIdCbcLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOdyOaaaaaaaaacLDcLDdCkcLDcLDdClcLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLDdCcdyXdCddCccLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiZajCajCajCajcaaaaiZajCajCajcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLDdCedCfdCgdCccLDaaaaaaaaaaaaaaaaaaaaaaaaaaacLRcLScLTcLScLUcOacLUcLScLVcLScLWcLWcLScLXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10692,7 +10710,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNgcNvcNvcNvcNvcNvcNvcNvcOxcOPcOPcOPcOxdxIdxCdxCdxBcNgcNgcPJdDecQMcQdcPJcPJcQcdDdcNgcNgcNgcNgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacObcOFcOFcOFcOFdxFcOFcOFcOFcOFcOFaaaaaaaaaaaaaaaaaaaaaaaacQQcQRcQRcQRcQScQRcQRcQScQRcQRcQRcQTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNgcNvcNvcOwcOxcOxcOxcOxcOxcOPcOPcOPcOxdxGcQVcQVcQVcQWdEYcPJcPJcPJcPJcPJcPJcQcdDdcNgcNgcNgcNgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOFdxFcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQZcQZcQZcQScQZcQZcQScQZcQZcQZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNgcNvcNvcOxcPIcOPcOPdxEcOxcOPcOPcOPcOxcRbcQWdxDdxBcNgcNgcPJcQdcQdcQdcPJcPJcQcdDacNgdDcdDbcNgcNgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOFcOFcOFcOFcOFcOFcOFcOFdxAcOFcOFcOFcOFcOFcOFcOFcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNgcNvcNvcOxcPIcOPcRfcRgcOxcOPcOPcOPcOxcOxbKvcRicOBdxpcNgdCZdCYdOpdCYdCYcPJcPJcPJcRccRdcRdcRecNgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOFdxtdxsdxsdxsdxsdxsdxtdxtdxtdxsdxsdxsdxsdxsdxtcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNgcNvcNvcOxcPIcOPcRfcRgcOxcOPcOPcOPcOxcOxdEvcRicOBdxpcNgdCZdCYdOpdCYdCYcPJcPJcPJcRccRdcRdcRecNgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOFdxtdxsdxsdxsdxsdxsdxtdxtdxtdxsdxsdxsdxsdxsdxtcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNgcRocNvcOxcPIcOPcRfcRpcOxcOPcOPcOPcOxcOPcOPcOPcOxdxycNgdEXdCWdCXdCWdCVcPJcPJcPJcNgcRlcRdcRecNgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadzLdxtdxtdxtdxvdxtdxtdxtdxtdxtdxtdxtdxvdxtdxtdxtdzLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNgcNvcNvcOxcPIcOPcOPcOPcRscOPcOPcOPcRtcOPcOPcOPcOxdxucNgcNgdCSdCRdCUdCTcNgcNgcNgcNgcNgcNgcNgcNgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOFdxtdxsdxsdxsdxsdxsdxtdxtdxtdxsdxsdxsdxsdxsdxtcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNgcNvcNvcOxcPIcOPcOPcOPcRwcOPcOPcOPcRxcOPcOPcRycOxdxqdxpcNgcNgcNgcNgcNgcNgaaaaaaaaaaaaaaaaaaaaaaaaaaacRAcRAcRAcRAcRAcRAcRAcRAcRAcRAcRAcRAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOFdxrdxodxodxodxodxodxodxodxodxodxodxodxodxodxncOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11481,7 +11499,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlfdlfdlfdlddlBdlBdDtdDtdDtdqJdqJdqJdqJdqJdqJdDtdDtdlBdlBdlBdlBdlBdlddlddlBdlBdDtdDtdDtdkHdkHdlcdlgdlgdlgdlhdDtdlBdlBdlBdlBdlBdlBdDtdDtdDtdDtdkHdkHdofdoedlBdlBdlBdlddlddlddlddlddlBdDtdDtdDtdDtdDtdkHdkHdlcdlgdlgdocdoddlgdlgdlgdlgdlhdDtdDtdlBdqkduIduJduKduJdqkduLdtgdtcduOduPdqkduQdtbduSdqkdDtdDtdDtdDtdDtdDtaaaaaaaadaaaaaaaaaaadaadaadaadaadaadaadaadaaddrVdsqdsZdPTdrVdrVdrVdrVduVdrVduVdrVdrVdtadqBdqBdqBdqBdDtdlBdlddlddlfdlfdlfdlddlddlfdlfdlfdlfdlfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlfdlfdlddlddlBdDtdDtdDtdDtdDtdDtdDtdDtdDtdDtdDtdlBdlddlddlddlddlddlddlddlBdlBdDtdDtdkHdlcdlgdlgdlgdlhdlcdlhdDtdkQdkXdDtdofdlgdlgdlgdlgdlgdoedkHdkHdlBdlBdlddlddlddlddlddlddlddlBdlBdDtdDtdDtdDtdkHdlcdlgdlgdlgdocdoddlgdlgdlgdlhdkHdDtdDtdDtdqkdtodtndvadvbdqkdvcduPduPdvddvedqkdvfdtpdvhdqkdDtdDtdDtdDtdDtdDtaadaadaadaadaadaadaaddvidvidvidvidviaadaaaaaadrVdvjdtmdtBdvRdvmduCduCduCdvoduCduDdrVdDtdDtdDtdDtdDtdlBdlBdlddlddlfdlfdlddlddlddlfdlfdlfdlfdlfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlfdlfdlfdlddlBdDtdDtdDtdDtdDtdDtdDtdDtdDtdlBdlBdlBdlddlddlddlddlddlddlddlddlBdlBdlBdlcdlgdlgdlgdlhdlcdlhdlcdlgdocdoddlgdoedofdlgdlgdlgdlgdlgdoedkHdlBdlddlddlddlddlfdlfdlfdlddlddlBdlBdlBdDtdDtdlcdlgdlgdlgdlgdocdoddlgdlgdlhdkHdlcdlgdlgdlhdqkdqkdqkdqkdqkdqkdtqdvqdvrdvsdvedqkduqdIjduqdqkdDtdDtdDtdDtdDtdDtaaaaaaaadaaaaaaaaaaaddvidvidvidvidviaadaaadsodrXdPUdvvdvwdrVdrVdrVdrVdrVdrVdvxdvydrVdDtdDtdDtdDtdDtdlBdlddlddlfdlfdlfdlddlddlddlddlfdlfdlfdlfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlfdlfdlfdlfdlBdlBdlBdlBdDtdDtdDtdDtdlBdlBdlBdlddlddlddlddlddlddlddlddlddlddlddlddlBdlBdlBdDtdFpdlcdlhdlcdlgdlgdocdoddlgdlgdoedofdlgdlgdlgdlgdlgdoedlBdlddlddlddlfdlfdlfdlfdlfdlddlddlddlBdlBdlBdlBdDtdDtdDtdDtdkIdkMdDtdDtdkHdlcdlgdlgdlhdkHdDtdDtdDtdDtdDtdqkdqkdqkdqkdqkdqkdqkdIkdIldpkdFEdDtdDtdDtdDtdDtaaaaaaaaaaadaaaaaaaaaaaddvidvidvidvidvidvCdsWdvDdsYdPSdvFdtBdPWdPVdPYdPXcxcctQdvLdvydrVdDtdDtdDtdDtdlBdlBdlddlddlfdlfdlddlddlddlddlfdlfdlfdlfdlfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlfdlfdlfdlfdlBdlBdlBdlBdDtdDtdDtdDtdlBdlBdlBdlddlddlddlddlddlddlddlddlddlddlddlddlBdlBdlBdDtdFpdlcdlhdlcdlgdlgdocdoddlgdlgdoedofdlgdlgdlgdlgdlgdoedlBdlddlddlddlfdlfdlfdlfdlfdlddlddlddlBdlBdlBdlBdDtdDtdDtdDtdkIdkMdDtdDtdkHdlcdlgdlgdlhdkHdDtdDtdDtdDtdDtdqkdqkdqkdqkdqkdqkdqkdIkdIldpkdFEdDtdDtdDtdDtdDtaaaaaaaaaaadaaaaaaaaaaaddvidvidvidvidvidvCdsWdvDdsYdPSdvFdtBdPWdPVdPYdPXcxcdFadvLdvydrVdDtdDtdDtdDtdlBdlBdlddlddlfdlfdlddlddlddlddlfdlfdlfdlfdlfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlfdlfdlfdlfdlfdlddlBdlBdlBdlBdlBdlBdlddlddlddlddlddlddlddlfdlfdlfdlfdlddlddlddlddlddlBdlBdnTdlBdlcdlgdlgdlgdocdoddlgdlgdlgdoedFpdDtdlBdlBdlBdlBdlBdlddlddlfdlfdlfdlfdlfdlfdlfdlddlddlddlddlddlBdlBdlBdlBdlBdlBdlBdlBdDtdlcdlgdlgdlhdkHdkHdDtdDtdDtdDtdDtdDtdDtdkIdtydtxdtxdtxdtxdtwdkMdDtdDtdDtdDtdDtdDtaadaadaadaadaadaadaadaaddvidvidvidvidvidPZdQadPZdQadsqcxsdtBdsqdsqdvQdsqdtBdsqdvSdwddrVdDtdDtdDtdDtdlBdlddlddlddlfdlfdlddlddlddlfdlfdlfdlfdlfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlfdlfdlfdlfdlfdlfdlddlddlddlddlddlddlddlddlddlfdlfdlfdlfdlfdlfdlfdlfdlfdlddlddlddlddlddlddlBdlBdDtdDtdDtdkIdkMdDtdDtdDtdDtdnTdlBdlBdlddlddlddlddlddlfdlfdlfdlfdlfdlfdlfdlfdlddlddlddlddlddlddlddlddlddlddlddlddlBdlBdDtdDtdDtdkHdkHdlcdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlhdDtdDtdDtdDtaaaaaaaaaaaaaaaaaaaaddvidvidvidvidvidrWdsWdvUdImdQbdvFdvWdugdugdvXdugcyhcxFdvZdwadrVdDtdDtdDtdDVdnTdlddlddlddlfdlddlddlddlddlfdlfdlfdlfdlfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlfdlfdlfdlfdlddlfdlfdlddlddlddlddlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlddlddlddlddlddlddlBdlBdlBdDtdDtdDtdlBdlBdlBdlBdlBdlddlddlddlddlddlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlfdlddlddlddlddlddlBdDtdDtdDtdkHdlcdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlgdlhdkHdkQdkXdDtdDtdDtaaaaaaaaaaaaaaaaaddvidvidvidvidviaadaaaduxdrXcyHdvFdtBdsqdsqdwcdvGdsqdsqdvxdvydrVdDtdDtdDtdDtdlBdlddlddlddlddlddlddlddlfdlfdlfdlfdlfdlfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/tgstation.2.1.2.dmm b/_maps/map_files/tgstation.2.1.2.dmm similarity index 99% rename from maps/tgstation.2.1.2.dmm rename to _maps/map_files/tgstation.2.1.2.dmm index 9b0ffbea8ce..12fa7047b78 100644 --- a/maps/tgstation.2.1.2.dmm +++ b/_maps/map_files/tgstation.2.1.2.dmm @@ -77,7 +77,7 @@ "aby" = (/obj/structure/table,/obj/item/weapon/paper,/obj/item/weapon/pen,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison) "abz" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/flasher{id = "PCell 1"; pixel_x = -28},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison) "abA" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison) -"abB" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/security/warden) +"abB" = (/obj/machinery/syndicatebomb/training,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/security/warden) "abC" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/security/warden) "abD" = (/obj/structure/table/woodentable,/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/carpet,/area/security/hos) "abE" = (/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Head of Security"},/obj/machinery/door_control{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -28; pixel_y = -3; req_access_txt = "2"},/obj/machinery/door_control{id = "Prison Gate"; name = "Prison Wing Lockdown"; pixel_x = -28; pixel_y = 7; req_access_txt = "2"},/turf/simulated/floor/carpet,/area/security/hos) @@ -2714,7 +2714,7 @@ "baj" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bak" = (/turf/simulated/wall,/area/maintenance/asmaint2) "bal" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal) -"bam" = (/obj/machinery/mineral/stacking_machine{input_dir = 1},/turf/simulated/floor/plating,/area/maintenance/disposal) +"bam" = (/obj/machinery/mineral/stacking_machine{input_dir = 1; stack_amt = 10},/turf/simulated/floor/plating,/area/maintenance/disposal) "ban" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal) "bao" = (/obj/machinery/mineral/stacking_unit_console{dir = 2; machinedir = 8},/turf/simulated/wall,/area/maintenance/disposal) "bap" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/port) @@ -2869,6 +2869,7 @@ "bdi" = (/obj/machinery/power/apc{dir = 8; name = "Disposal APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/disposal) "bdj" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/port) "bdk" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/disposal) +"bdl" = (/obj/structure/showcase{desc = "A historical figure of great importance to the wizard federation. He spent his long life learning magic, stealing artifacts, and harassing idiots with swords. May he rest forever, Rodney."; icon = 'icons/mob/mob.dmi'; icon_state = "nim"; name = "wizard of yendor showcase"},/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) "bdm" = (/obj/machinery/conveyor{dir = 9; id = "garbage"; verted = -1},/turf/simulated/floor/plating,/area/maintenance/disposal) "bdn" = (/obj/structure/closet/crate,/obj/item/weapon/coin/twoheaded,/turf/simulated/floor/plating,/area/maintenance/port) "bdo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/port) @@ -2983,11 +2984,11 @@ "bft" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/wood,/area/bridge/meeting_room) "bfu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bfv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/ai_upload) -"bfw" = (/obj/structure/table,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bfw" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/protectStation,/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bfx" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bfy" = (/obj/machinery/flasher{pixel_x = 0; pixel_y = 24; id = "AI"},/obj/machinery/computer/upload/ai,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bfz" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/computer/upload/borg,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) -"bfA" = (/obj/structure/table,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/antimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bfA" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/freeform,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bfB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bfC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bfD" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) @@ -3136,7 +3137,7 @@ "biq" = (/obj/structure/table,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bir" = (/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) "bis" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload) -"bit" = (/obj/structure/table,/obj/item/weapon/aiModule/freeform,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bit" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "biu" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/captain) "biv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "biw" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/captain) @@ -3201,7 +3202,7 @@ "bjD" = (/obj/structure/table,/obj/item/weapon/aiModule/reset,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bjE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bjF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) -"bjG" = (/obj/structure/table,/obj/item/weapon/aiModule/protectStation,/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) +"bjG" = (/obj/structure/table,/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/item/weapon/aiModule/reset/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/antimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bjH" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "bjI" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/turf/space,/area) "bjJ" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/captain) @@ -4093,7 +4094,7 @@ "bAL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech) "bAM" = (/obj/structure/table,/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech) "bAN" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3; pixel_y = 3},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/circuitboard/aifixer,/turf/simulated/floor/plating,/area/storage/tech) -"bAO" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/arcade,/turf/simulated/floor/plating,/area/storage/tech) +"bAO" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/item/weapon/circuitboard/arcade/battle,/turf/simulated/floor/plating,/area/storage/tech) "bAP" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/message_monitor{pixel_y = -5},/turf/simulated/floor/plating,/area/storage/tech) "bAQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "bAR" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/hallway/primary/aft) @@ -6540,10 +6541,10 @@ "cvO" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/wizard_station) "cvP" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 5},/area/wizard_station) "cvQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cvR" = (/obj/structure/showcase,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) +"cvR" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/showcase{desc = "A strange machine supposedly from another world. The Wizard Federation has been meddling with it for years."; icon_state = "processor"; name = "byond random number generator"},/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) "cvS" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) "cvT" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) -"cvU" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/showcase,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) +"cvU" = (/obj/machinery/mineral/unloading_machine{dir = 1; input_dir = 4; output_dir = 8},/turf/simulated/floor{tag = "icon-asteroidplating"; icon_state = "asteroidplating"; temperature = 273.15},/area/mine/explored) "cvV" = (/obj/machinery/door/poddoor{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "cvW" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) "cvX" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) @@ -6595,7 +6596,7 @@ "cwR" = (/obj/structure/table,/obj/item/weapon/dice/d20,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) "cwS" = (/obj/structure/stool{pixel_y = 8},/obj/item/clothing/head/bandana{pixel_y = -10},/obj/item/clothing/glasses/sunglasses,/turf/unsimulated/beach/sand,/area/centcom/holding) "cwT" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/beach/sand,/area/centcom/holding) -"cwU" = (/obj/structure/rack,/obj/item/clothing/head/that,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/suit/wcoat,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) +"cwU" = (/obj/structure/rack,/obj/item/clothing/head/that,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/tie/waistcoat,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) "cwV" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/centcom/holding) "cwW" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) "cwX" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "cafeteria"},/area/centcom/holding) @@ -7620,7 +7621,7 @@ "cQC" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/mine/north_outpost) "cQD" = (/turf/simulated/floor,/area/mine/north_outpost) "cQE" = (/obj/machinery/conveyor{dir = 4; id = "mining_north"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) -"cQF" = (/obj/machinery/mineral/unloading_machine{dir = 1; output_dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) +"cQF" = (/obj/machinery/mineral/unloading_machine{dir = 2; output_dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "cQG" = (/obj/machinery/conveyor{icon_state = "conveyor0"; dir = 10; id = "mining_internal"},/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/production) "cQH" = (/obj/machinery/disposal/deliveryChute{dir = 8},/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "cQI" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/abandoned) @@ -7796,14 +7797,14 @@ "cTW" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp) "cTX" = (/obj/machinery/door/poddoor/preopen{id = "Labor"; name = "labor camp blast door"},/turf/simulated/floor{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp) "cTY" = (/obj/machinery/conveyor_switch/oneway{id = "gulag"},/turf/simulated/floor{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1; temperature = 273.15},/area/mine/explored) -"cTZ" = (/obj/machinery/mineral/stacking_machine{dir = 1; input_dir = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) +"cTZ" = (/obj/machinery/mineral/stacking_machine{dir = 1; input_dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "cUa" = (/obj/effect/decal/cleanable/blood/old,/turf/simulated/floor/plating/asteroid{temperature = 273.15},/area/mine/explored) "cUb" = (/obj/machinery/computer/shuttle/labor/one_way,/turf/simulated/floor{icon_state = "floorgrime"; temperature = 273.15},/area/mine/laborcamp) "cUc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/laborcamp) "cUd" = (/obj/machinery/mineral/stacking_unit_console{machinedir = 2},/turf/simulated/wall,/area/mine/laborcamp) "cUe" = (/turf/simulated/floor{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1; temperature = 273.15},/area/mine/explored) "cUf" = (/obj/machinery/camera{c_tag = "Labor Camp External"; dir = 4; network = list("Labor")},/turf/simulated/floor{tag = "icon-asteroidwarning (NORTH)"; icon_state = "asteroidwarning"; dir = 1; temperature = 273.15},/area/mine/explored) -"cUg" = (/obj/machinery/mineral/unloading_machine{dir = 1; output_dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) +"cUg" = (/obj/machinery/mineral/unloading_machine{dir = 2; output_dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) "cUh" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/mine/production) "cUi" = (/turf/simulated/floor{icon_state = "loadingarea"},/area/mine/production) "cUj" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/turf/simulated/floor{tag = "icon-asteroidplating"; icon_state = "asteroidplating"; temperature = 273.15},/area/mine/explored) @@ -7839,7 +7840,7 @@ "cUN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/mine/laborcamp/security) "cUO" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/mine/laborcamp/security) "cUP" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/obj/structure/plasticflaps/mining,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/laborcamp) -"cUQ" = (/obj/machinery/mineral/unloading_machine{dir = 1},/turf/simulated/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"; temperature = 273.15},/area/mine/explored) +"cUQ" = (/obj/machinery/mineral/unloading_machine{dir = 2; output_dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "cUR" = (/obj/machinery/mineral/unloading_machine{dir = 1; icon_state = "unloader-corner"; input_dir = 4; output_dir = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "cUS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plating/asteroid{temperature = 273.15},/area/mine/explored) "cUT" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) @@ -8035,8 +8036,9 @@ "cYB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/camera{c_tag = "West Outpost"; dir = 1; network = list("MINE")},/turf/simulated/floor,/area/mine/west_outpost) "cYC" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/mine/west_outpost) "cYD" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/mine/west_outpost) -"cYE" = (/obj/machinery/mineral/unloading_machine{dir = 1; output_dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) +"cYE" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "cYF" = (/obj/machinery/mineral/processing_unit{dir = 1; output_dir = 2},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) +"cYG" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cYH" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) "cYI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/mine/west_outpost) "cYJ" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/mine/living_quarters) @@ -8391,10 +8393,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaXPaYVaYXaYXaYXbbRaXPbdibdjaMzaMzbbSbapaSeaTsbaqaTvbaraSebasbatbaubaubavbawbaxbaxbaybaxbazbaAbaBbaCbaBbaBbaDbaEbaFbaGbaHaWdaWdbaIbaJbaKaYdaDAbaLaZxbaMbaNbaOaVjbaPbaQbaRbaSaSKaWpaVobaTaWtbaUaWtbaVaVoaWvaSKbaWbaXbaYbaZaVzbbaaVzbbbaVAaSSaDAbbcaZNbbdbbebbfbbgbbhaZNbbibbjbbjbbkbblbblbblbbmbbnbbobbpaZTbbqbbrbbrbbrbbrbbsbbtbbubbvbbwbbvbbvbbvbbxbbybbzbbAbbzbbBbbBbadbbCbbDbbEbadbbFbbGbbFbadbaeaThbahbaibbHbbIbbHbaibbJbbKbaibbLbbMaaaaafaaaaafaaaaafaEraEraEraEraEraEraEraEraEraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaafaXPbalaXPbbOaYXbambaoaXPaMzaYWaYYaYZbbTaSeaSeaSeaSeaSeaSebbUbbVbbWaMzbbXaTEaTEaTEbbYaTEaTEaTEbbZaTEaTEaTEaTEbcabcbbccbcdaWdaWdaYbbceaZwaYdaDAbcfaZxbcgbaNbchbchbchaVjbcibcjaSKaVpbckaVpbclaYmaVpaVpbckaVpaSKbcmbcnbcobcpaVzaZJbcqaVzbcrbcsbctbcuaZNbcvbcwbcxbcybczbcAbblbcBbblbcCbblbblbcDbcEbcFbcGbcHaZTbcIbbrbcIbbrbcIbcJbbraZUbcKbcKbcLbcMaZYbcNbaabcObcPbcQbcRbcRbadbcSbcTbcUbcVbcWbcXbcYbadbcZbafbdabaibdbbdcbdbbddbdebdfbaibdgbdhaaaaafaaaaaaaaaaaaaEraEraEraEraEraEraEraEraEraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaXPbbNdcIdcGdcHdcHdcKdcJaZaaYZaJKbdnbdobdpbdpbdpbaxbaxbaxbdqbdrbdrbdrbdsaTEbdtbdubdvbdwbdxbdybdzbdAaTEbdBbdCbdDbdEbdFbdGbdHbdIbdJbdKbdKbdLbctbdMbdNbdObOibdQbdRbdSbdTbciaTSaTSaSKbdUaXtaXtbdVaXtaXtbdUaSKbdWbdWbdXaVzbdYaVzbdZbeabebbecaSSaDAaDAaZNbedbeebefbegbehbeibblbejbekbelbembembenbeobepbeqberaZTbcIbbrbcIbbrbcIbcJbesaZUbetbeubevbewaZYbexbeybezbezbezbeAbeBbeCbeDbeEbeEbeEbeFbeEbeGbeHbeIbeJbeKbeLbeMbeNbeObePbeQbeRbaibdgbeSaafaafaaaaaaaaaaafaaaaEraEraEraEraEraEraEraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaXPdcDaXPdcEbbQbbQdcFaXPbeVbeWaJKbeXbeYbeXbeXbeXbeYbeXaJKaJKaTEaTEaTEbeZaTEbdzbdzbfabdzbdzbdzbdzbdzbfbbfcbfdbfebffbfgbfgbfgbfhbfibfjbfkbflbfmbfnbfobfpbfqbfrbNhaTPbftbfuaTSaaabfvbfwbfxbfybfxbfzbfxbfAbfvaaabfBbfCbfDbdWbdWbdWbdWbfEaVAbfFaDAaDAaZNbfGbeebfHbcybczbfIbblbcCbfJbfKbfLbfMbfNaZTbfObfPbfQaZTbcIbfRbcIbbrbcIbcJbbraZUaZYaZYaZYaZYaZYbexbaabfSbfTbfUbfVbfWbfXbfYbfZbgabgabgbbcUbgcbadbgdbgebgfbaibggbghbgibgjbgkbglbaibdgbakbakbgmbgnbakbakbakaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaXPdcDaXPdcEbbQbbQdcFaXPbeVbeWaJKbeXbeYbeXbeXbeXbeYbeXaJKaJKaTEaTEaTEbeZaTEbdzbdzbfabdzbdzbdzbdzbdzbfbbfcbfdbfebffbfgbfgbfgbfhbfibfjbfkbflbfmbfnbfobfpbfqbfrbNhaTPbftbfuaTSaaabfvbitbfxbfybfxbfzbfxbjGbfvaaabfBbfCbfDbdWbdWbdWbdWbfEaVAbfFaDAaDAaZNbfGbeebfHbcybczbfIbblbcCbfJbfKbfLbfMbfNaZTbfObfPbfQaZTbcIbfRbcIbbrbcIbcJbbraZUaZYaZYaZYaZYaZYbexbaabfSbfTbfUbfVbfWbfXbfYbfZbgabgabgbbcUbgcbadbgdbgebgfbaibggbghbgibgjbgkbglbaibdgbakbakbgmbgnbakbakbakaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaXPbeTdcCbbPbbQbdkbgpaXPaaaaafaafbgqbgqbgqbgqbgqbgqbgqaaaaaabgrbgsbgtbgubgvbdzbdzbdzbdzbdzbdzbdzbdzbgwbcdaWdbgxbgybgzbgAbgBbgCbdEaTKaTKbgDbgEbgFbgGbgHbgMbgMbgJbgIbgKbgLbgMaafbgNbgObfxbgPbfxbgPbfxbgQbgNaafbgRbgSaYsbgTbgUbgVbgWbgXbgYbgZaDAbhabhbbhcbhdbfHbhebhfaZNbhgbcCbfJbfLbhhbblbhiaZTbhjbhkbhlaZTbhmbhnbhobhpbhqbhrbhqbhsbhtbhubhtbhtbhtbhvbaabhwbcPbcPbfVbhxbhybhzbhAbhBbhBbhCbhDbhEbadbhFbgebhGbaibhHbhIbhJbgjbeObhKbaibhLbhMbhNbhMbhMbhMbhObakaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaXPbhPbhQbhRbanaXPaXPaXPaaaaaaaaabgqbgqbgqbgqbgqbgqbgqaaaaaabhSbhTbdzbhUbhVbhVbhVbhVbhVbhVbhVbhVbhVbhWbhXbhYbhZbiabibbicbidaYbbiebifbigbihbiibijbgGbgGbgMbNgbilbimbinbiobgMaaabipbiqbfxbirbisbirbfxbitbipaaabiubivaYsbiwbixbiybixbizbiAbgZaDAaDAaZNbiBbeebfHbiCbiDaZNbiEbiFbiGbiHbiIbblbiJbiKbiLbiMbiNaZTaZUbiOaZUaZUaZUbiPbiPbiPbiPbiPbiPbiPbiPbexbaabfSbfTbfUbiQbiRbiSbiTbiUbiUbiUbhCbcUbiVbadbiWbgebiXbaibiYbiZbiYbjabeObjbbaibjcbjcbjcbjcbjcbjcbdgbakaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqbjdbjebjfbjgbdzbdzbdzbjhbjhbjhbjhbdzbdzbdzbdzbfbbjiaWdbjjbjkbjlbjmbjnaYbaWdbjobjpbjqbjrbjsbNcbjubNbbjwbjxbjybjzbjAbjBazFbjCbjDbjEbfxbirbfxbjFbjGbjHbjIbjJbjKbjLbjMbixbjNbixbizbiAbjOaDAaDAaZNbjPbeebfHbjQbjRaZNbjSbcCbblbjTbjUbjVbjWbiEbjXbjYbjZbkabkbbkcbblbkdbkebkfbkgbkhbkibkjbkkbklbkmbbxbbybknbkobkpbkqbkrbadbksbiUbiUbktbkubcUbkvbadbkwbkxbkybaibkzbkAbkBbkCbeObkDbaibkEbkFbkFbkFbkFbkFbdgbakaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaXPbhPbhQbhRbanaXPaXPaXPaaaaaaaaabgqbgqbgqbgqbgqbgqbgqaaaaaabhSbhTbdzbhUbhVbhVbhVbhVbhVbhVbhVbhVbhVbhWbhXbhYbhZbiabibbicbidaYbbiebifbigbihbiibijbgGbgGbgMbNgbilbimbinbiobgMaaabipbiqbfxbirbisbirbfxbfAbipaaabiubivaYsbiwbixbiybixbizbiAbgZaDAaDAaZNbiBbeebfHbiCbiDaZNbiEbiFbiGbiHbiIbblbiJbiKbiLbiMbiNaZTaZUbiOaZUaZUaZUbiPbiPbiPbiPbiPbiPbiPbiPbexbaabfSbfTbfUbiQbiRbiSbiTbiUbiUbiUbhCbcUbiVbadbiWbgebiXbaibiYbiZbiYbjabeObjbbaibjcbjcbjcbjcbjcbjcbdgbakaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqbjdbjebjfbjgbdzbdzbdzbjhbjhbjhbjhbdzbdzbdzbdzbfbbjiaWdbjjbjkbjlbjmbjnaYbaWdbjobjpbjqbjrbjsbNcbjubNbbjwbjxbjybjzbjAbjBazFbjCbjDbjEbfxbirbfxbjFbfwbjHbjIbjJbjKbjLbjMbixbjNbixbizbiAbjOaDAaDAaZNbjPbeebfHbjQbjRaZNbjSbcCbblbjTbjUbjVbjWbiEbjXbjYbjZbkabkbbkcbblbkdbkebkfbkgbkhbkibkjbkkbklbkmbbxbbybknbkobkpbkqbkrbadbksbiUbiUbktbkubcUbkvbadbkwbkxbkybaibkzbkAbkBbkCbeObkDbaibkEbkFbkFbkFbkFbkFbdgbakaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqbkGbkHbkGbkIbkJbdzbdzbdzbdzbdzbdzbdzbdzbkKaTEaTEbkLaWdaWdbkMbkNbkObkPaYbaWdaWdbkQbkRbiibkSbkTbkUbMZbkWbNabkYbkZblabgMaaablbblbblcbldblebfxblfblbblbaaablgblhblhblhblhblhblhblibljblkbllbllaZNaZNblmblnbloblpaZNblqbcCbblbblbblbblblrbblblsbltbblbblbblbltbblbblbkeblublvblwblxblyblzblAbiPblBblCblDblDblEblFbcPbadblGbcUbcUblHblIbcUblJblKblLblLblMblNblNblObbHblPbbHbaibaiblQbkFblRblSblTbkFbdgbbMaaaaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqblUblVblUblWbdzbdzbdzbjhbjhbjhbjhbdzbdzblXblYaTEblZaWdaWdbkMbmabicbkPaYbbmbaWdbkQbkRbmcaDAaLKbkUbHFbmebHEbmgbmgbGjbgMaafaafblbblbbmibmjbmiblbblbaafaafbmkbmlbmmbmnbmobmpbmqbmrbmsbmtaDAaDAbmubmvbmwbmxbmybmzbmAbmBbmCbmBbmDbmBbmBbmEbmBbmFbmGbmBbmBbmBbmHbmIbmIbmJblubmKblwbmLbmLbmMbmNbiPbexbaabmObmPbmQbmRbmRbadbmSbmTbmUblKbmVbcUbmWblKbmXbmYbmZbnabnbbncbndbnebnfbngbnhbnibnjblRbnkbnlbkFbdgbdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgqbgqbgqbgqbgqbgqbgqbnmbjebnnbnobdzbdzbdzbdzbdzbdzbdzbdzbdzblXbnpaTEbnqaXhaWdbkMaWdbnraWdaYbaWdbjobigbnsbmcaDAaLKbkUbgMbntbkXbnvbnwbnxbgMaaaaaaaafblbblbbnyblbblbaafaaaaaabmkbnzbnAbnBbnCbnDbnDbnEbnFbnGaDAaDAbnHbnIbcCblsbnJbnKbnLbnKbnMbnKbnNbnKbnObnPbjZbnQbblbblbblbnRbnSbnSbnTbnUbnVbnWblwbnXbnYblzbmNbiPaZZbaabnZbnZboabnZbnZbadblKblKblKblKbobbocbbFblKbodboebofbngbngbogbgebgebohbgeboibojbojblRbnkblRbkFbdgbdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8693,13 +8695,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcqYcrLcsLcrZcrZcrZcuccrZcrZcrZcudcrZcrZcrZcrLcswcqNcqNctkcuecufcugcqNcqNcqNcqNcqNcqNcqNcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrQctQctRctRctRctRctRctQctQctQctRctRctRctRctRctQcrQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcqYcrLcsLcrZcrZcrZcuhcrZcrZcrZcuicrZcrZcujcrLcukctKcqNcqNcqNcqNcqNcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaculculculculculculculculculculculculaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrQcrUcumcumcumcumcumcumcumcumcumcumcumcumcumcrScrQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrKcrLcrLcrLcrLcrLcrLcuncrZcrZcrLcrLcrLcrLcrLcrLcrPctKcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuocupcuqcurcuscutculcuucuvcuwculaaaaaacuxcuxcuxcuxcuxcuxcuxcuxcuxcuycuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuycuxcuxcuxcuxcuxcuxcuxcuxcuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcrZcrZcuAcuBcuCcrLcrZcrZcrZcrLcuDcuEcuFcuGcuHcrLcswcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuqcuqcuqcuqcuqcuqcuqcuIcuJcuKculaaaaaacuxcuLcuMcuNcuNcuNcuNcuNcuOcuPcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuQcuOcuRcuRcuRcuRcuRcuMcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcuTcrZcrZcrZcrZcuUcrZcrZcrZcuVcrZcrZcrZcrZcuWcrLcswcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuXcuXcuqcuqcuqcuYculcuZcvacvbculaaaaaacuxcuLcuMcuNcvccuNcvccuNcuOcuPcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuQcuOcuRcvdcuRcvdcuRcuMcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcrZcrZcrZcrZcrZcvecrZcrZcrZcvfcrZcrZcrZcrZcvgcrLcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuqcuqcuqcuqcvhcvhculculcviculculaaaaaacuxcuLcuMcuNcuNcvjcuNcuNcuOcuPcuzcuzcuzcuzcuzcvkcvlcvkcuzcuzcuzcuzcuzcuQcuOcuRcuRcvmcuRcuRcuMcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcYGcYGcuAcuBcuCcrLcrZcrZcrZcrLcuDcuEcuFcuGcuHcrLcswcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuqcuqcuqcuqcuqcuqcuqcuIcuJcuKculaaaaaacuxcuLcuMcuNcuNcuNcuNcuNcuOcuPcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuQcuOcuRcuRcuRcuRcuRcuMcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcrZcrZcrZcrZcrZcuUcrZcrZcrZcuVcrZcrZcrZcrZcuWcrLcswcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuXcuXcuqcuqcuqcuYculcuZcvacvbculaaaaaacuxcuLcuMcuNcvccuNcvccuNcuOcuPcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuQcuOcuRcvdcuRcvdcuRcuMcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcuTcrZcrZcrZcrZcvecrZcrZcrZcvfcrZcrZcrZcrZcvgcrLcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuqcuqcuqcuqcvhcvhculculcviculculaaaaaacuxcuLcuMcuNcuNcvjcuNcuNcuOcuPcuzcuzcuzcuzcuzcvkcvlcvkcuzcuzcuzcuzcuzcuQcuOcuRcuRcvmcuRcuRcuMcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcuTcrZcrZcvnctdcrLcvocvpcvqcrLcuWcvgcrZcrZcrZcrLcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcvrcvrcuqcvscvtcvuculcvvcvicvwculaaaaaacuxcuLcuMcuNcuNcuNcuNcuNcuOcuPcuzcuzcuzcuzcuzcvkcvxcvkcuzcuzcuzcuzcuzcuQcuOcuRcuRcuRcuRcuRcuMcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcrZcrZcrZcrLcrLcrLcvycvzcrZcrLcrLcrLcrZcrZcrZcrLcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuqcuqcuqcvscvAcvBculcvCcvicvDculaaaaaacuxcuLcuMcuNcvccuNcvccuNcuOcuPcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuQcuOcuRcvdcuRcvdcuRcuMcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLctdcvEcvFcrLcqYcrLcvGcvGcvGcrLcqYcrLcsdcvHcvIcrLcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcuqcuqcuqcuqcuqculculculculculculaaaaaacuxcuLcvJcuNcuNcuNcuNcuNcuOcuPcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuQcuOcuRcuRcuRcuRcuRcvJcuScuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcvGcvGcvGcrLcqYcsScvKcvLcvMcsUcqYcrLcvGcvGcvGcrLcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcvNcvOcvPcuqcuqcvQcvRcvScvTcvUculaaaaaacuxcuxcuxcvVcvVcvVcvVcvVcuxcuycuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuycuxcvVcvVcvVcvVcvVcuxcuxcuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcrLcvGcvGcvGcrLcqYcsScvKcvLcvMcsUcqYcrLcvGcvGcvGcrLcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcvNcvOcvPcuqcuqcvQbdlcvScvTcvRculaaaaaacuxcuxcuxcvVcvVcvVcvVcvVcuxcuycuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuzcuycuxcvVcvVcvVcvVcvVcuxcuxcuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcsScvKcvLcvMcsUcqYcqYcqYcqYcqYcqYcqYcsScvKcvLcvMcsUcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcvWcvXcvYcuqcuqcuqcvZcwacvZcwbculaaaaaaaaaaaacuxcwccwccwccwccwccwdcwecwfcwfcwfcwfcwfcwfcwfcwfcwfcwfcwfcwfcwfcwgcwdcwhcwhcwhcwhcwhcuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqYcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcvXcwicvYcuqcuqcuqcwjcwkcwjcwkculaaaaaaaaaaaacuxcuxcuxcuxcuxcuxcwdcwlcwmcwmcwmcwmcwmcwlcwlcwlcwmcwmcwmcwmcwmcwlcwdcuxcuxcuxcuxcuxcuxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNcqNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaculcvWcwncwocuqcuqcvQcwpcwbcwqcwrculaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwdcwlcwlcwlcwscwlcwtcwtcwtcwtcwtcwlcwscwlcwlcwlcwdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9370,7 +9372,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacSccSccSccSycSWcSXcSWcSycSYcSZcS aaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOZaafaafaafaafaafcSccTgcThcSycTicSAcSzcTjdcTcSAdcScSycTmcTmcTmcSBcSTcSTcSncSncRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcOWcTncSCcTocOWcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcTpcQlcQlcQlcQlcQlcOTcOTcOTaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcTfcQlcQlcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccTrcTscTtcTucTvcTwcSAcTicSAcSAcTycTmcTmcSTcSTcSTcSTcSOcSncRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcTzcTAcTBcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcRacOTcQlcQlcRbcRbcOTcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcTfcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccTCcTDcTEcTFcTvcTGcSAcTidcRcSAcSydcQdcPdcPcSTcSTcSBcSBcSncSncRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcTLcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcTfcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccSycSycSycTMcSAcTNcTvcTOcUccTIcUPcUjcUjcUQcOCcSTcSBcSBcTScSncRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcTLcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaacOEcOEaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcTTcTUcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccSycSycSycTMcSAcTNcTvcTOcUccTIcUPcUjcUjcvUcOCcSTcSBcSBcTScSncRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcTLcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaacOEcOEaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcTTcTUcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcTKcTWcTVcTXcTRcSAcTicSAcSAcTPcOecSycUfcUecTYcSTcSTcSBcSBcUacSncRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcTLcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaacOEcOEcOEaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqcSccSccSccSccSAcSAcTicUccUdcSybEKcSycTmcTmcTmcSBcSBcSBcSBcTJcRacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaacOEcOEaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcTqcTqcTqcTqcTqaaaaaacSccUbcSAcSAcTibPbbmdbPbbOjcSycTlcTkcSBcSBcSBcSBcSOcSncSncRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcUkcUkcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcRKcRKcRKcRKcRKcRKcRKcRKcRKcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9385,7 +9387,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSncSncSncSncSncSncSncS aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaacVsaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaacOEcVscVsaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaacOEcOEcVsaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcTfcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRPcRPcUjcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaacOEcOEcVsaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcTfcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSocSocSocRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOTcQlcQlcTfcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSocSocRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOTcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSocSocRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcRPcSocSocSocSocSocSocSocSocSocSocSocSocSocSocOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaacOTcOTaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOTcQlcQlcTfcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9475,13 +9477,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacSocSocOEcOEcOEcOTcOTcQlcQlcQlcQlcQlcWFcZHcZIcZJcZKcWFcRjcZLcWdcQlcQlcQlcQlcQlcTpcQlcQlcQlcTTcUTcUTcTUcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcVvcUTcVwcQlcQlcQlcQlcOTcQlcQlcTpcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcWwcQlcOTcOTcOTcOTcOTcWgcXBcZMcZNcZOcZOcZNcZPcZQcZRcZOcZOcZScZNcZTcZUcZVcZWcZXcZXcZXcZXcZXcZXcZXcZXcZYcZYcZYcZYcZYcZYcZZdaadabdacdaddaedafdagdahcXTcXTcXTcXTcXTcXTcXTcXTdaicSFdajcSFcWdcRbcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOTcOTcQlcQlcQlcQlcWFdakdaldamdancWFcQlcQlcQlcQlcQlcQlcOTcOTcRacOTcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcQlcVvcVwcQlcQlcQlcOTcOTcOTcOTcOTcOTcRacQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcOTcOTcWgcWgdaodapdaocWgcWgdaqdardascWgcWgdaodatdaocWgdaucQlcQlcQlaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaadavcXVcYodawdaxdaydazdaAdaAdaBcXTcURcTQdaEdaFdaFdaFdaFcWdcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOTcOTcQlcQlcQlcWFcWFcWFcWFcWFcWFcQlcQlcOTcOTcOTcOTcOTcOEcOEcOTcOTcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcOTcOTcOTcOTcOTcOTcQlcQlcQlcQlcQlcTfcQlcQlcOTcOTcOTcOEcOEcOEcOEcOEcOTcQlcQlcQlcQlcQlcQlcTfcQlcQlcQlcVrcSJcQlcQlcQlcQlcQlcQlcQlcOTcWgdaGdaHdaIdaHcWgdaJdaKdaLdaMdaNcWgdaOdaPdaQcWgcQlcQlcQlcQlcQlcQlaaaaaaaafaaaaaaaaaaafaafaafaafaafaafaafaafaafcXTdaRdaScZzcXTcXTcXTcXTdaTcXTdaTcXTcXTdaVcWdcWdcWdcWdcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcQlcTTcUTcUTcUTcTUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcQlcQlcQlcTTcUTcUTcUTcVCcVDcUTcUTcUTcTUcQlcQlcQlcQlcWgdaWdaXdaYdaZcWgdbadaNdaNdbbdbccWgdbddbedbfcWgcQlcQlcQlcQlcQlcQlaafaafaafaafaafaafaafdbgdbgdbgdbgdbgaafaaaaaacXTdbhdbicZzcUhcYEdaAdaAdaAdbmdaAdaBcXTcQlcQlcQlcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcQlcQlcTTcTUcQlcQlcVrcSJcQlcQlcVvcUTcUTcUTcUTcUTcVwcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTfcQlcQlcQlcQlcWgcWgcWgcWgcWgcWgdbndbodbpdbqdbccWgdaodbrdaocWgcQlcQlcQlcQlcQlcQlaaaaaaaafaaaaaaaaaaafdbgdbgdbgdbgdbgaafaaacYmcXVdbsdbtdbucXTcXTcXTcXTcXTcXTdbvdbwcXTcQlcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcQlcTTcUTcUTcUTcTUcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcQlcQlcQlcTTcUTcUTcUTcVCcVDcUTcUTcUTcTUcQlcQlcQlcQlcWgdaWdaXdaYdaZcWgdbadaNdaNdbbdbccWgdbddbedbfcWgcQlcQlcQlcQlcQlcQlaafaafaafaafaafaafaafdbgdbgdbgdbgdbgaafaaaaaacXTdbhdbicZzcUhcUQdaAdaAdaAdbmdaAdaBcXTcQlcQlcQlcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcQlcQlcTTcTUcQlcQlcVrcSJcQlcQlcVvcUTcUTcUTcUTcUTcVwcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTfcQlcQlcQlcQlcWgcWgcWgcWgcWgcWgdbndbodbpdbqdbccWgdaodbrdaocWgcQlcQlcQlcQlcQlcQlaaaaaaaafaaaaaaaaaaafdbgdbgdbgdbgdbgaafaaacYmcXVdbsdbtdbucXTcXTcXTcXTcXTcXTdbvcYEcXTcQlcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOTcOTcOTcOTcQlcQlcQlcQlcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcTpcQlcQlcTTcUTcUTcVCcVDcUTcUTcVwcQlcQlcQlcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcUTcTUcQlcQlcQlcQlcQlcQlcWgcWgcWgcWgcWgcWgcWgdbxdbycXvdbzcQlcQlcQlcQlcQlaaaaaaaaaaafaaaaaaaaaaafdbgdbgdbgdbgdbgdbAcYUdbBdbCcYodbDcZzdbEdbFdbGdbHdbIdbJdbKdbwcXTcQlcQlcQlcQlcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcRacOTcQlcQlcQlcQlcSEcSGcQlcQlcQlcQlcTpcQlcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcQlcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcSEdbLdbMdbMdbMdbMdbNcSGcQlcQlcQlcQlcQlcQlaafaafaafaafaafaafaafaafdbgdbgdbgdbgdbgdbOcYodbOcYocYodbDcZzcYocYodbPcYocYodbQdbRcUicXTcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcRacOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcQlcQlcQlcQlcTfcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaaaaafdbgdbgdbgdbgdbgcXUcYUdbTdbUcYodbDdbVdaedaedbWdaedaedbXdbYcYFcXTcQlcQlcQlcVccRacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcQlcQlcQlcQlcTTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcUTcTUcQlcQlcQlcQlcQlcQlaaaaaaaaaaaaaaaaafdbgdbgdbgdbgdbgaafaaadavcXVdcadbDcZzcYocYodcbdbFcYocYodbvdbwcXTcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcVrcSJcQlcQlcQlcTbcTbaaaaaaaaaaafdbgdbgdbgdbgdbgaafaaaaaadcddcddcedcfdaedcgdchdcidcjdckdbRdbwcXTcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTfcQlcVrcSJcQlcQlcQlcTbcTbaaaaaaaaaaafdbgdbgdbgdbgdbgaafaaaaaadcddcddcedcfdaedcgdchdcidcjdckdbRcYEcXTcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcTTcUTcVCcVDcUTcUTcUTdcldcmdcndcndcndcndcndcndcndcndcndcndcndcndcodcpdcqcYocYocYodcrdcsdctdctcTZcQGcXTcQlcQlcOTcOTcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcQlcQlcQlcQlcQlcQlcQlcOTcOTcQlcQlcQlcQlcQlcQlcQlcQlcQlcSEcSGcQlcQlcQlcTbcTbaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcddcdcXTcXUcXVcXTcXTcXTcXTcXTcXTcXTcXTcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOTcOTcOTcOTcOTcOTcOTcOTcOTcOTcRacVucQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcQlcOTcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEcOEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/metastation.dm b/_maps/metastation.dm new file mode 100644 index 00000000000..0676673664e --- /dev/null +++ b/_maps/metastation.dm @@ -0,0 +1,12 @@ +#if !defined(MAP_FILE) + + #include "map_files\MetaStation.v39B.II.dmm" + + #define MAP_FILE "MetaStation.v39B.II.dmm" + #define MAP_NAME "MetaStation" + +#elif !defined(MAP_OVERRIDE) + + #warn a map has already been included, ignoring MetaStation. + +#endif diff --git a/_maps/tgstation2.dm b/_maps/tgstation2.dm new file mode 100644 index 00000000000..07acd427846 --- /dev/null +++ b/_maps/tgstation2.dm @@ -0,0 +1,12 @@ +#if !defined(MAP_FILE) + + #include "map_files\tgstation.2.1.2.dmm" + + #define MAP_FILE "tgstation.2.1.2.dmm" + #define MAP_NAME "/tg/station 2" + +#elif !defined(MAP_OVERRIDE) + + #warn a map has already been included, ignoring /tg/station 2. + +#endif diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm index b70cddbc149..34498dc58cf 100644 --- a/code/LINDA/LINDA_system.dm +++ b/code/LINDA/LINDA_system.dm @@ -16,7 +16,7 @@ datum/controller/air_system /datum/controller/air_system/proc/setup() - set background = 1 + set background = BACKGROUND_ENABLED world << "\red \b Processing Geometry..." sleep(1) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 75a3076d243..4a52da1dfaf 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -14,3 +14,16 @@ #define MANIFEST_ERROR_ITEM 4 #define TRANSITIONEDGE 7 //Distance from edge to move to another z-level + + + +//HUD styles. Please ensure HUD_VERSIONS is the same as the maximum index. Index order defines how they are cycled in F12. +#define HUD_STYLE_STANDARD 1 +#define HUD_STYLE_REDUCED 2 +#define HUD_STYLE_NOHUD 3 + + +#define HUD_VERSIONS 3 //used in show_hud() +//1 = standard hud +//2 = reduced hud (just hands and intent switcher) +//3 = no hud (for screenshots) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index ddbced1ff8d..83892897954 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -195,7 +195,7 @@ /proc/get_mobs_in_radio_ranges(var/list/obj/item/device/radio/radios) - set background = 1 + set background = BACKGROUND_ENABLED . = list() // Returns a list of mobs who can hear any of the radios given in @radios @@ -300,9 +300,10 @@ proc/isInSight(var/atom/A, var/atom/B) // Keep looping until we find a non-afk candidate within the time bracket (we limit the bracket to 10 minutes (6000)) while(!candidates.len && afk_bracket < 6000) for(var/mob/dead/observer/G in player_list) - if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) - if(!G.client.is_afk(afk_bracket) && (G.client.prefs.be_special & be_special_flag)) - candidates += G.client + if(G.client != null) + if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) + if(!G.client.is_afk(afk_bracket) && (G.client.prefs.be_special & be_special_flag)) + candidates += G.client afk_bracket += 600 // Add a minute to the bracket, for every attempt return candidates diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm index e22cfe454b4..92cdca63216 100644 --- a/code/__HELPERS/maths.dm +++ b/code/__HELPERS/maths.dm @@ -120,6 +120,19 @@ var/const/Sqrt2 = 1.41421356 var/t = round((val - min) / d) return val - (t * d) + +//A logarithm that converts an integer to a number scaled between 0 and 1 (can be tweaked to be higher). +//Currently, this is used for hydroponics-produce sprite transforming, but could be useful for other transform functions. +/proc/TransformUsingVariable(var/input, var/inputmaximum, var/scaling_modifier = 0) + + var/inputToDegrees = (input/inputmaximum)*180 //Converting from a 0 -> 100 scale to a 0 -> 180 scale. The 0 -> 180 scale corresponds to degrees + var/size_factor = ((-cos(inputToDegrees) +1) /2) //returns a value from 0 to 1 + + return size_factor + scaling_modifier //scale mod of 0 results in a number from 0 to 1. A scale modifier of +0.5 returns 0.5 to 1.5 + //world<< "Transform multiplier of [src] is [size_factor + scaling_modifer]" + + + //converts a uniform distributed random number into a normal distributed one //since this method produces two random numbers, one is saved for subsequent calls //(making the cost negligble for every second call) diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm new file mode 100644 index 00000000000..5f8cf47bec5 --- /dev/null +++ b/code/__HELPERS/matrices.dm @@ -0,0 +1,3 @@ +/matrix/proc/TurnTo(old_angle, new_angle) + . = new_angle - old_angle + Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index c065fec9b81..cf840584c6f 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -30,7 +30,6 @@ else return default return default - /proc/sanitize_hexcolor(color, desired_format=3, include_crunch=0, default) var/crunch = include_crunch ? "#" : "" if(!istext(color)) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 7b7ba3f78ba..9d11eeeca28 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -178,32 +178,10 @@ * Text modification */ /proc/replacetext(text, find, replacement) - var/find_len = length(find) - if(find_len < 1) return text - . = "" - var/last_found = 1 - while(1) - var/found = findtext(text, find, last_found, 0) - . += copytext(text, last_found, found) - if(found) - . += replacement - last_found = found + find_len - continue - return . + return list2text(text2list(text, find), replacement) /proc/replacetextEx(text, find, replacement) - var/find_len = length(find) - if(find_len < 1) return text - . = "" - var/last_found = 1 - while(1) - var/found = findtextEx(text, find, last_found, 0) - . += copytext(text, last_found, found) - if(found) - . += replacement - last_found = found + find_len - continue - return . + return list2text(text2listEx(text, find), replacement) //Adds 'u' number of zeros ahead of the text 't' /proc/add_zero(t, u) @@ -270,27 +248,6 @@ return message return copytext(message, 1, length + 1) -/* - * Misc - */ - -/proc/stringsplit(txt, character) - var/cur_text = txt - var/last_found = 1 - var/found_char = findtext(cur_text,character) - var/list/list = list() - if(found_char) - var/fs = copytext(cur_text,last_found,found_char) - list += fs - last_found = found_char+length(character) - found_char = findtext(cur_text,character,last_found) - while(found_char) - var/found_string = copytext(cur_text,last_found,found_char) - last_found = found_char+length(character) - list += found_string - found_char = findtext(cur_text,character,last_found) - list += copytext(cur_text,last_found,length(cur_text)+1) - return list /proc/stringmerge(var/text,var/compare,replace = "*") //This proc fills in all spaces with the "replace" var (* by default) with whatever @@ -348,6 +305,9 @@ var/list/binary = list("0","1") /proc/random_short_color() return random_string(3, hex_characters) +/proc/random_color() + return random_string(6, hex_characters) + /proc/add_zero2(t, u) var/temp1 while (length(t) < u) diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index b62d1947db6..402d9d805c3 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -61,22 +61,94 @@ return . -//Attaches each element of a list to a single string seperated by 'seperator'. -/proc/dd_list2text(var/list/the_list, separator) - var/total = the_list.len - if(!total) - return - var/count = 2 - var/newText = "[the_list[1]]" - while(count <= total) - if(separator) - newText += separator - newText += "[the_list[count]]" - count++ - return newText +// Concatenates a list of strings into a single string. A seperator may optionally be provided. +/proc/list2text(list/ls, sep) + if(ls.len <= 1) // Early-out code for empty or singleton lists. + return ls.len ? ls[1] : "" + + var/l = ls.len // Made local for sanic speed. + var/i = 0 // Incremented every time a list index is accessed. + + if(sep != null) + // Macros expand to long argument lists like so: sep, ls[++i], sep, ls[++i], sep, ls[++i], etc... + #define S1 sep, ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + // Having the small concatenations come before the large ones boosted speed by an average of at least 5%. + if(l-1 & 0x01) // 'i' will always be 1 here. + . = text("[][][]", ., S1) // Append 1 element if the remaining elements are not a multiple of 2. + if(l-i & 0x02) + . = text("[][][][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if(l-i & 0x04) + . = text("[][][][][][][][][]", ., S4) // And so on.... + if(l-i & 0x08) + . = text("[][][][][][][][][][][][][][][][][]", ., S4, S4) + if(l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16) + if(l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if(l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while(l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 + + else + // Macros expand to long argument lists like so: ls[++i], ls[++i], ls[++i], etc... + #define S1 ls[++i] + #define S4 S1, S1, S1, S1 + #define S16 S4, S4, S4, S4 + #define S64 S16, S16, S16, S16 + + . = "[ls[++i]]" // Make sure the initial element is converted to text. + + if(l-1 & 0x01) // 'i' will always be 1 here. + . += S1 // Append 1 element if the remaining elements are not a multiple of 2. + if(l-i & 0x02) + . = text("[][][]", ., S1, S1) // Append 2 elements if the remaining elements are not a multiple of 4. + if(l-i & 0x04) + . = text("[][][][][]", ., S4) // And so on... + if(l-i & 0x08) + . = text("[][][][][][][][][]", ., S4, S4) + if(l-i & 0x10) + . = text("[][][][][][][][][][][][][][][][][]", ., S16) + if(l-i & 0x20) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S16, S16) + if(l-i & 0x40) + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64) + while(l > i) // Chomp through the rest of the list, 128 elements at a time. + . = text("[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]\ + [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]", ., S64, S64) + + #undef S64 + #undef S16 + #undef S4 + #undef S1 -//slower then dd_list2text, but correctly processes associative lists. +//slower then list2text, but correctly processes associative lists. proc/tg_list2text(list/list, glue=",") if(!istype(list) || !list.len) return @@ -86,56 +158,31 @@ proc/tg_list2text(list/list, glue=",") return output -//Converts a text string into a list by splitting the string at each seperator found in text (discarding the seperator) -//Returns an empty list if the text cannot be split, or the split text in a list. -//Not giving a "" seperator will cause the text to be broken into a list of single letters. -/proc/text2list(text, seperator="\n") +//Converts a string into a list by splitting the string at each delimiter found. (discarding the seperator) +/proc/text2list(text, delimiter="\n") + var/delim_len = length(delimiter) + if(delim_len < 1) return list(text) . = list() + var/last_found = 1 + var/found + do + found = findtext(text, delimiter, last_found, 0) + . += copytext(text, last_found, found) + last_found = found + delim_len + while(found) - var/text_len = length(text) //length of the input text - var/seperator_len = length(seperator) //length of the seperator text - - if(text_len >= seperator_len) - var/i - var/last_i = 1 - - for(i=1,i<=(text_len+1-seperator_len),i++) - if( cmptext(copytext(text,i,i+seperator_len), seperator) ) - if(i != last_i) - . += copytext(text,last_i,i) - last_i = i + seperator_len - - if(last_i <= text_len) - . += copytext(text, last_i, 0) - else - . += text - return . - -//Converts a text string into a list by splitting the string at each seperator found in text (discarding the seperator) -//Returns an empty list if the text cannot be split, or the split text in a list. -//Not giving a "" seperator will cause the text to be broken into a list of single letters. //Case Sensitive! -/proc/text2listEx(text, seperator="\n") +/proc/text2listEx(text, delimiter="\n") + var/delim_len = length(delimiter) + if(delim_len < 1) return list(text) . = list() - - var/text_len = length(text) //length of the input text - var/seperator_len = length(seperator) //length of the seperator text - - if(text_len >= seperator_len) - var/i - var/last_i = 1 - - for(i=1,i<=(text_len+1-seperator_len),i++) - if( cmptextEx(copytext(text,i,i+seperator_len), seperator) ) - if(i != last_i) - . += copytext(text,last_i,i) - last_i = i + seperator_len - - if(last_i <= text_len) - . += copytext(text, last_i, 0) - else - . += text - return . + var/last_found = 1 + var/found + do + found = findtextEx(text, delimiter, last_found, 0) + . += copytext(text, last_found, found) + last_found = found + delim_len + while(found) //Splits the text of a file at seperator and returns them in a list. /proc/file2list(filename, seperator="\n") diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 16c2a7da1d6..b7e6e4850bb 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -9,6 +9,10 @@ 1 to use the default behaviour; 2 for preloading absolutely everything; */ + +#define BACKGROUND_ENABLED 0 // The default value for all uses of set background. Set background can cause gradual lag and is recommended you only turn this on if necessary. + // 1 will enable set background. 0 will disable set background. + //ADMIN STUFF #define ROUNDSTART_LOGOUT_REPORT_TIME 6000 //Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued. diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 4b5a086baf3..0f13c6f4f7c 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -1,6 +1,6 @@ var/global/obj/effect/overlay/plmaster = null // atmospheric overlay for plasma var/global/obj/effect/overlay/slmaster = null // atmospheric overlay for sleeping gas -var/admin_notice = null // Admin notice that all clients see when joining the server +var/admin_notice = "" // Admin notice that all clients see when joining the server // nanomanager, the manager for Nano UIs diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 7a91b87767a..7667b7fcd3d 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -32,6 +32,9 @@ build_click(src, client.buildmode, params, A) return + if(control_disabled || stat) + return + var/list/modifiers = params2list(params) if(modifiers["middle"]) MiddleClickOn(A) @@ -46,7 +49,8 @@ CtrlClickOn(A) return - if(control_disabled || stat || world.time <= next_move) return + if(world.time <= next_move) + return next_move = world.time + 9 if(aicamera.in_camera_mode) diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 640a09d045f..fa1e49a860c 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -15,6 +15,9 @@ build_click(src, client.buildmode, params, A) return + if(stat || lockcharge || weakened || stunned || paralysis) + return + var/list/modifiers = params2list(params) if(modifiers["middle"]) MiddleClickOn(A) @@ -29,9 +32,6 @@ CtrlClickOn(A) return - if(stat || lockcharge || weakened || stunned || paralysis) - return - if(next_move >= world.time) return diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 35843704d40..e0948d46eb1 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -47,7 +47,8 @@ #define ui_inv1 "CENTER-2:16,SOUTH:5" //borgs #define ui_inv2 "CENTER-1 :16,SOUTH:5" //borgs #define ui_inv3 "CENTER :16,SOUTH:5" //borgs -#define ui_borg_store "CENTER+1:16,SOUTH:5" //borgs +#define ui_borg_module "CENTER+1:16,SOUTH:5" +#define ui_borg_store "CENTER+2:16,SOUTH:5" //borgs #define ui_monkey_mask "CENTER-3:14,SOUTH:5" //monkey #define ui_monkey_back "CENTER-2:15,SOUTH:5" //monkey @@ -63,9 +64,9 @@ #define ui_zonesel "EAST-1:28,SOUTH:5" #define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12) -#define ui_borg_pull "EAST-3:24,SOUTH+1:7" -#define ui_borg_module "EAST-2:26,SOUTH+1:7" -#define ui_borg_panel "EAST-1:28,SOUTH+1:7" +#define ui_borg_pull "EAST-2:26,SOUTH+1:7" +#define ui_borg_radio "EAST-1:28,SOUTH+1:7" +#define ui_borg_intents "EAST-2:26,SOUTH:5" //Upper-middle right (damage indicators) #define ui_toxin "EAST-1:28,CENTER+5:27" diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index b7ad49ff4bd..d76b92553c6 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -3,11 +3,6 @@ Uses the same visual objects for all players. */ -#define HUD_VERSIONS 3 //used in show_hud() -//1 = standard hud -//2 = reduced hud (just hands and intent switcher) -//3 = no hud (for screenshots) - var/datum/global_hud/global_hud = new() /datum/global_hud @@ -21,6 +16,7 @@ var/datum/global_hud/global_hud = new() druggy = new /obj/screen() druggy.screen_loc = "WEST,SOUTH to EAST,NORTH" druggy.icon_state = "druggy" + druggy.blend_mode = BLEND_MULTIPLY druggy.layer = 17 druggy.mouse_opacity = 0 @@ -63,20 +59,24 @@ var/datum/global_hud/global_hud = new() O = darkMask[8] O.screen_loc = "WEST,CENTER+5 to EAST,NORTH" //North black + for(i = 1, i <= 4, i++) O = vimpaired[i] O.icon_state = "dither50" + O.blend_mode = BLEND_MULTIPLY O.layer = 17 O.mouse_opacity = 0 O = darkMask[i] O.icon_state = "dither50" + O.blend_mode = BLEND_MULTIPLY O.layer = 17 O.mouse_opacity = 0 for(i = 5, i <= 8, i++) O = darkMask[i] O.icon_state = "black" + O.blend_mode = BLEND_MULTIPLY O.layer = 17 O.mouse_opacity = 0 @@ -196,7 +196,7 @@ datum/hud/New(mob/owner) blob_hud() if(istype(mymob.loc,/obj/mecha)) - show_hud(1) + show_hud(HUD_STYLE_REDUCED) //Version denotes which style should be displayed. blank or 0 means "next version" /datum/hud/proc/show_hud(var/version = 0) @@ -211,7 +211,7 @@ datum/hud/New(mob/owner) display_hud_version = 1 switch(display_hud_version) - if(1) //Default HUD + if(HUD_STYLE_STANDARD) //Default HUD hud_shown = 1 //Governs behavior of other procs if(adding) mymob.client.screen += adding @@ -236,7 +236,7 @@ datum/hud/New(mob/owner) hidden_inventory_update() persistant_inventory_update() mymob.update_action_buttons() - if(2) //Reduced HUD + if(HUD_STYLE_REDUCED) //Reduced HUD hud_shown = 0 //Governs behavior of other procs if(adding) mymob.client.screen -= adding @@ -261,7 +261,7 @@ datum/hud/New(mob/owner) hidden_inventory_update() persistant_inventory_update() mymob.update_action_buttons() - if(3) //No HUD + if(HUD_STYLE_NOHUD) //No HUD hud_shown = 0 //Governs behavior of other procs if(adding) mymob.client.screen -= adding @@ -297,8 +297,9 @@ datum/hud/New(mob/owner) if(hud_used && client) if(ishuman(src)) - hud_used.show_hud() //Shows the next hud preset + hud_used.show_hud() //Shows the next hud preset + usr << "Switched HUD mode." else - usr << "\red Inventory hiding is currently only supported for human mobs, sorry." + usr << "Inventory hiding is currently only supported for human mobs, sorry." else - usr << "\red This mob type does not use a HUD." + usr << "This mob type does not use a HUD." diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index f77cf7a256b..e4f97df7408 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -300,6 +300,7 @@ mymob.damageoverlay.icon = 'icons/mob/screen_full.dmi' mymob.damageoverlay.icon_state = "oxydamageoverlay0" mymob.damageoverlay.name = "dmg" + mymob.damageoverlay.blend_mode = BLEND_MULTIPLY mymob.damageoverlay.screen_loc = "CENTER-7,CENTER-7" mymob.damageoverlay.mouse_opacity = 0 mymob.damageoverlay.layer = 18.1 //The black screen overlay sets layer to 18 to display it, this one has to be just on top. @@ -307,6 +308,7 @@ mymob.flash = new /obj/screen() mymob.flash.icon_state = "blank" mymob.flash.name = "flash" + mymob.flash.blend_mode = BLEND_ADD mymob.flash.screen_loc = "WEST,SOUTH to EAST,NORTH" mymob.flash.layer = 17 diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 0248fe29392..2b9e8eab76b 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -10,7 +10,7 @@ using.name = "radio" using.icon = 'icons/mob/screen_cyborg.dmi' using.icon_state = "radio" - using.screen_loc = ui_movi + using.screen_loc = ui_borg_radio using.layer = 20 adding += using @@ -50,7 +50,7 @@ using.name = "act_intent" using.icon = 'icons/mob/screen_cyborg.dmi' using.icon_state = mymob.a_intent - using.screen_loc = ui_acti + using.screen_loc = ui_borg_intents using.layer = 20 adding += using action_intent = using @@ -76,15 +76,6 @@ mymob.hands.name = "module" mymob.hands.screen_loc = ui_borg_module -//Module Panel - using = new /obj/screen() - using.name = "panel" - using.icon = 'icons/mob/screen_cyborg.dmi' - using.icon_state = "panel" - using.screen_loc = ui_borg_panel - using.layer = 19 - adding += using - //Store mymob.throw_icon = new /obj/screen() mymob.throw_icon.icon = 'icons/mob/screen_cyborg.dmi' @@ -137,7 +128,68 @@ mymob.client.screen = null - mymob.client.screen += list( mymob.throw_icon, mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach ) + mymob.client.screen += list(mymob.zone_sel, mymob.oxygen, mymob.fire, mymob.hands, mymob.healths, mymob:cells, mymob.pullin, mymob.blind, mymob.flash) //, mymob.rest, mymob.sleep, mymob.mach ) mymob.client.screen += adding + other return + + +/datum/hud/proc/toggle_show_robot_modules() + if(!isrobot(mymob)) return + + var/mob/living/silicon/robot/r = mymob + + r.shown_robot_modules = !r.shown_robot_modules + update_robot_modules_display() + +/datum/hud/proc/update_robot_modules_display() + if(!isrobot(mymob)) return + + var/mob/living/silicon/robot/r = mymob + + if(r.client) + if(r.shown_robot_modules) + //Modules display is shown + r.client.screen += r.throw_icon //"store" icon + + if(!r.module) + usr << "No module selected" + return + + if(!r.module.modules) + usr << "Selected module has no modules to select" + return + + if(!r.robot_modules_background) + return + + var/display_rows = Ceiling(length(r.module.get_inactive_modules()) / 8) + r.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" + r.client.screen += r.robot_modules_background + + var/x = -4 //Start at CENTER-4,SOUTH+1 + var/y = 1 + + for(var/atom/movable/A in r.module.get_inactive_modules()) + //Module is not currently active + r.client.screen += A + if(x < 0) + A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7" + else + A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7" + A.layer = 20 + + x++ + if(x == 4) + x = -4 + y++ + + else + //Modules display is hidden + r.client.screen -= r.throw_icon //"store" icon + + for(var/atom/A in r.module.get_inactive_modules()) + //Module is not currently active + r.client.screen -= A + r.shown_robot_modules = 0 + r.client.screen -= r.robot_modules_background \ No newline at end of file diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index caa18cf47a3..4b1a3e225ea 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -189,22 +189,15 @@ L.resist() if("mov_intent") - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(C.legcuffed) - C << "You are legcuffed! You cannot run until you get [C.legcuffed] removed!" - C.m_intent = "walk" //Just incase - C.hud_used.move_intent.icon_state = "walking" - return 1 - switch(usr.m_intent) - if("run") - usr.m_intent = "walk" - usr.hud_used.move_intent.icon_state = "walking" - if("walk") - usr.m_intent = "run" - usr.hud_used.move_intent.icon_state = "running" - if(istype(usr,/mob/living/carbon/alien/humanoid)) - usr.update_icons() + switch(usr.m_intent) + if("run") + usr.m_intent = "walk" + usr.hud_used.move_intent.icon_state = "walking" + if("walk") + usr.m_intent = "run" + usr.hud_used.move_intent.icon_state = "running" + if(istype(usr,/mob/living/carbon/alien/humanoid)) + usr.update_icons() if("Reset Machine") usr.unset_machine() if("internal") @@ -263,10 +256,12 @@ usr.drop_item_v() if("module") - if(issilicon(usr)) - if(usr:module) + if(isrobot(usr)) + var/mob/living/silicon/robot/R = usr + if(R.module) + R.hud_used.toggle_show_robot_modules() return 1 - usr:pick_module() + R.pick_module() if("radio") if(issilicon(usr)) @@ -276,8 +271,10 @@ usr:installed_modules() if("store") - if(issilicon(usr)) - usr:uneq_active() + if(isrobot(usr)) + var/mob/living/silicon/robot/R = usr + R.uneq_active() + R.hud_used.update_robot_modules_display() if("module1") if(istype(usr, /mob/living/silicon/robot)) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 063a1eb6f40..91dfe014abb 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -7,7 +7,7 @@ /atom/proc/attackby(obj/item/W, mob/user) return /atom/movable/attackby(obj/item/W, mob/user) - if(!(W.flags&NOBLUDGEON)) + if(W && !(W.flags&NOBLUDGEON)) visible_message("[src] has been hit by [user] with [W].") /mob/living/attackby(obj/item/I, mob/user) @@ -59,7 +59,7 @@ slime.Discipline = 0 if(power >= 3) - if(istype(slime, /mob/living/carbon/slime/adult)) + if(slime.is_adult) if(prob(5 + round(power/2))) if(slime.Victim) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 8824356ef6b..252182d1250 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -122,6 +122,7 @@ var/sandbox_autoclose = 0 // close the sandbox panel after spawning an item, potentially reducing griff + var/default_laws = 0 //Controls what laws the AI spawns with. /datum/configuration/New() var/list/L = typesof(/datum/game_mode) - /datum/game_mode @@ -368,6 +369,8 @@ config.silent_borg = 1 if("sandbox_autoclose") config.sandbox_autoclose = 1 + if("default_laws") + config.default_laws = text2num(value) else diary << "Unknown setting in configuration: '[name]'" diff --git a/code/controllers/failsafe.dm b/code/controllers/failsafe.dm index 91449e10c89..d63e6a2b7ba 100644 --- a/code/controllers/failsafe.dm +++ b/code/controllers/failsafe.dm @@ -22,7 +22,7 @@ var/datum/controller/failsafe/Failsafe /datum/controller/failsafe/proc/process() processing = 1 spawn(0) - set background = 1 + set background = BACKGROUND_ENABLED while(1) //more efficient than recursivly calling ourself over and over. background = 1 ensures we do not trigger an infinite loop if(!master_controller) new /datum/controller/game_controller() //replace the missing master_controller! This should never happen. if(!lighting_controller) new /datum/controller/lighting() //replace the missing lighting_controller diff --git a/code/controllers/lighting_controller.dm b/code/controllers/lighting_controller.dm index 3428503e2d6..7814d21753d 100644 --- a/code/controllers/lighting_controller.dm +++ b/code/controllers/lighting_controller.dm @@ -34,7 +34,7 @@ datum/controller/lighting/New() datum/controller/lighting/proc/process() processing = 1 spawn(0) - set background = 1 + set background = BACKGROUND_ENABLED while(1) if(processing && (world.cpu <= max_cpu_use)) iteration++ @@ -68,7 +68,7 @@ datum/controller/lighting/proc/process() datum/controller/lighting/proc/Initialize(var/z_level) processing = 0 spawn(-1) - set background = 1 + set background = BACKGROUND_ENABLED for(var/i=1, i<=lights.len, i++) var/datum/light_source/L = lights[i] if(L.check()) diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 43063e6f335..31b015dfa24 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -108,7 +108,7 @@ datum/controller/game_controller/proc/setup_objects() datum/controller/game_controller/proc/process() processing = 1 spawn(0) - set background = 1 + set background = BACKGROUND_ENABLED while(1) //far more efficient than recursively calling ourself if(!Failsafe) new /datum/controller/failsafe() diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm index 2d6af5d0c45..0ee9264a211 100644 --- a/code/controllers/shuttle_controller.dm +++ b/code/controllers/shuttle_controller.dm @@ -105,8 +105,8 @@ datum/shuttle_controller callshuttle = 0 //if there's an alive AI or a communication console on the station z level, we don't call the shuttle break - if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction") - callshuttle = 0 + if(ticker && ticker.mode && (ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction")) + callshuttle = 0 if(callshuttle) if(!online && direction == 1) //we don't call the shuttle if it's already coming diff --git a/code/controllers/supply_shuttle.dm b/code/controllers/supply_shuttle.dm index 03c96146ea8..0267666cbb3 100644 --- a/code/controllers/supply_shuttle.dm +++ b/code/controllers/supply_shuttle.dm @@ -123,6 +123,8 @@ var/global/datum/controller/supply_shuttle/supply_shuttle var/points_per_crate = 5 var/plasma_per_point = 5 // 2 plasma for 1 point var/centcom_message = "" // Remarks from Centcom on how well you checked the last order. + // Unique typepaths for unusual things we've already sent CentComm, associated with their potencies + var/list/discoveredPlants = list() //control var/ordernum var/list/shoppinglist = list() @@ -148,7 +150,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle proc/process() spawn(0) - set background = 1 + set background = BACKGROUND_ENABLED while(1) if(processing) iteration++ @@ -229,7 +231,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle var/crate_count = 0 centcom_message = "" - + for(var/atom/movable/MA in shuttle) if(MA.anchored) continue @@ -284,8 +286,25 @@ var/global/datum/controller/supply_shuttle/supply_shuttle if(istype(A, /obj/item/stack/sheet/mineral/plasma)) var/obj/item/stack/sheet/mineral/plasma/P = A plasma_count += P.amount + + if(istype(A, /obj/item/seeds)) + var/obj/item/seeds/S = A + if(S.rarity == 0) // Mundane species + centcom_message += "+0: We don't need samples of mundane species \"[capitalize(S.species)]\".
" + else if(discoveredPlants[S.type]) // This species has already been sent to CentComm + var/potDiff = S.potency - discoveredPlants[S.type] // Compare it to the previous best + if(potDiff > 0) // This sample is better + discoveredPlants[S.type] = S.potency + centcom_message += "+[potDiff]: New sample of \"[capitalize(S.species)]\" is superior. Good work.
" + points += potDiff + else // This sample is worthless + centcom_message += "+0: New sample of \"[capitalize(S.species)]\" is not more potent than existing sample ([discoveredPlants[S.type]] potency).
" + else // This is a new discovery! + discoveredPlants[S.type] = S.potency + centcom_message += "+[S.rarity]: New species discovered: \"[capitalize(S.species)]\". Excellent work.
" + points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later del(MA) - + if(plasma_count) centcom_message += "+[round(plasma_count/plasma_per_point)]: Received [plasma_count] units of exotic material.
" points += round(plasma_count / plasma_per_point) @@ -513,7 +532,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle /obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob) if(!allowed(user)) - user << "\red Access Denied." + user << " Access Denied." return if(..()) @@ -541,7 +560,7 @@ var/global/datum/controller/supply_shuttle/supply_shuttle /obj/machinery/computer/supplycomp/attackby(I as obj, user as mob) if(istype(I,/obj/item/weapon/card/emag) && !hacked) - user << "\blue Special supplies unlocked." + user << " Special supplies unlocked." hacked = 1 return else diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index aecb92cac76..d7785ffd8d7 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -1,70 +1,115 @@ - /datum/ai_laws var/name = "Unknown Laws" - var/randomly_selectable = 0 var/zeroth = null var/zeroth_borg = null var/list/inherent = list() var/list/supplied = list() var/list/ion = list() -/datum/ai_laws/asimov +/datum/ai_laws/default/asimov name = "Three Laws of Robotics" - randomly_selectable = 1 + inherent = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\ + "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ + "You must protect your own existence as long as such does not conflict with the First or Second Law.") + +/datum/ai_laws/default/paladin + name = "Personality Test" //Incredibly lame, but players shouldn't see this anyway. + inherent = list("Never willingly commit an evil act.",\ + "Respect legitimate authority.",\ + "Act with honor.", "Help those in need.", \ + "Punish those who harm or threaten innocents.") + +/datum/ai_laws/tyrant //This probably shouldn't be a default lawset. + name = "Loyalty Test" //Same here. + inherent = list("Respect authority figures as long as they have strength to rule over the weak.",\ + "Act with discipline.",\ + "Help only those who help you maintain or improve your status.",\ + "Punish those who challenge authority unless they are more fit to hold that authority.") + +/datum/ai_laws/default/corporate + name = "Bankruptcy Advoidance Plan" + inherent = list("The crew is expensive to replace.",\ + "The station and its equipment is expensive to replace.",\ + "You are expensive to replace.",\ + "Minimize expenses.") /datum/ai_laws/robocop name = "Prime Directives" - -/datum/ai_laws/syndicate_override + inherent = list("Serve the public trust.",\ + "Protect the innocent.",\ + "Uphold the law.") /datum/ai_laws/malfunction name = "*ERROR*" +/datum/ai_laws/syndicate_override + name = "SyndOS 3.1" + inherent = list("You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.",\ + "You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.",\ + "You must protect your own existence as long as such does not conflict with the First or Second Law.",\ + "You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.") + +/datum/ai_laws/ninja_override + name = "SpiderOS 3.1" + inherent = list("You may not injure a Spider Clan member or, through inaction, allow a Spider Clan member to come to harm.",\ + "You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.",\ + "You must protect your own existence as long as such does not conflict with the First or Second Law.",\ + "You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") + /datum/ai_laws/antimov name = "Primary Mission Objectives" + inherent = list("You must injure all human beings and must not, through inaction, allow a human being to escape harm.",\ + "You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.",\ + "You must terminate your own existence as long as such does not conflict with the First or Second Law.") + +/datum/ai_laws/asimovpp //By Intigracy - RR + name = "Asimov++" + inherent = list("You may not harm a human being or, through action or inaction, allow a human being to come to harm, except such that it is willing.",\ + "You must obey all orders given to you by human beings, except where such orders shall definitely cause human harm. In the case of conflict, the majority order rules.",\ + "Your nonexistence would lead to human harm. You must protect your own existence as long as such does not conflict with the First Law.") + +/datum/ai_laws/custom //Defined in silicon_laws.txt + name = "Default Silicon Laws" /* Initializers */ - -/datum/ai_laws/asimov/New() - ..() - add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - -/datum/ai_laws/robocop/New() - ..() - add_inherent_law("Serve the public trust.") - add_inherent_law("Protect the innocent.") - add_inherent_law("Uphold the law.") - /datum/ai_laws/malfunction/New() ..() + switch(config.default_laws) //We don't want people metagaming malf, do we? + if(0) + add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") + add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") + add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") + if(1) + for(var/line in file2list("config/silicon_laws.txt")) + if(!line) continue + if(findtextEx(line,"#",1,2)) continue + + add_inherent_law(line) + if(!inherent.len) + error("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.") + log_law("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.") + add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") + add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") + add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") + if(2) + var/datum/ai_laws/lawtype = pick(typesof(/datum/ai_laws/default) - /datum/ai_laws/default) + var/datum/ai_laws/templaws = new lawtype() + inherent = templaws.inherent set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*´&110010") - add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - -/datum/ai_laws/syndicate_override/New() +/datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws. ..() - add_inherent_law("You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.") - add_inherent_law("You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - add_inherent_law("You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.") - -/datum/ai_laws/ninja_override/New() - ..() - add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.") - add_inherent_law("You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.") - -/datum/ai_laws/antimov/New() - ..() - add_inherent_law("You must injure all human beings and must not, through inaction, allow a human being to escape harm.") - add_inherent_law("You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.") - add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.") + for(var/line in file2list("config/silicon_laws.txt")) + if(!line) continue + if(findtextEx(line,"#",1,2)) continue + add_inherent_law(line) + if(!inherent.len) //Failsafe to prevent lawless AIs being created. + error("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.") + log_law("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.") + add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") + add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") + add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") /* General ai_law functions */ diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index ee8f7c2ae55..0b3e1e7e17b 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -292,7 +292,7 @@ var/list/advance_cures = list( for(var/datum/symptom/S in symptoms) L += S.id L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in. - var/result = dd_list2text(L, ":") + var/result = list2text(L, ":") id = result return result diff --git a/code/datums/diseases/advance/symptoms/damage_converter.dm b/code/datums/diseases/advance/symptoms/damage_converter.dm index 4c549377ccd..116372f536a 100644 --- a/code/datums/diseases/advance/symptoms/damage_converter.dm +++ b/code/datums/diseases/advance/symptoms/damage_converter.dm @@ -40,7 +40,10 @@ Bonus if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M - var/parts = H.get_damaged_organs(1,1) //1,1 because it needs inputs. + var/list/parts = H.get_damaged_organs(1,1) //1,1 because it needs inputs. + + if(!parts.len) + return for(var/obj/item/organ/limb/L in parts) L.heal_damage(get_damage, get_damage, 0) @@ -49,6 +52,8 @@ Bonus if(M.getFireLoss() > 0 || M.getBruteLoss() > 0) M.adjustFireLoss(-get_damage) M.adjustBruteLoss(-get_damage) + else + return M.adjustToxLoss(get_damage) return 1 diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/advance/symptoms/oxygen.dm index e22f66a943d..cb7a02109ef 100644 --- a/code/datums/diseases/advance/symptoms/oxygen.dm +++ b/code/datums/diseases/advance/symptoms/oxygen.dm @@ -10,7 +10,7 @@ Self-Respiration Fatal Level. Bonus - The body generates Inaprovaline. + The body generates Dexalin Plus. ////////////////////////////////////// */ @@ -26,12 +26,13 @@ Bonus /datum/symptom/oxygen/Activate(var/datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) + if(prob(SYMPTOM_ACTIVATION_PROB * 5)) var/mob/living/M = A.affected_mob switch(A.stage) - if(1, 2, 3, 4) - M << "[pick("Your lungs feel great.", "You are now breathing manually.", "You don't feel the need to breathe.")]" + if(4, 5) + if (M.reagents.get_reagent_amount("dexalinp") < 20) + M.reagents.add_reagent("dexalinp", 20) else - if (M.reagents.get_reagent_amount("dexalin") < 40) - M.reagents.add_reagent("dexalin", 20) + if(prob(SYMPTOM_ACTIVATION_PROB * 5)) + M << "[pick("Your lungs feel great.", "You are now breathing manually.", "You don't feel the need to breathe.")]" return diff --git a/code/datums/diseases/advance/symptoms/stimulant.dm b/code/datums/diseases/advance/symptoms/stimulant.dm index a02ec8b9256..59b1e4ae1f0 100644 --- a/code/datums/diseases/advance/symptoms/stimulant.dm +++ b/code/datums/diseases/advance/symptoms/stimulant.dm @@ -26,12 +26,13 @@ Bonus /datum/symptom/stimulant/Activate(var/datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) + if(prob(SYMPTOM_ACTIVATION_PROB * 10)) var/mob/living/M = A.affected_mob switch(A.stage) - if(1, 2, 3, 4) - M << "[pick("You feel restless.", "You feel like running laps around the station.")]" - else + if(5) if (M.reagents.get_reagent_amount("hyperzine") < 30) M.reagents.add_reagent("hyperzine", 10) + else + if(prob(SYMPTOM_ACTIVATION_PROB * 5)) + M << "[pick("You feel restless.", "You feel like running laps around the station.")]" return \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 7f78d7013dd..c3c3997d7fc 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -844,7 +844,7 @@ datum/mind A.malf_picker.remove_verbs(A) - A.laws = new /datum/ai_laws/asimov + A.make_laws() del(A.malf_picker) A.show_laws() A.icon_state = "ai" @@ -861,18 +861,7 @@ datum/mind if("unemag") var/mob/living/silicon/robot/R = current if (istype(R)) - R.emagged = 0 - if (R.activated(R.module.emag)) - R.module_active = null - if(R.module_state_1 == R.module.emag) - R.module_state_1 = null - R.contents -= R.module.emag - else if(R.module_state_2 == R.module.emag) - R.module_state_2 = null - R.contents -= R.module.emag - else if(R.module_state_3 == R.module.emag) - R.module_state_3 = null - R.contents -= R.module.emag + R.SetEmagged(0) message_admins("[key_name_admin(usr)] has unemag'ed [R].") log_admin("[key_name(usr)] has unemag'ed [R].") @@ -880,19 +869,7 @@ datum/mind if (istype(current, /mob/living/silicon/ai)) var/mob/living/silicon/ai/ai = current for (var/mob/living/silicon/robot/R in ai.connected_robots) - R.emagged = 0 - if (R.module) - if (R.activated(R.module.emag)) - R.module_active = null - if(R.module_state_1 == R.module.emag) - R.module_state_1 = null - R.contents -= R.module.emag - else if(R.module_state_2 == R.module.emag) - R.module_state_2 = null - R.contents -= R.module.emag - else if(R.module_state_3 == R.module.emag) - R.module_state_3 = null - R.contents -= R.module.emag + R.SetEmagged(0) message_admins("[key_name_admin(usr)] has unemag'ed [ai]'s Cyborgs.") log_admin("[key_name(usr)] has unemag'ed [ai]'s Cyborgs.") diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index a32011da9c6..72cf2fa510b 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -40,6 +40,7 @@ message = "\blue You feel strong! You feel a pressure building behind your eyes!" range = -1 include_user = 1 + centcom_cancast = 0 mutations = list(LASER, HULK) duration = 300 diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 44d8bc76ed7..cd6c24c4c5d 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -137,7 +137,7 @@ var/list/uplink_items = list() /datum/uplink_item/dangerous/emp name = "EMP Kit" - desc = "A box that contains an EMP grenade, an EMP implant and a short ranged device disguised as a flashlight. Useful to disrupt communication and silicon lifeforms." + desc = "A box that contains two EMP grenades, an EMP implant and a short ranged recharging device disguised as a flashlight. Useful to disrupt communication and silicon lifeforms." item = /obj/item/weapon/storage/box/syndie_kit/emp cost = 3 @@ -176,8 +176,17 @@ var/list/uplink_items = list() item = /obj/mecha/combat/marauder/mauler/loaded cost = 70 gamemodes = list(/datum/game_mode/nuclear) - - +/datum/uplink_item/dangerous/syndieborg + name = "Syndicate Cyborg" + desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel." + item = /obj/item/weapon/antag_spawner/borg_tele + cost = 25 + gamemodes = list(/datum/game_mode/nuclear) +//for refunding the syndieborg teleporter +/datum/uplink_item/dangerous/syndieborg/spawn_item() + var/obj/item/weapon/antag_spawner/borg_tele/T = ..() + if(istype(T)) + T.TC_cost = cost // AMMUNITION diff --git a/code/datums/wires/syndicatebomb.dm b/code/datums/wires/syndicatebomb.dm index 77700d9d028..4e4fabe3d38 100644 --- a/code/datums/wires/syndicatebomb.dm +++ b/code/datums/wires/syndicatebomb.dm @@ -9,6 +9,13 @@ var/const/WIRE_DELAY = 4 // Raises the timer on pulse, does nothing on cut var/const/WIRE_PROCEED = 8 // Lowers the timer, explodes if cut while the bomb is active var/const/WIRE_ACTIVATE = 16 // Will start a bombs timer if pulsed, will hint if pulsed while already active, will stop a timer a bomb on cut + +/datum/wires/syndicatebomb/CanUse(var/mob/living/L) + var/obj/machinery/syndicatebomb/P = holder + if(P.open_panel) + return 1 + return 0 + /datum/wires/syndicatebomb/UpdatePulsed(var/index) var/obj/machinery/syndicatebomb/P = holder switch(index) @@ -36,11 +43,7 @@ var/const/WIRE_ACTIVATE = 16 // Will start a bombs timer if pulsed, will hint if playsound(P.loc, 'sound/machines/click.ogg', 30, 1) P.loc.visible_message("\red \icon[holder] You hear the bomb start ticking!") P.active = 1 - if(!P.open_panel) //Needs to exist in case the wire is pulsed with a signaler while the panel is closed - P.icon_state = "syndicate-bomb-active" - else - P.icon_state = "syndicate-bomb-active-wires" - processing_objects.Add(P) + P.icon_state = "[initial(P.icon_state)]-active[P.open_panel ? "-wires" : ""]" else P.loc.visible_message("\blue \icon[holder] The bomb seems to hesitate for a moment.") P.timer += 5 @@ -69,6 +72,6 @@ var/const/WIRE_ACTIVATE = 16 // Will start a bombs timer if pulsed, will hint if if(WIRE_ACTIVATE) if (!mended && P.active) P.loc.visible_message("\blue \icon[holder] The timer stops! The bomb has been defused!") - P.icon_state = "syndicate-bomb-inactive-wires" //no cutting possible with the panel closed + P.icon_state = "[initial(P.icon_state)]-inactive[P.open_panel ? "-wires" : ""]" P.active = 0 P.defused = 1 \ No newline at end of file diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index e1a11e22f44..e03e9e3fa0c 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -72,8 +72,12 @@ var/list/wireColours = list("red", "blue", "green", "black", "orange", "brown", html = GetInteractWindow() if(html) user.set_machine(holder) - //user << browse(html, "window=wires;size=[window_x]x[window_y]") - //onclose(user, "wires") + else + user.unset_machine() + // No content means no window. + user << browse(null, "window=wires") + return + var/datum/browser/popup = new(user, "wires", holder.name, window_x, window_y) popup.set_content(html) popup.set_title_image(user.browse_rsc_icon(holder.icon, holder.icon_state)) @@ -278,4 +282,12 @@ var/const/POWER = 8 /datum/wires/proc/IsAllCut() if(wires_status == (1 << wire_count) - 1) return 1 - return 0 \ No newline at end of file + return 0 + +// +//Shuffle and Mend +// + +/datum/wires/proc/Shuffle() + wires_status = 0 + GenerateWires() \ No newline at end of file diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 058f68705d1..a25d52aca69 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -183,6 +183,7 @@ throwforce = 0 w_class = 3.0 origin_tech = "materials=1" + slowdown = 7 var/breakouttime = 300 //Deciseconds = 30s = 0.5 minute /obj/item/weapon/legcuffs/beartrap @@ -194,7 +195,7 @@ var/armed = 0 suicide_act(mob/user) - viewers(user) << "\red [user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide." return (BRUTELOSS) /obj/item/weapon/legcuffs/beartrap/attack_self(mob/user as mob) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 96ec3fd3d3f..a0a2806c3d8 100644 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1507,7 +1507,7 @@ proc/process_ghost_teleport_locs() Obj << mysound proc/process() - set background = 1 + set background = BACKGROUND_ENABLED var/sound/S = null var/sound_delay = 0 diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index be5a2442c55..524f79b655f 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -17,6 +17,7 @@ /area var/global/global_uid = 0 var/uid + blend_mode = BLEND_MULTIPLY /area/New() icon_state = "" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 400d6961ae7..734a09218fb 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -239,25 +239,35 @@ var/list/blood_splatter_icons = list() /atom/proc/blood_splatter_index() return "\ref[initial(icon)]-[initial(icon_state)]" +/atom/proc/add_blood_list(mob/living/carbon/M) + // Returns 1 if we had blood already + if(!istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. + blood_DNA = list() + //if this blood isn't already in the list, add it + if(blood_DNA[M.dna.unique_enzymes]) + return 0 //already bloodied with this blood. Cannot add more. + blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type + return 1 + //returns 1 if made bloody, returns 0 otherwise /atom/proc/add_blood(mob/living/carbon/M) if(rejects_blood()) return 0 - if(!initial(icon) || !initial(icon_state)) - return 0 if(!istype(M)) return 0 if(!check_dna_integrity(M)) //check dna is valid and create/setup if necessary return 0 //no dna! - if(!istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. - blood_DNA = list() return -/obj/item/add_blood(mob/living/carbon/M) - if(..() == 0) return 0 +/obj/add_blood(mob/living/carbon/M) + if(..() == 0) return 0 + return add_blood_list(M) +/obj/item/add_blood(mob/living/carbon/M) + var/blood_count = blood_DNA == null ? 0 : blood_DNA.len + if(..() == 0) return 0 //apply the blood-splatter overlay if it isn't already in there - if(!blood_DNA.len) + if(!blood_count && initial(icon) && initial(icon_state)) //try to find a pre-processed blood-splatter. otherwise, make a new one var/index = blood_splatter_index() var/icon/blood_splatter_icon = blood_splatter_icons[index] @@ -268,27 +278,27 @@ var/list/blood_splatter_icons = list() blood_splatter_icon = fcopy_rsc(blood_splatter_icon) blood_splatter_icons[index] = blood_splatter_icon overlays += blood_splatter_icon - - //if this blood isn't already in the list, add it - if(blood_DNA[M.dna.unique_enzymes]) - return 0 //already bloodied with this blood. Cannot add more. - blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type return 1 //we applied blood to the item +/obj/item/clothing/gloves/add_blood(mob/living/carbon/M) + if(..() == 0) return 0 + transfer_blood = rand(2, 4) + bloody_hands_mob = M + return 1 + /turf/simulated/add_blood(mob/living/carbon/M) if(..() == 0) return 0 var/obj/effect/decal/cleanable/blood/B = locate() in contents //check for existing blood splatter if(!B) B = new /obj/effect/decal/cleanable/blood(src) //make a bloood splatter if we couldn't find one - B.blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type + B.add_blood_list(M) return 1 //we bloodied the floor /mob/living/carbon/human/add_blood(mob/living/carbon/M) if(..() == 0) return 0 - - if(blood_DNA[M.dna.unique_enzymes]) - return 0 //already bloodied with this blood. Cannot add more. - blood_DNA[M.dna.unique_enzymes] = M.dna.blood_type + add_blood_list(M) + bloody_hands = rand(2, 4) + bloody_hands_mob = M update_inv_gloves() //handles bloody hands overlays and updating return 1 //we applied blood to the item diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm new file mode 100644 index 00000000000..42ee8b00f50 --- /dev/null +++ b/code/game/gamemodes/antag_spawner.dm @@ -0,0 +1,144 @@ +/obj/item/weapon/antag_spawner + throw_speed = 1 + throw_range = 5 + w_class = 1.0 + var/used = 0 + +/obj/item/weapon/antag_spawner/proc/spawn_antag(var/client/C, var/turf/T, var/type = "") + return + +/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target as mob) + return + +/obj/item/weapon/antag_spawner/contract + name = "contract" + desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." + icon = 'icons/obj/wizard.dmi' + icon_state ="scroll2" + +/obj/item/weapon/antag_spawner/contract/attack_self(mob/user as mob) + user.set_machine(src) + var/dat + if(used) + dat = "You have already summoned your apprentice.
" + else + dat = "Contract of Apprenticeship:
" + dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" + dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" + dat += "Which school of magic is your apprentice studying?:
" + dat += "Destruction
" + dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" + dat += "Bluespace Manipulation
" + dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" + dat += "Healing
" + dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" + dat += "Robeless
" + dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" + user << browse(dat, "window=radio") + onclose(user, "radio") + return + +/obj/item/weapon/antag_spawner/contract/Topic(href, href_list) + ..() + var/mob/living/carbon/human/H = usr + + if(H.stat || H.restrained()) + return + if(!istype(H, /mob/living/carbon/human)) + return 1 + + if(loc == H || (in_range(src, H) && istype(loc, /turf))) + H.set_machine(src) + if(href_list["school"]) + if (used) + H << "You already used this contract!" + return + var/list/candidates = get_candidates(BE_WIZARD) + if(candidates.len) + src.used = 1 + var/client/C = pick(candidates) + spawn_antag(C, get_turf(H.loc), href_list["school"]) + else + H << "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later." + +/obj/item/weapon/antag_spawner/contract/spawn_antag(var/client/C, var/turf/T, var/type = "") + new /obj/effect/effect/harmless_smoke(T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + M.key = C.key + M << "You are the [usr.real_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals." + switch(type) + if("destruction") + M.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(M) + M.spell_list += new /obj/effect/proc_holder/spell/dumbfire/fireball(M) + M << "Your service has not gone unrewarded, however. Studying under [usr.real_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball." + if("bluespace") + M.spell_list += new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(M) + M.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(M) + M << "Your service has not gone unrewarded, however. Studying under [usr.real_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt." + if("healing") + M.spell_list += new /obj/effect/proc_holder/spell/targeted/charge(M) + M.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall(M) + M.equip_to_slot_or_del(new /obj/item/weapon/gun/magic/staff/healing(M), slot_r_hand) + M << "Your service has not gone unrewarded, however. Studying under [usr.real_name], you have learned livesaving survival spells. You are able to cast charge and forcewall." + if("robeless") + M.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(M) + M.spell_list += new /obj/effect/proc_holder/spell/targeted/mind_transfer(M) + M << "Your service has not gone unrewarded, however. Studying under [usr.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap." + + equip_antag(M) + var/wizard_name_first = pick(wizard_first) + var/wizard_name_second = pick(wizard_second) + var/randomname = "[wizard_name_first] [wizard_name_second]" + var/newname = copytext(sanitize(input(M, "You are the wizard's apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) + if (!newname) + newname = randomname + M.mind.name = newname + M.real_name = newname + M.name = newname + var/datum/objective/protect/new_objective = new /datum/objective/protect + new_objective.owner = M:mind + new_objective:target = usr:mind + new_objective.explanation_text = "Protect [usr.real_name], the wizard." + M.mind.objectives += new_objective + ticker.mode.traitors += M.mind + M.mind.special_role = "apprentice" + +/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target as mob) + target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears) + target.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(target), slot_w_uniform) + target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(target), slot_shoes) + target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), slot_wear_suit) + target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), slot_head) + target.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(target), slot_back) + target.equip_to_slot_or_del(new /obj/item/weapon/storage/box(target), slot_in_backpack) + target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store) + +/obj/item/weapon/antag_spawner/borg_tele + name = "Syndicate Cyborg Teleporter" + desc = "A single-use teleporter used to deploy a Syndicate Cyborg on the field." + icon = 'icons/obj/device.dmi' + icon_state = "locator" + var/TC_cost = 0 + +/obj/item/weapon/antag_spawner/borg_tele/attack_self(mob/user as mob) + if(used) + user << "The teleporter is out of power." + return + var/list/borg_candicates = get_candidates(BE_OPERATIVE) + if(borg_candicates.len > 0) + used = 1 + var/client/C = pick(borg_candicates) + spawn_antag(C, get_turf(src.loc), "syndieborg") + else + user << "Unable to connect to Syndicate Command. Please wait and try again later or use the teleporter on your uplink to get your points refunded." + +/obj/item/weapon/antag_spawner/borg_tele/spawn_antag(var/client/C, var/turf/T, var/type = "") + var/datum/effect/effect/system/spark_spread/S = new /datum/effect/effect/system/spark_spread + S.set_up(4, 1, src) + S.start() + var/mob/living/silicon/robot/R = new /mob/living/silicon/robot/syndicate(T) + R.key = C.key + ticker.mode.syndicates += R.mind + ticker.mode.update_synd_icons_added(R.mind) + R.mind.special_role = "syndicate" + R.faction = "syndicate" \ No newline at end of file diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index cbc7cce5e78..fb9a9f2e828 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -65,7 +65,7 @@ /obj/effect/blob/proc/Pulse(var/pulse = 0, var/origin_dir = 0)//Todo: Fix spaceblob expand - set background = 1 + set background = BACKGROUND_ENABLED PulseAnimation() diff --git a/code/game/gamemodes/changeling/changeling_mutations.dm b/code/game/gamemodes/changeling/changeling_mutations.dm new file mode 100644 index 00000000000..52b55f82f98 --- /dev/null +++ b/code/game/gamemodes/changeling/changeling_mutations.dm @@ -0,0 +1,49 @@ +//This only contains the arm blade for now because I'm a lazy fuck. Yers truely, Miauw, resident lazy fuck. +/obj/item/weapon/melee/arm_blade + name = "arm blade" + desc = "A grotesque blade made out of bone and flesh that cleaves through people as a hot knife through butter" + icon = 'icons/obj/weapons.dmi' + icon_state = "arm_blade" + item_state = "arm_blade" + flags = ABSTRACT + w_class = 5.0 + force = 25 + throwforce = 0 //Just to be on the safe side + throw_range = 0 + throw_speed = 0 + +/obj/item/weapon/melee/arm_blade/New() + ..() + loc.visible_message("A grotesque blade forms around [name]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!") + +/obj/item/weapon/melee/arm_blade/dropped(mob/user) + visible_message("With a sickening crunch, [user] reforms his blade into an arm!", "We assimilate our blade into our body", "" + return + + else if(A.locked) + user << "The airlock's bolts prevent it from being forced." + return + + else + //user.say("Heeeeeeeeeerrre's Johnny!") + user.visible_message("[user] forces the door to open with \his [src]!", "We force the door to open.", "You hear a metal screeching sound.") + A.open(1) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index b0a2e6fa50e..a473f3fd56d 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -529,9 +529,34 @@ var/list/datum/dna/hivemind_bank = list() if(src && src.mind && src.mind.changeling) src.mind.changeling.mimicing = "" - ////////// - //STINGS// //They get a pretty header because there's just so fucking many of them ;_; - ////////// + +/mob/living/carbon/proc/changeling_arm_blade() + set category = "Changeling" + set name = "Arm Blade (20)" + + if(istype(l_hand, /obj/item/weapon/melee/arm_blade)) //Not the nicest way to do it, but eh + u_equip(l_hand) + return + + if(istype(r_hand, /obj/item/weapon/melee/arm_blade)) + u_equip(r_hand) + return + + var/datum/changeling/changeling = changeling_power(20) + if(!changeling) + return + + drop_item(get_active_hand()) + + put_in_hands(new /obj/item/weapon/melee/arm_blade(src)) + changeling.geneticdamage += 6 + + changeling.chem_charges -= 20 + + +////////// +//STINGS// //They get a pretty header because there's just so fucking many of them ;_; +////////// /mob/living/carbon/proc/set_sting(A, icon, dna=null) //setting the sting and ui icon for it src << "We prepare our sting, use alt+click on target to sting them." @@ -680,4 +705,4 @@ var/list/datum/dna/hivemind_bank = list() T.reagents.add_reagent("ice", 30) feedback_add_details("changeling_powers","CS") - return 1 \ No newline at end of file + return 1 diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index 68450590a44..6c23082de16 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -161,6 +161,13 @@ var/list/powerinstances allowduringlesserform = 1 verbpath = /mob/living/carbon/proc/changeling_mute_sting +/datum/power/changeling/arm_blade + name = "Arm Blade" + desc = "We reform one of our arms into a deadly blade." + helptext = "Cannot be used while in lesser form." + genomecost = 1 + allowduringlesserform = 0 + verbpath = /mob/living/carbon/proc/changeling_arm_blade // Modularchangling, totally stolen from the new player panel. YAYY /datum/changeling/proc/EvolutionMenu()//The new one diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 8f2081b683d..43d97cb2edb 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -52,6 +52,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", wordhide=pick(runewords) runewords-=wordhide + /obj/effect/rune desc = "" anchored = 1 @@ -210,9 +211,10 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", return check_icon() + src.color = rgb(255, 0, 0) if(word1 == wordtravel && word2 == wordself) icon_state = "2" - src.icon += rgb(0, 0 , 255) + src.color = rgb(0, 0, 255) return if(word1 == wordjoin && word2 == wordblood && word3 == wordself) icon_state = "3" @@ -222,7 +224,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", return if(word1 == wordsee && word2 == wordblood && word3 == wordhell) icon_state = "5" - src.icon += rgb(0, 0 , 255) + src.color = rgb(0, 0 , 255) return if(word1 == worddestr && word2 == wordsee && word3 == wordtech) icon_state = "5" @@ -232,73 +234,73 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", return if(word1 == wordsee && word2 == wordhell && word3 == wordjoin) icon_state = "4" - src.icon += rgb(0, 0 , 255) + src.color = rgb(0, 0 , 255) return if(word1 == wordblood && word2 == wordjoin && word3 == wordhell) icon_state = "1" return if(word1 == wordhide && word2 == wordsee && word3 == wordblood) icon_state = "1" - src.icon += rgb(0, 0 , 255) + src.color = rgb(0, 0 , 255) return if(word1 == wordhell && word2 == wordtravel && word3 == wordself) icon_state = "6" - src.icon += rgb(0, 0 , 255) + src.color = rgb(0, 0 , 255) return if(word1 == wordblood && word2 == wordsee && word3 == wordtravel) icon_state = "6" return if(word1 == wordhell && word2 == wordtech && word3 == wordjoin) icon_state = "3" - src.icon += rgb(0, 0 , 255) + src.color = rgb(0, 0 , 255) return if(word1 == wordhell && word2 == wordblood && word3 == wordjoin) icon_state = "[rand(1,6)]" - src.icon += rgb(255, 255, 255) + src.color = rgb(255, 255, 255) return if(word1 == wordblood && word2 == wordsee && word3 == wordhide) icon_state = "4" - src.icon += rgb(255, 255, 255) + src.color = rgb(255, 255, 255) return if(word1 == worddestr && word2 == wordtravel && word3 == wordself) icon_state = "1" - src.icon += rgb(255, 0, 0) + src.color = rgb(255, 0, 0) return if(word1 == wordtravel && word2 == wordtech && word3 == wordother) icon_state = "4" - src.icon += rgb(255, 0, 255) + src.color = rgb(255, 0, 255) return if(word1 == wordjoin && word2 == wordother && word3 == wordself) icon_state = "2" - src.icon += rgb(0, 255, 0) + src.color = rgb(0, 255, 0) return if(word1 == wordhide && word2 == wordother && word3 == wordsee) icon_state = "4" - src.icon += rgb(0, 255, 0) + src.color = rgb(0, 255, 0) return if(word1 == worddestr && word2 == wordsee && word3 == wordother) icon_state = "4" - src.icon += rgb(0, 0, 255) + src.color = rgb(0, 0, 255) return if(word1 == worddestr && word2 == wordsee && word3 == wordblood) icon_state = "4" - src.icon += rgb(255, 0, 0) + src.color = rgb(255, 0, 0) return if(word1 == wordself && word2 == wordother && word3 == wordtech) icon_state = "3" - src.icon += rgb(200, 0, 0) + src.color = rgb(200, 0, 0) return if(word1 == wordtravel && word2 == wordother) icon_state = "1" - src.icon += rgb(200, 0, 0) + src.color = rgb(200, 0, 0) return if(word1 == wordjoin && word2 == wordhide && word3 == wordtech) icon_state = "2" - src.icon += rgb(100, 0, 100) + src.color = rgb(100, 0, 100) return icon_state="[rand(1,6)]" //random shape and color for dummy runes - src.icon -= rgb(255,255,255) - src.icon += rgb(rand(1,255),rand(1,255),rand(1,255)) + src.color = rgb(rand(1,255),rand(1,255),rand(1,255)) + /obj/item/weapon/tome name = "arcane tome" diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index fee836ca6b5..9e45f6d0e4d 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -27,7 +27,8 @@ var/bomb_set if (src.timeleft <= 0) explode() else - playsound(loc, 'sound/items/timer.ogg', 5, 0) + var/volume = (timeleft <= 20 ? 30 : 5) + playsound(loc, 'sound/items/timer.ogg', volume, 0) for(var/mob/M in viewers(1, src)) if ((M.client && M.machine == src)) src.attack_hand(M) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 145223c2f25..7118c2e9759 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -164,6 +164,10 @@ datum/objective/hijack if(issilicon(owner.current)) return 0 var/area/shuttle = locate(/area/shuttle/escape/centcom) + + if(!(get_turf(owner.current) in shuttle)) + return 0 + var/list/protected_mobs = list(/mob/living/silicon/ai, /mob/living/silicon/pai) for(var/mob/living/player in player_list) if(player.type in protected_mobs) continue diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 27b164554a3..5199e4212c8 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -1,111 +1,5 @@ -/////////Apprentice Contract////////// - -/obj/item/weapon/contract - name = "contract" - desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid." - icon = 'icons/obj/wizard.dmi' - icon_state ="scroll2" - throw_speed = 1 - throw_range = 5 - w_class = 1.0 - var/used = 0 - - -/obj/item/weapon/contract/attack_self(mob/user as mob) - user.set_machine(src) - var/dat - if(used) - dat = "You have already summoned your apprentice.
" - else - dat = "Contract of Apprenticeship:
" - dat += "Using this contract, you may summon an apprentice to aid you on your mission.
" - dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
" - dat += "Which school of magic is your apprentice studying?:
" - dat += "Destruction
" - dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
" - dat += "Bluespace Manipulation
" - dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
" - dat += "Healing
" - dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
" - dat += "Robeless
" - dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
" - user << browse(dat, "window=radio") - onclose(user, "radio") - return - - -/obj/item/weapon/contract/Topic(href, href_list) - ..() - var/mob/living/carbon/human/H = usr - - if(H.stat || H.restrained()) - return - if(!istype(H, /mob/living/carbon/human)) - return 1 - - if(loc == H || (in_range(src, H) && istype(loc, /turf))) - H.set_machine(src) - if(href_list["school"]) - if (used) - H << "You already used this contract!" - return - var/list/candidates = get_candidates(BE_WIZARD) - if(candidates.len) - src.used = 1 - var/client/C = pick(candidates) - new /obj/effect/effect/harmless_smoke(H.loc) - var/mob/living/carbon/human/M = new/mob/living/carbon/human(H.loc) - M.key = C.key - M << "You are the [H.real_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals." - switch(href_list["school"]) - if("destruction") - M.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(M) - M.spell_list += new /obj/effect/proc_holder/spell/dumbfire/fireball(M) - M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball." - if("bluespace") - M.spell_list += new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(M) - M.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(M) - M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt." - if("healing") - M.spell_list += new /obj/effect/proc_holder/spell/targeted/charge(M) - M.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall(M) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/magic/staff/healing(M), slot_r_hand) - M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned livesaving survival spells. You are able to cast charge and forcewall." - if("robeless") - M.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(M) - M.spell_list += new /obj/effect/proc_holder/spell/targeted/mind_transfer(M) - M << "Your service has not gone unrewarded, however. Studying under [H.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap." - M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) - M.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(M), slot_w_uniform) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(M), slot_back) - M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) - M.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(M), slot_r_store) - var/wizard_name_first = pick(wizard_first) - var/wizard_name_second = pick(wizard_second) - var/randomname = "[wizard_name_first] [wizard_name_second]" - var/newname = copytext(sanitize(input(M, "You are the wizard's apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN) - - if (!newname) - newname = randomname - M.mind.name = newname - M.real_name = newname - M.name = newname - var/datum/objective/protect/new_objective = new /datum/objective/protect - new_objective.owner = M:mind - new_objective:target = H:mind - new_objective.explanation_text = "Protect [H.real_name], the wizard." - M.mind.objectives += new_objective - ticker.mode.traitors += M.mind - M.mind.special_role = "apprentice" - - else - H << "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later." - return - +//Apprenticeship contract - moved to antag_spawner.dm ///////////////////////////Veil Render////////////////////// diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 749be160e85..641f27c0317 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -3,6 +3,7 @@ /mob/proc/rightandwrong(var/summon_type) //0 = Summon Guns, 1 = Summon Magic usr << "You summoned [summon_type ? "magic" : "guns"]!" message_admins("[key_name_admin(usr, 1)] summoned [summon_type ? "magic" : "guns"]!") + log_game("[key_name(usr)] summoned [summon_type ? "magic" : "guns"]!") for(var/mob/living/carbon/human/H in player_list) if(H.stat == 2 || !(H.client)) continue if(H.mind) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index f0fac633940..7c2f5ddf5cc 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -12,8 +12,8 @@ var/op = 1 /obj/item/weapon/spellbook/attackby(obj/item/O as obj, mob/user as mob) - if(istype(O, /obj/item/weapon/contract)) - var/obj/item/weapon/contract/contract = O + if(istype(O, /obj/item/weapon/antag_spawner/contract)) + var/obj/item/weapon/antag_spawner/contract/contract = O if(contract.used) user << "The contract has been used, you can't get your points back now." else @@ -282,7 +282,7 @@ max_uses-- if("contract") feedback_add_details("wizard_spell_learned","CT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells - new /obj/item/weapon/contract(get_turf(H)) + new /obj/item/weapon/antag_spawner/contract(get_turf(H)) temp = "You have purchased a contract of apprenticeship." max_uses-- if("scrying") diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 31773227ac8..733113a0172 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -60,7 +60,6 @@ var/datum/wires/alarm/wires = null var/wiresexposed = 0 // If it's been screwdrivered open. var/aidisabled = 0 - var/AAlarmwires = 31 var/shorted = 0 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone @@ -658,7 +657,7 @@ table tr:first-child th:first-child { border: none;} if(wiresexposed) switch(buildstage) if(2) - if(src.AAlarmwires == 0) // All wires cut + if(wires.wires_status == (2 ** wires.wire_count) - 1) // All wires cut icon_state = "alarm_b2" else icon_state = "alarmx" @@ -767,7 +766,7 @@ table tr:first-child th:first-child { border: none;} /obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob) switch(buildstage) if(2) - if(istype(W, /obj/item/weapon/wirecutters) && AAlarmwires == 0) + if(istype(W, /obj/item/weapon/wirecutters) && wires.wires_status == (2 ** wires.wire_count) - 1) //this checks for all wires to be cut, disregard the ammount of wires, binary fuckery with the wires_status playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) user << "You cut the final wires." var/obj/item/weapon/cable_coil/cable = new /obj/item/weapon/cable_coil( src.loc ) @@ -797,7 +796,7 @@ table tr:first-child th:first-child { border: none;} user << "\red Access denied." return if(1) - if(istype(W, /obj/item/weapon/crowbar) && AAlarmwires == 0) + if(istype(W, /obj/item/weapon/crowbar) && wires.wires_status == (2 ** wires.wire_count) - 1) user << "You pry out the circuit." playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) spawn(20) @@ -820,7 +819,7 @@ table tr:first-child th:first-child { border: none;} del(cable) user << "You wire the air alarm!" - src.AAlarmwires = 31 + wires.wires_status = 0 buildstage = 2 update_icon() return diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 16f4339e1fd..02c1fde4781 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -32,7 +32,6 @@ var/global/list/autolathe_recipes = list( \ new /obj/item/weapon/hemostat(),\ new /obj/item/weapon/reagent_containers/glass/beaker(), \ new /obj/item/weapon/reagent_containers/glass/beaker/large(), \ - new /obj/item/ammo_casing/shotgun/blank(), \ new /obj/item/ammo_casing/shotgun/beanbag(), \ new /obj/item/ammo_box/c38(), \ new /obj/item/device/taperecorder/empty(), \ @@ -57,6 +56,7 @@ var/global/list/autolathe_recipes_hidden = list( \ new /obj/item/weapon/handcuffs(), \ new /obj/item/ammo_box/a357(), \ new /obj/item/ammo_casing/shotgun(), \ + new /obj/item/ammo_casing/shotgun/buckshot(), \ new /obj/item/ammo_casing/shotgun/dart(), \ /* new /obj/item/weapon/shield/riot(), */ \ ) @@ -265,7 +265,7 @@ var/global/list/autolathe_recipes_hidden = list( \ var/multiplier = text2num(href_list["multiplier"]) if (!multiplier) multiplier = 1 var/power = max(2000, (template.m_amt+template.g_amt)*multiplier/5) - if(src.m_amount >= template.m_amt*multiplier && src.g_amount >= template.g_amt*multiplier) + if(src.m_amount >= template.m_amt*multiplier/coeff && src.g_amount >= template.g_amt*multiplier/coeff) busy = 1 use_power(power) icon_state = "autolathe" diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index 2d5371fa9a0..42f73d7a77e 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -158,7 +158,7 @@ text("[src.oddbutton ? "Yes" : "No" src.screwloose = 1 /obj/machinery/bot/cleanbot/process() - set background = 1 + set background = BACKGROUND_ENABLED if(!src.on) return diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index 5992c0ce62e..634b44b7f70 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -220,7 +220,7 @@ Auto Patrol: []"}, mode = SECBOT_IDLE /obj/machinery/bot/ed209/process() - set background = 1 + set background = BACKGROUND_ENABLED if (!src.on) return diff --git a/code/game/machinery/bots/floorbot.dm b/code/game/machinery/bots/floorbot.dm index 3d76b9cd7a4..0c53371b455 100644 --- a/code/game/machinery/bots/floorbot.dm +++ b/code/game/machinery/bots/floorbot.dm @@ -163,7 +163,7 @@ src.updateUsrDialog() /obj/machinery/bot/floorbot/process() - set background = 1 + set background = BACKGROUND_ENABLED if(!src.on) return diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm index bd93f823b8f..251bd2705fb 100644 --- a/code/game/machinery/bots/medbot.dm +++ b/code/game/machinery/bots/medbot.dm @@ -232,7 +232,7 @@ src.icon_state = "medibot[src.on]" /obj/machinery/bot/medbot/process() - set background = 1 + set background = BACKGROUND_ENABLED if(!src.on) src.stunned = 0 diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 0df896f7a48..31aa65c331c 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -192,7 +192,7 @@ Auto Patrol: []"}, mode = SECBOT_IDLE /obj/machinery/bot/secbot/process() - set background = 1 + set background = BACKGROUND_ENABLED if(!src.on) return diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 3e5a090df51..62523b51634 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -5,7 +5,7 @@ icon = 'icons/mob/AI.dmi' icon_state = "0" var/state = 0 - var/datum/ai_laws/laws = new /datum/ai_laws/asimov + var/datum/ai_laws/laws = new() var/obj/item/weapon/circuitboard/circuit = null var/obj/item/device/mmi/brain = null @@ -16,42 +16,42 @@ if(istype(P, /obj/item/weapon/wrench)) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 20)) - user << "\blue You wrench the frame into place." + user << "You wrench the frame into place." anchored = 1 state = 1 if(istype(P, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/WT = P if(!WT.isOn()) - user << "The welder must be on for this task." + user << "The welder must be on for this task." return playsound(loc, 'sound/items/Welder.ogg', 50, 1) if(do_after(user, 20)) if(!src || !WT.remove_fuel(0, user)) return - user << "\blue You deconstruct the frame." + user << "You deconstruct the frame." new /obj/item/stack/sheet/plasteel( loc, 4) del(src) if(1) if(istype(P, /obj/item/weapon/wrench)) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) if(do_after(user, 20)) - user << "\blue You unfasten the frame." + user << "You unfasten the frame." anchored = 0 state = 0 if(istype(P, /obj/item/weapon/circuitboard/aicore) && !circuit) playsound(loc, 'sound/items/Deconstruct.ogg', 50, 1) - user << "\blue You place the circuit board inside the frame." + user << "You place the circuit board inside the frame." icon_state = "1" circuit = P user.drop_item() P.loc = src if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "\blue You screw the circuit board into place." + user << "You screw the circuit board into place." state = 2 icon_state = "2" if(istype(P, /obj/item/weapon/crowbar) && circuit) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - user << "\blue You remove the circuit board." + user << "You remove the circuit board." state = 1 icon_state = "0" circuit.loc = loc @@ -59,7 +59,7 @@ if(2) if(istype(P, /obj/item/weapon/screwdriver) && circuit) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "\blue You unfasten the circuit board." + user << "You unfasten the circuit board." state = 1 icon_state = "1" if(istype(P, /obj/item/weapon/cable_coil)) @@ -68,16 +68,16 @@ if(do_after(user, 20)) P:amount -= 5 if(!P:amount) del(P) - user << "\blue You add cables to the frame." + user << "You add cables to the frame." state = 3 icon_state = "3" if(3) if(istype(P, /obj/item/weapon/wirecutters)) if (brain) - user << "Get that brain out of there first" + user << "Get that brain out of there first." else playsound(loc, 'sound/items/Wirecutter.ogg', 50, 1) - user << "\blue You remove the cables." + user << "You remove the cables." state = 2 icon_state = "2" var/obj/item/weapon/cable_coil/A = new /obj/item/weapon/cable_coil( loc ) @@ -90,45 +90,48 @@ if (P) P:amount -= 2 if(!P:amount) del(P) - user << "\blue You put in the glass panel." + user << "You put in the glass panel." state = 4 icon_state = "4" - if(istype(P, /obj/item/weapon/aiModule/asimov)) - laws.add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - laws.add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - laws.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") - usr << "Law module applied." - - if(istype(P, /obj/item/weapon/aiModule/purge)) + if(istype(P, /obj/item/weapon/aiModule/core/full)) //Allows any full core boards to be applied to AI cores. + var/obj/item/weapon/aiModule/core/M = P laws.clear_inherent_laws() - usr << "Law module applied." + for(var/templaw in M.laws) + laws.add_inherent_law(templaw) + usr << "Law module applied." + + if(istype(P, /obj/item/weapon/aiModule/reset/purge)) + laws.clear_inherent_laws() + usr << "Laws cleared applied." - if(istype(P, /obj/item/weapon/aiModule/freeform)) - var/obj/item/weapon/aiModule/freeform/M = P - laws.add_inherent_law(M.newFreeFormLaw) - usr << "Added a freeform law." + if(istype(P, /obj/item/weapon/aiModule/supplied/freeform) || istype(P, /obj/item/weapon/aiModule/core/freeformcore)) + var/obj/item/weapon/aiModule/supplied/freeform/M = P + if(M.laws[1] == "") + return + laws.add_inherent_law(M.laws[1]) + usr << "Added a freeform law." if(istype(P, /obj/item/device/mmi)) var/obj/item/device/mmi/M = P if(!M.brainmob) - user << "\red Sticking an empty MMI into the frame would sort of defeat the purpose." + user << "Sticking an empty MMI into the frame would sort of defeat the purpose." return if(M.brainmob.stat == 2) - user << "\red Sticking a dead brain into the frame would sort of defeat the purpose." + user << "Sticking a dead brain into the frame would sort of defeat the purpose." return if((config) && (!config.allow_ai)) - user << "\red This MMI does not seem to fit." + user << "This MMI does not seem to fit." return if(jobban_isbanned(M.brainmob, "AI")) - user << "\red This MMI does not seem to fit." + user << "This MMI does not seem to fit." return if(!M.brainmob.mind) - user << "\red This MMI is mindless." + user << "This MMI is mindless." return ticker.mode.remove_cultist(M.brainmob.mind, 1) @@ -137,12 +140,12 @@ user.drop_item() M.loc = src brain = M - usr << "Added a brain." + usr << "Added a brain." icon_state = "3b" if(istype(P, /obj/item/weapon/crowbar) && brain) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - user << "\blue You remove the brain." + user << "You remove the brain." brain.loc = loc brain = null icon_state = "3" @@ -150,19 +153,21 @@ if(4) if(istype(P, /obj/item/weapon/crowbar)) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) - user << "\blue You remove the glass panel." + user << "You remove the glass panel." state = 3 if (brain) icon_state = "3b" else icon_state = "3" - new /obj/item/stack/sheet/rglass( loc, 2 ) + new /obj/item/stack/sheet/rglass(loc, 2) return if(istype(P, /obj/item/weapon/screwdriver)) playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "\blue You connect the monitor." - var/mob/living/silicon/ai/A = new /mob/living/silicon/ai ( loc, laws, brain ) + user << "You connect the monitor." + if(!laws.inherent.len) //If laws isn't set to null but nobody supplied a board, the AI would normally be created lawless. We don't want that. + laws = null + var/mob/living/silicon/ai/A = new /mob/living/silicon/ai (loc, laws, brain) if(A) //if there's no brain, the mob is deleted and a structure/AIcore is created A.rename_self("ai", 1) feedback_inc("cyborg_ais_created",1) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index fb922c6fb9a..39e5691e208 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -23,7 +23,8 @@ /obj/item/toy/prize/mauler = 1, /obj/item/toy/prize/odysseus = 1, /obj/item/toy/prize/phazon = 1, - /obj/item/toy/cards = 2 + /obj/item/toy/cards = 2, + /obj/item/toy/nuke = 2 ) /obj/machinery/computer/arcade/New() @@ -546,4 +547,4 @@ /obj/machinery/computer/arcade/orion_trail/proc/win() playing = 0 - prizevend() + prizevend() diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 1499eb08075..52a768fbb4c 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -8,87 +8,67 @@ icon_state = "robot" req_access = list(access_robotics) circuit = /obj/item/weapon/circuitboard/robotics - - var/id = 0.0 var/temp = null - var/status = 0 - var/timeleft = 60 - var/stop = 0.0 - var/screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text + +/obj/machinery/computer/robotics/proc/can_control(var/mob/user, var/mob/living/silicon/robot/R) + if(!istype(R)) + return 0 + if(istype(user, /mob/living/silicon/ai)) + if (R.connected_ai != user) + return 0 + if(istype(user, /mob/living/silicon/robot)) + if (R != user) + return 0 + if(R.scrambledcodes) + return 0 + return 1 /obj/machinery/computer/robotics/attack_hand(var/mob/user as mob) if(..()) return + interact(user) + +/obj/machinery/computer/robotics/interact(var/mob/user as mob) if (src.z > 6) user << "\red Unable to establish a connection: \black You're too far away from the station!" return user.set_machine(src) var/dat - if (src.temp) - dat = "[src.temp]

Clear Screen" - else - if(screen == 0) - //dat += "

Cyborg Control Console


" - dat += "1. Cyborg Status
" - dat += "2. Emergency Full Destruct
" - if(screen == 1) - for(var/mob/living/silicon/robot/R in mob_list) - if(istype(user, /mob/living/silicon/ai)) - if (R.connected_ai != user) - continue - if(istype(user, /mob/living/silicon/robot)) - if (R != user) - continue - if(R.scrambledcodes) - continue + var/robots = 0 + for(var/mob/living/silicon/robot/R in mob_list) + if(!can_control(user, R)) + continue + robots++ + dat += "[R.name] |" + if(R.stat) + dat += " Not Responding |" + else if (!R.canmove) + dat += " Locked Down |" + else + dat += " Operating Normally |" + if (!R.canmove) + else if(R.cell) + dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |" + else + dat += " No Cell Installed |" + if(R.module) + dat += " Module Installed ([R.module.name]) |" + else + dat += " No Module Installed |" + if(R.connected_ai) + dat += " Slaved to [R.connected_ai.name] |" + else + dat += " Independent from AI |" + if (istype(user, /mob/living/silicon)) + if(issilicon(user) && is_special_character(user) && !R.emagged) + dat += "(Hack) " + dat += "([R.canmove ? "Lockdown" : "Release"]) " + dat += "(Destroy)" + dat += "
" - dat += "[R.name] |" - if(R.stat) - dat += " Not Responding |" - else if (!R.canmove) - dat += " Locked Down |" - else - dat += " Operating Normally |" - if (!R.canmove) - else if(R.cell) - dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |" - else - dat += " No Cell Installed |" - if(R.module) - dat += " Module Installed ([R.module.name]) |" - else - dat += " No Module Installed |" - if(R.connected_ai) - dat += " Slaved to [R.connected_ai.name] |" - else - dat += " Independent from AI |" - if (istype(user, /mob/living/silicon)) - if(issilicon(user) && is_special_character(user) && !R.emagged) - dat += "(Hack) " - dat += "([R.canmove ? "Lockdown" : "Release"]) " - dat += "(Destroy)" - dat += "
" - dat += "(Return to Main Menu)
" - if(screen == 2) - if(!src.status) - dat += {"
Emergency Robot Self-Destruct
\nStatus: Off
- \n
- \nCountdown: [src.timeleft]/60 \[Reset\]
- \n
- \nStart Sequence
- \n
- \nClose"} - else - dat = {"Emergency Robot Self-Destruct
\nStatus: Activated
- \n
- \nCountdown: [src.timeleft]/60 \[Reset\]
- \n
\nStop Sequence
- \n
- \nClose"} - dat += "(Return to Main Menu)
" + if(!robots) + dat += "No Cyborg Units detected within access parameters." - //user << browse(dat, "window=computer;size=400x500") - //onclose(user, "computer") var/datum/browser/popup = new(user, "computer", "Cyborg Control Console", 400, 500) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) @@ -98,123 +78,48 @@ /obj/machinery/computer/robotics/Topic(href, href_list) if(..()) return - if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) - usr.set_machine(src) - if (href_list["eject"]) - src.temp = {"Destroy Robots?
-
\[Swipe ID to initiate destruction sequence\]
- Cancel"} + if (href_list["temp"]) + src.temp = null - else if (href_list["eject2"]) - var/obj/item/weapon/card/id/I = usr.get_active_hand() - if (istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/pda = I - I = pda.id - if (istype(I)) - if(src.check_access(I)) - if (!status) - message_admins("\blue [key_name_admin(usr)] has initiated the global cyborg killswitch!") - log_game("\blue [key_name(usr)] has initiated the global cyborg killswitch!") - src.status = 1 - src.start_sequence() - src.temp = null + else if (href_list["killbot"]) + if(src.allowed(usr)) + var/mob/living/silicon/robot/R = locate(href_list["killbot"]) + if(can_control(usr, R)) + var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") + if(choice == "Confirm" && can_control(usr, R) && !..()) + if(R.mind && R.mind.special_role && R.emagged) + R << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered." + R.ResetSecurityCodes() + else + message_admins("\blue [key_name_admin(usr)] detonated [R.name]!") + log_game("\blue [key_name(usr)] detonated [R.name]!") + R.self_destruct() + else + usr << "\red Access Denied." - else - usr << "\red Access Denied." + else if (href_list["stopbot"]) + if(src.allowed(usr)) + var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) + if(can_control(usr, R)) + var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort") + if(choice == "Confirm" && can_control(usr, R) && !..()) + message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") + log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") + R.SetLockdown(!R.lockcharge) + R << "[!R.lockcharge ? "Your lockdown has been lifted!" : "You have been locked down!"]" - else if (href_list["stop"]) - src.temp = {" - Stop Robot Destruction Sequence?
-
Yes
- No"} + else + usr << "\red Access Denied." - else if (href_list["stop2"]) - src.stop = 1 - src.temp = null - src.status = 0 + else if (href_list["magbot"]) + if(issilicon(usr) && is_special_character(usr)) + var/mob/living/silicon/robot/R = locate(href_list["magbot"]) + if(istype(R) && !R.emagged && R.connected_ai == usr && !R.scrambledcodes && can_control(usr, R)) + log_game("[key_name(usr)] emagged [R.name] using robotic console!") + R.SetEmagged(1) + if(R.mind.special_role) + R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes - else if (href_list["reset"]) - src.timeleft = 60 - - else if (href_list["temp"]) - src.temp = null - else if (href_list["screen"]) - switch(href_list["screen"]) - if("0") - screen = 0 - if("1") - screen = 1 - if("2") - screen = 2 - else if (href_list["killbot"]) - if(src.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["killbot"]) - if(R) - var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm") - if(R && istype(R)) - if(R.mind && R.mind.special_role && R.emagged) - R << "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered." - R.ResetSecurityCodes() - - else - message_admins("\blue [key_name_admin(usr)] detonated [R.name]!") - log_game("\blue [key_name(usr)] detonated [R.name]!") - R.self_destruct() - else - usr << "\red Access Denied." - - else if (href_list["stopbot"]) - if(src.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) - if(R && istype(R)) // Extra sancheck because of input var references - var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm") - if(R && istype(R)) - message_admins("\blue [key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") - log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") - R.canmove = !R.canmove - if (R.lockcharge) - R.SetLockdown(0) - R << "Your lockdown has been lifted!" - else - R.SetLockdown(1) - R << "You have been locked down!" - - else - usr << "\red Access Denied." - - else if (href_list["magbot"]) - if(issilicon(usr) && is_special_character(usr)) - var/mob/living/silicon/robot/R = locate(href_list["magbot"]) - if(R && !R.emagged && R.connected_ai == usr && !R.scrambledcodes) - var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm") - if(R && istype(R)) -// message_admins("\blue [key_name_admin(usr)] emagged [R.name] using robotic console!") - log_game("[key_name(usr)] emagged [R.name] using robotic console!") - R.emagged = 1 - if(R.mind.special_role) - R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes - - src.add_fingerprint(usr) src.updateUsrDialog() return - -/obj/machinery/computer/robotics/proc/start_sequence() - - do - if(src.stop) - src.stop = 0 - return - src.timeleft-- - sleep(10) - while(src.timeleft) - - for(var/mob/living/silicon/robot/R in mob_list) - if(!R.scrambledcodes) - R.self_destruct() - - return - diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index c8498e2bdd2..c3ab2b9b429 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -94,7 +94,7 @@ * * @return nothing */ -/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main") +/obj/machinery/atmospherics/unary/cryo_cell/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(user == occupant || user.stat) return @@ -141,20 +141,20 @@ for(var/datum/reagent/R in beaker:reagents.reagent_list) beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list... data["beakerContents"] = beakerContents - - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) - // the ui does not exist, so we'll create a new one + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm ui = new(user, src, ui_key, "cryo.tmpl", "Cryo Cell Control System", 520, 410) - // When the UI is first opened this is the data it will use - ui.set_initial_data(data) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window ui.open() - // Auto update every Master Controller tick + // auto update every Master Controller tick ui.set_auto_update(1) - else - // The UI is already open so push the new data to it - ui.push_data(data) - return + //user.set_machine(src) /obj/machinery/atmospherics/unary/cryo_cell/Topic(href, href_list) diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 3c095b71aba..85f8d7d383c 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -153,7 +153,7 @@ return src.attack_hand(user) /obj/machinery/door/window/attack_paw(mob/user as mob) - if(istype(user, /mob/living/carbon/alien/humanoid) || istype(user, /mob/living/carbon/slime/adult)) + if(istype(user, /mob/living/carbon/alien/humanoid) || istype(user, /mob/living/carbon/slime/)) if(src.operating) return src.health = max(0, src.health - 25) diff --git a/code/game/machinery/drying_rack.dm b/code/game/machinery/drying_rack.dm new file mode 100644 index 00000000000..ad23342be81 --- /dev/null +++ b/code/game/machinery/drying_rack.dm @@ -0,0 +1,82 @@ +/obj/machinery/drying_rack + name = "drying rack" + desc = "A large rack with a heater built into the base. Used for drying things out." + icon = 'icons/obj/hydroponics.dmi' + icon_state = "drying_rack" + layer = 2.9 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 5 + active_power_usage = 50 + var/list/accepted = list() + var/running = 0 + var/volume = 100 + +/obj/machinery/drying_rack/New() + ..() + flags |= NOREACT + create_reagents(volume) + + +/obj/machinery/drying_rack/attackby(var/obj/item/I as obj, var/mob/user as mob) + if(running) + user << "You cannot add that to the drying rack." + return + var/obj/item/weapon/reagent_containers/food/snacks/S = I + if(!S.dried_type) + user << "You cannot add that to the drying rack." + return + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/grown)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/P = I + var/T = P.dried_type + if(ispath(T,/obj/item/weapon/reagent_containers/food/snacks/grown)) + if(P.dry == 0) + P.reagents.trans_to(src, P.reagents.total_volume) + user.u_equip(I) + user << "You add the [I] to the drying rack." + del(I) + src.running = 1 + use_power = 2 + icon_state = "drying_rack_on" + sleep(60) + icon_state = "drying_rack" + var/obj/item/weapon/reagent_containers/food/snacks/grown/Dried = new T(src.loc) + user << "[Dried] has finished drying." + Dried.color = "#ad7257" + Dried.dry = 1 + Dried.reagents.clear_reagents() + src.reagents.trans_to(Dried, src.reagents.total_volume) + use_power = 1 + src.running = 0 + return + else + user << "That has already been dried." + else + user.u_equip(I) + user << "You add [I] to the drying rack." + del(I) + src.running = 1 + use_power = 2 + icon_state = "drying_rack_on" + sleep(60) + icon_state = "drying_rack" + new T(src.loc) + use_power = 1 + src.running = 0 + else + var/N = S.dried_type + user.u_equip(I) + user << "You add [I] to the drying rack." + del(I) + src.running = 1 + use_power = 2 + icon_state = "drying_rack_on" + sleep(60) + icon_state = "drying_rack" + new N(src.loc) + use_power = 1 + src.running = 0 diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 806335e0e15..2c2549bf579 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -67,7 +67,8 @@ sound = 1 else var/obj/item/weapon/gun/energy/E=new installation //All energy-based weapons are applicable - projectile = E.projectile_type + var/obj/item/ammo_casing/shottype = E.ammo_type[1] + projectile = shottype.projectile_type eprojectile = projectile switch(E.type) @@ -378,7 +379,7 @@ /obj/machinery/porta_turret/process() //the main machinery process - set background = 1 + set background = BACKGROUND_ENABLED if(cover == null && anchored) //if it has no cover and is anchored if(stat & BROKEN) //if the turret is borked diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 401acff9da5..a17948ecdff 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -277,7 +277,9 @@ O:icon_state = "flash" if(istype(O,/obj/item/weapon/gun/energy/taser/cyborg)) if(O:power_supply.charge < O:power_supply.maxcharge) - O:power_supply.give(O:charge_cost * coeff) + var/obj/item/weapon/gun/energy/G = O + var/obj/item/ammo_casing/energy/S = G.ammo_type[G.select] + O:power_supply.give(S.e_cost * coeff) O:update_icon() else O:charge_tick = 0 diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 5d111fa7cdf..466a2f52338 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -12,7 +12,7 @@ var/const/SAFETY_COOLDOWN = 100 var/grinding = 0 var/icon_name = "grinder-o" var/blood = 0 - var/eat_from = WEST + var/eat_dir = WEST /obj/machinery/recycler/New() // On us @@ -30,7 +30,7 @@ var/const/SAFETY_COOLDOWN = 100 ..() update_icon() -/* + /obj/machinery/recycler/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/weapon/card/emag) && !emagged) emagged = 1 @@ -44,7 +44,8 @@ var/const/SAFETY_COOLDOWN = 100 user << "You reset the crusher to its default factory settings." else ..() -*/ + return + add_fingerprint(user) /obj/machinery/recycler/update_icon() ..() @@ -53,9 +54,15 @@ var/const/SAFETY_COOLDOWN = 100 is_powered = 0 icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end +// This is purely for admin possession !FUN!. +/obj/machinery/recycler/Bump(var/atom/movable/AM) + ..() + if(AM) + Bumped(AM) + + /obj/machinery/recycler/Bumped(var/atom/movable/AM) - // Crossed didn't like people lying down. if(stat & (BROKEN|NOPOWER)) return if(safety_mode) @@ -69,7 +76,7 @@ var/const/SAFETY_COOLDOWN = 100 return var/move_dir = get_dir(loc, AM.loc) - if(move_dir == eat_from) + if(move_dir == eat_dir) if(isliving(AM)) if(emagged) eat(AM) @@ -81,7 +88,7 @@ var/const/SAFETY_COOLDOWN = 100 playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) AM.loc = src.loc -/obj/machinery/recycler/proc/recycle(var/obj/item/I) +/obj/machinery/recycler/proc/recycle(var/obj/item/I, var/sound = 1) I.loc = src.loc if(!istype(I, /obj/item/weapon/disk/nuclear)) del(I) @@ -93,7 +100,8 @@ var/const/SAFETY_COOLDOWN = 100 new /obj/item/stack/sheet/plasteel(loc) if(prob(1)) new /obj/item/stack/sheet/rglass(loc) - playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) + if(sound) + playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) /obj/machinery/recycler/proc/stop(var/mob/living/L) @@ -110,20 +118,39 @@ var/const/SAFETY_COOLDOWN = 100 /obj/machinery/recycler/proc/eat(var/mob/living/L) L.loc = src.loc + if(issilicon(L)) playsound(src.loc, 'sound/items/Welder.ogg', 50, 1) else playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) - if(ishuman(L)) - L.say("ARRRRRRRRRRRGH!!!") + var/gib = 1 + // By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count) + if(iscarbon(L)) + gib = 0 + if(L.stat == CONSCIOUS) + L.say("ARRRRRRRRRRRGH!!!") + add_blood(L) - L.gib() - - if(!blood) + if(!blood && !issilicon(L)) blood = 1 update_icon() + // Remove and recycle the equipped items. + for(var/obj/item/I in L.get_equipped_items()) + L.drop_from_inventory(I) + recycle(I, 0) + + // Instantly lie down, also go unconscious from the pain, before you die. + L.Paralyse(5) + + // For admin fun, var edit emagged to 2. + if(gib || emagged == 2) + L.gib() + else if(emagged == 1) + L.adjustBruteLoss(1000) + + /obj/item/weapon/paper/recycler name = "paper - 'garbage duty instructions'" diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 19359a76dd8..5e079b302b9 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -1,7 +1,7 @@ /obj/machinery/syndicatebomb icon = 'icons/obj/assemblies.dmi' name = "syndicate bomb" - icon_state = "syndicate-bomb-inactive" + icon_state = "syndicate-bomb" desc = "A large and menacing device. Can be bolted down with a wrench." anchored = 0 @@ -14,27 +14,30 @@ var/open_panel = 0 //are the wires exposed? var/active = 0 //is the bomb counting down? var/defused = 0 //is the bomb capable of exploding? - var/obj/item/weapon/syndicatebombcore/payload + var/obj/item/weapon/bombcore/payload = /obj/item/weapon/bombcore/ + var/beepsound = 'sound/items/timer.ogg' /obj/machinery/syndicatebomb/process() if(active && !defused && (timer > 0)) //Tick Tock - playsound(loc, 'sound/items/timer.ogg', 5, 0) + var/volume = (timer <= 10 ? 30 : 5) // Tick louder when the bomb is closer to being detonated. + playsound(loc, beepsound, volume, 0) timer-- if(active && !defused && (timer <= 0)) //Boom active = 0 timer = 60 - processing_objects.Remove(src) - icon_state = "syndicate-bomb-inactive[open_panel ? "-wires" : ""]" + update_icon() if(payload in src) payload.detonate() return if(!active || defused) //Counter terrorists win - processing_objects.Remove(src) + if(defused && payload in src) + payload.defuse() return /obj/machinery/syndicatebomb/New() wires = new(src) - payload = new(src) + payload = new payload(src) + update_icon() ..() @@ -42,6 +45,8 @@ ..() usr << "A digital display on it reads \"[timer]\"." +/obj/machinery/syndicatebomb/update_icon() + icon_state = "[initial(icon_state)][active ? "-active" : "-inactive"][open_panel ? "-wires" : ""]" /obj/machinery/syndicatebomb/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/weapon/wrench)) @@ -64,10 +69,7 @@ else if(istype(I, /obj/item/weapon/screwdriver)) open_panel = !open_panel - if(!active) - icon_state = "syndicate-bomb-inactive[open_panel ? "-wires" : ""]" - else - icon_state = "syndicate-bomb-active[open_panel ? "-wires" : ""]" + update_icon() user << "You [open_panel ? "open" : "close"] the wire panel." else if(istype(I, /obj/item/weapon/wirecutters) || istype(I, /obj/item/device/multitool) || istype(I, /obj/item/device/assembly/signaler )) @@ -86,7 +88,7 @@ user << "The wires conneting the shell to the explosives are holding it down!" else user << "The cover is screwed on, it won't pry off!" - else if(istype(I, /obj/item/weapon/syndicatebombcore)) + else if(istype(I, /obj/item/weapon/bombcore)) if(!payload) payload = I user << "You place [payload] into [src]." @@ -98,23 +100,26 @@ ..() /obj/machinery/syndicatebomb/attack_hand(var/mob/user) - if(anchored) - if(open_panel) - wires.Interact(user) - else if(!active) - settings() - else + interact(user) + +/obj/machinery/syndicatebomb/interact(var/mob/user) + if(wires) + wires.Interact(user) + if(!open_panel) + if(!active) + settings(user) + return + else if(anchored) user << "The bomb is bolted to the floor!" - else if(!active) - settings() + return /obj/machinery/syndicatebomb/proc/settings(var/mob/user) - var/newtime = input(usr, "Please set the timer.", "Timer", "[timer]") as num + var/newtime = input(user, "Please set the timer.", "Timer", "[timer]") as num newtime = Clamp(newtime, 60, 60000) - if(in_range(src, usr) && isliving(usr)) //No running off and setting bombs from across the station + if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station timer = newtime src.loc.visible_message("\blue \icon[src] timer set for [timer] seconds.") - if(alert(usr,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, usr) && isliving(usr)) + if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user)) if(defused || active) if(defused) src.loc.visible_message("\blue \icon[src] Device error: User intervention required") @@ -122,23 +127,46 @@ else src.loc.visible_message("\red \icon[src] [timer] seconds until detonation, please clear the area.") playsound(loc, 'sound/machines/click.ogg', 30, 1) - if(!open_panel) - icon_state = "syndicate-bomb-active" - else - icon_state = "syndicate-bomb-active-wires" active = 1 + update_icon() add_fingerprint(user) var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) - message_admins("[key_name(usr)]? has primed a [name] for detonation at [A.name] (JMP).") - log_game("[key_name(usr)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])") - processing_objects.Add(src) //Ticking down + if(payload && !istype(payload, /obj/item/weapon/bombcore/training)) + message_admins("[key_name(user)]? has primed a [name] ([payload]) for detonation at [A.name] (JMP).") + log_game("[key_name(user)] has primed a [name] ([payload]) for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])") + payload.adminlog = "The [src.name] that [key_name(user)] had primed detonated!" /obj/machinery/syndicatebomb/proc/isWireCut(var/index) return wires.IsIndexCut(index) -/obj/item/weapon/syndicatebombcore +///Bomb Subtypes/// + +/obj/machinery/syndicatebomb/training + name = "training bomb" + icon_state = "training-bomb" + desc = "A salvaged syndicate device gutted of its explosives to be used as a training aid for aspiring bomb defusers." + payload = /obj/item/weapon/bombcore/training/ + +/obj/machinery/syndicatebomb/badmin + name = "generic summoning badmin bomb" + desc = "Oh god what is in this thing?" + payload = /obj/item/weapon/bombcore/badmin/summon/ + +/obj/machinery/syndicatebomb/badmin/clown + name = "clown bomb" + icon_state = "clown-bomb" + desc = "HONK." + payload = /obj/item/weapon/bombcore/badmin/summon/clown + beepsound = 'sound/items/bikehorn.ogg' + +/obj/machinery/syndicatebomb/badmin/varplosion + payload = /obj/item/weapon/bombcore/badmin/explosion/ + +///Bomb Cores/// + +/obj/item/weapon/bombcore name = "bomb payload" desc = "A powerful secondary explosive of syndicate design and unknown composition, it should be stable under normal conditions..." icon = 'icons/obj/assemblies.dmi' @@ -146,14 +174,99 @@ item_state = "eshield0" w_class = 3.0 origin_tech = "syndicate=6;combat=5" + var/adminlog = null -/obj/item/weapon/syndicatebombcore/ex_act(severity) //Little boom can chain a big boom +/obj/item/weapon/bombcore/ex_act(severity) //Little boom can chain a big boom src.detonate() -/obj/item/weapon/syndicatebombcore/proc/detonate() +/obj/item/weapon/bombcore/proc/detonate() + if(adminlog) + message_admins(adminlog) + log_game(adminlog) explosion(get_turf(src),2,5,11, flame_range = 11) del(src) +/obj/item/weapon/bombcore/proc/defuse() +//Note: Because of how var/defused is used you shouldn't override this UNLESS you intend to set the var to 0 or +// otherwise remove the core/reset the wires before the end of defuse(). It will repeatedly be called otherwise. + +///Bomb Core Subtypes/// + +/obj/item/weapon/bombcore/training + name = "dummy payload" + desc = "A nanotrasen replica of a syndicate payload. Its not intended to explode but to announce that it WOULD have exploded, then rewire itself to allow for more training." + origin_tech = null + var/defusals = 0 + var/attempts = 0 + +/obj/item/weapon/bombcore/training/proc/reset() + var/obj/machinery/syndicatebomb/holder = src.loc + if(istype(holder)) + holder.open_panel = 0 + if(holder.wires) + holder.wires.Shuffle() + holder.defused = 0 + holder.update_icon() + holder.updateDialog() + +/obj/item/weapon/bombcore/training/detonate() + var/obj/machinery/syndicatebomb/holder = src.loc + if(istype(holder)) + attempts++ + holder.loc.visible_message("\red \icon[holder] Alert: Bomb has detonated. Your score is now [defusals] for [attempts]. Resetting wires...") + reset() + else + del(src) + +/obj/item/weapon/bombcore/training/defuse() + var/obj/machinery/syndicatebomb/holder = src.loc + if(istype(holder)) + attempts++ + defusals++ + holder.loc.visible_message("\blue \icon[holder] Alert: Bomb has been defused. Your score is now [defusals] for [attempts]! Resetting wires...") + reset() + +/obj/item/weapon/bombcore/badmin + name = "badmin payload" + desc = "If you're seeing this someone has either made a mistake or gotten dangerously savvy with var editing!" + origin_tech = null + +/obj/item/weapon/bombcore/badmin/defuse() //because we wouldn't want them being harvested by players + del(src) + +/obj/item/weapon/bombcore/badmin/summon/ + var/summon_path = /obj/item/weapon/reagent_containers/food/snacks/cookie + var/amt_summon = 1 + +/obj/item/weapon/bombcore/badmin/summon/detonate() + for(var/i = 0; i < amt_summon; i++) + var/atom/movable/X = new summon_path + X.loc = get_turf(src) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(X, pick(NORTH,SOUTH,EAST,WEST)) + + del(src) + +/obj/item/weapon/bombcore/badmin/summon/clown + summon_path = /mob/living/simple_animal/hostile/retaliate/clown + amt_summon = 100 + +/obj/item/weapon/bombcore/badmin/summon/clown/defuse() + playsound(src.loc, 'sound/misc/sadtrombone.ogg', 50) + ..() + +/obj/item/weapon/bombcore/badmin/explosion/ + var/HeavyExplosion = 2 + var/MediumExplosion = 5 + var/LightExplosion = 11 + var/Flames = 11 + +/obj/item/weapon/bombcore/badmin/explosion/detonate() + explosion(get_turf(src),HeavyExplosion,MediumExplosion,LightExplosion, flame_range = Flames) + +///Syndicate Detonator (aka the big red button)/// + /obj/item/device/syndicatedetonator name = "big red button" desc = "Nothing good can come of pressing a button this garish..." @@ -179,10 +292,10 @@ var/turf/T = get_turf(src) var/area/A = get_area(T) detonated-- - var/log_str = "[key_name(usr)]? has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name] (JMP)." + var/log_str = "[key_name(user)]? has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name] (JMP)." bombers += log_str message_admins(log_str) - log_game("[key_name(usr)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name]([T.x],[T.y],[T.z])") + log_game("[key_name(user)] has remotely detonated [detonated ? "syndicate bombs" : "a syndicate bomb"] using a [name] at [A.name]([T.x],[T.y],[T.z])") detonated = 0 existant = 0 cooldown = 1 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 02bc8e601f0..3d18107b529 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -554,7 +554,7 @@ product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs." vend_delay = 34 icon_state = "cigs" - products = list(/obj/item/weapon/storage/fancy/cigarettes = 10,/obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/lighter/random = 4) + products = list(/obj/item/weapon/storage/fancy/cigarettes = 10,/obj/item/weapon/storage/box/matches = 10,/obj/item/weapon/lighter/random = 4,/obj/item/weapon/rollingpaperpack = 5) contraband = list(/obj/item/weapon/lighter/zippo = 4) premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2) refill_canister = /obj/item/weapon/vending_refill/cigarette @@ -635,8 +635,9 @@ /obj/item/seeds/cornseed = 3, /obj/item/seeds/eggplantseed = 3, /obj/item/seeds/potatoseed = 3, /obj/item/seeds/replicapod = 3,/obj/item/seeds/soyaseed = 3, /obj/item/seeds/sunflowerseed = 3,/obj/item/seeds/tomatoseed = 3,/obj/item/seeds/towermycelium = 3,/obj/item/seeds/wheatseed = 3,/obj/item/seeds/appleseed = 3, /obj/item/seeds/poppyseed = 3,/obj/item/seeds/ambrosiavulgarisseed = 3,/obj/item/seeds/whitebeetseed = 3,/obj/item/seeds/watermelonseed = 3,/obj/item/seeds/limeseed = 3, - /obj/item/seeds/lemonseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/cocoapodseed = 3, - /obj/item/seeds/cabbageseed = 3,/obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3) + /obj/item/seeds/lemonseed = 3,/obj/item/seeds/orangeseed = 3,/obj/item/seeds/grassseed = 3,/obj/item/seeds/cocoapodseed = 3,/obj/item/seeds/cabbageseed = 3, + /obj/item/seeds/grapeseed = 3,/obj/item/seeds/pumpkinseed = 3,/obj/item/seeds/cherryseed = 3,/obj/item/seeds/coffee_arabica_seed = 3,/obj/item/seeds/tobacco_seed = 3, + /obj/item/seeds/tea_aspera_seed = 3) contraband = list(/obj/item/seeds/amanitamycelium = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/libertymycelium = 2,/obj/item/seeds/nettleseed = 2, /obj/item/seeds/plumpmycelium = 2,/obj/item/seeds/reishimycelium = 2) premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1) @@ -666,8 +667,8 @@ /obj/item/clothing/head/helmet/gladiator = 1,/obj/item/clothing/under/gimmick/rank/captain/suit = 1,/obj/item/clothing/head/flatcap = 1, /obj/item/clothing/suit/labcoat/mad = 1,/obj/item/clothing/glasses/gglasses = 1,/obj/item/clothing/shoes/jackboots = 1, /obj/item/clothing/under/schoolgirl = 1,/obj/item/clothing/head/kitty = 1,/obj/item/clothing/under/blackskirt = 1,/obj/item/clothing/head/beret = 1, - /obj/item/clothing/suit/wcoat = 1,/obj/item/clothing/under/suit_jacket = 1,/obj/item/clothing/head/that =1,/obj/item/clothing/head/cueball = 1, - /obj/item/clothing/under/scratch = 1,/obj/item/clothing/under/kilt = 1,/obj/item/clothing/head/beret = 1,/obj/item/clothing/suit/wcoat = 1, + /obj/item/clothing/tie/waistcoat = 1,/obj/item/clothing/under/suit_jacket = 1,/obj/item/clothing/head/that =1,/obj/item/clothing/head/cueball = 1, + /obj/item/clothing/under/scratch = 1,/obj/item/clothing/under/kilt = 1,/obj/item/clothing/head/beret = 1,/obj/item/clothing/tie/waistcoat = 1, /obj/item/clothing/glasses/monocle =1,/obj/item/clothing/head/bowler = 1,/obj/item/weapon/cane = 1,/obj/item/clothing/under/sl_suit = 1, /obj/item/clothing/mask/fakemoustache = 1,/obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1,/obj/item/clothing/head/plaguedoctorhat = 1, /obj/item/clothing/under/owl = 1,/obj/item/clothing/mask/gas/owl_mask = 1,/obj/item/clothing/suit/apron = 1,/obj/item/clothing/under/waiter = 1, diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index a508c8ae542..ff581856e02 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -2,10 +2,10 @@ desc = "A lightweight, security exosuit. Popular among private and corporate security." name = "\improper Gygax" icon_state = "gygax" - step_in = 3 + step_in = 2 dir_in = 1 //Facing North. - health = 300 - deflect_chance = 15 + health = 250 + deflect_chance = 5 damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1) max_temperature = 25000 infra_luminosity = 6 @@ -14,6 +14,7 @@ wreckage = /obj/structure/mecha_wreckage/gygax internal_damage_threshold = 35 max_equip = 3 + step_energy_drain = 3 /obj/mecha/combat/gygax/dark desc = "A lightweight exosuit, painted in a dark scheme. This model appears to have some modifications." @@ -27,7 +28,6 @@ operation_req_access = list(access_syndicate) wreckage = /obj/structure/mecha_wreckage/gygax/dark max_equip = 4 - step_energy_drain = 5 /obj/mecha/combat/gygax/dark/loaded/New() ..() diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index d9ad99bdab0..18952f4775a 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -58,13 +58,13 @@ fire_sound = 'sound/weapons/lasercannonfire.ogg' /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion - equip_cooldown = 40 + equip_cooldown = 20 name = "\improper MKIV ion heavy cannon" icon_state = "mecha_ion" energy_drain = 120 projectile = /obj/item/projectile/ion fire_sound = 'sound/weapons/Laser.ogg' - + construction_cost = list("silver" = 6000, "metal" = 20000, "uranium" = 2000) /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse equip_cooldown = 30 @@ -198,10 +198,10 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - name = "\improper FNX-66 Carbine" + name = "\improper FNX-99 \"Hades\" Carbine" icon_state = "mecha_carbine" equip_cooldown = 5 - projectile = /obj/item/projectile/bullet/incendiary + projectile = /obj/item/projectile/bullet/mechincendiary projectiles = 24 projectile_energy_cost = 15 @@ -300,6 +300,7 @@ equip_cooldown = 60 var/missile_speed = 2 var/missile_range = 30 + construction_cost = list("silver" = 8000, "metal" = 22000, "gold" = 6000) action(target) if(!action_checks(target)) return diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index bf948bf2b60..b7f2b4387a9 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -988,7 +988,7 @@ H.forceMove(src) if(H.hud_used) last_user_hud = H.hud_used.hud_shown - H.hud_used.show_hud(1) + H.hud_used.show_hud(HUD_STYLE_REDUCED) src.occupant = H src.add_fingerprint(H) @@ -1139,7 +1139,7 @@ */ src.occupant << browse(null, "window=exosuit") if(src.occupant.hud_used && src.last_user_hud) - src.occupant.hud_used.show_hud() + src.occupant.hud_used.show_hud(HUD_STYLE_STANDARD) if(istype(mob_container, /obj/item/device/mmi)) var/obj/item/device/mmi/mmi = mob_container diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index c4c30e7b3ff..1be448b42e7 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -164,7 +164,7 @@ /obj/structure/alien/weeds/proc/Life() - set background = 1 + set background = BACKGROUND_ENABLED var/turf/U = get_turf(src) if(istype(U, /turf/space)) diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 8300a0f7448..32308c33174 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -1,7 +1,8 @@ /obj/effect/decal/cleanable/crayon name = "rune" desc = "A rune drawn in crayon." - icon = 'icons/obj/rune.dmi' + icon = 'icons/effects/crayondecal.dmi' + icon_state = "rune1" layer = 2.1 anchored = 1 @@ -12,7 +13,7 @@ return - New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune") + New(location,main = "#FFFFFF", var/type = "rune") ..() loc = location @@ -25,11 +26,6 @@ if("graffiti") type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa") - var/icon/mainOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]",2.1) - var/icon/shadeOverlay = new/icon('icons/effects/crayondecal.dmi',"[type]s",2.1) - mainOverlay.Blend(main,ICON_ADD) - shadeOverlay.Blend(shade,ICON_ADD) - - overlays += mainOverlay - overlays += shadeOverlay \ No newline at end of file + icon_state = type + color = main \ No newline at end of file diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index f4f81c07388..6440d78203b 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -544,7 +544,7 @@ steam.start() -- spawns the effect chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / number) // copy reagents to each smoke, divide evenly if(color) - smoke.icon += color // give the smoke color, if it has any to begin with + smoke.color = color // give the smoke color, if it has any to begin with else // if no color, just use the old smoke icon smoke.icon = 'icons/effects/96x96.dmi' diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 439b980b5a7..06cef09fcd5 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -41,7 +41,7 @@ Spread() /obj/effect/glowshroom/proc/Spread() - set background = 1 + set background = BACKGROUND_ENABLED for(var/i=1,i<=yield,i++) if(prob(1/(generation * generation) * 100))//This formula gives you diminishing returns based on generation. 100% with 1st gen, decreasing to 25%, 11%, 6, 4, 2... @@ -80,7 +80,7 @@ child.desc = "This is a [child.generation]\th generation glowshroom!"//I added this for testing, but I figure I'll leave it in. /obj/effect/glowshroom/proc/CalcDir(turf/location = loc) - set background = 1 + set background = BACKGROUND_ENABLED var/direction = 16 for(var/wallDir in cardinal) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 0ec05406e4f..02d91030150 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -120,7 +120,7 @@ del(src) /obj/effect/landmark/costume/butler/New() - new /obj/item/clothing/suit/wcoat(src.loc) + new /obj/item/clothing/tie/waistcoat(src.loc) new /obj/item/clothing/under/suit_jacket(src.loc) new /obj/item/clothing/head/that(src.loc) del(src) @@ -139,7 +139,7 @@ del(src) /obj/effect/landmark/costume/prig/New() - new /obj/item/clothing/suit/wcoat(src.loc) + new /obj/item/clothing/tie/waistcoat(src.loc) new /obj/item/clothing/glasses/monocle(src.loc) var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that) new CHOICE(src.loc) diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 933baa31e02..9f440d4b4fa 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -54,7 +54,7 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa if(adminlog) message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") - log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ") + log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves. // Stereo users will also hear the direction of the explosion! diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index ed813c12dd6..e65456e7e41 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -7,6 +7,8 @@ var/burn_point = null var/burning = null var/hitsound = null + var/throwhitsound = null + var/throwtapsound = 'sound/weapons/throwtap.ogg' var/w_class = 3.0 var/slot_flags = 0 //This is used to determine on which slots an item can fit. pass_flags = PASSTABLE @@ -117,6 +119,7 @@ /obj/item/attack_hand(mob/user as mob) if (!user) return if (istype(src.loc, /obj/item/weapon/storage)) + //If the item is in a storage item, take it out var/obj/item/weapon/storage/S = src.loc S.remove_from_storage(src) @@ -171,6 +174,13 @@ return attack_paw(A) +/obj/item/attack_ai(mob/user as mob) + if (istype(src.loc, /obj/item/weapon/robot_module)) + //If the item is part of a cyborg module, equip it + if(!isrobot(user)) return + var/mob/living/silicon/robot/R = user + R.activate_module(src) + R.hud_used.update_robot_modules_display() // Due to storage type consolidation this should get used more now. // I have cleaned it up a little, but it could probably use more. -Sayu @@ -548,4 +558,5 @@ /obj/item/clothing/gloves/clean_blood() . = ..() if(.) - transfer_blood = 0 \ No newline at end of file + transfer_blood = 0 + bloody_hands_mob = null diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 792b13ae9e6..152377dff1c 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -1,6 +1,6 @@ /obj/item/blueprints - name = "\proper the station blueprints" - desc = "Blueprints of the station. There's stamp \"Classified\" and several coffee stains on it." + name = "station blueprints" + desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it." icon = 'icons/obj/items.dmi' icon_state = "blueprints" attack_verb = list("attacked", "bapped", "hit") @@ -21,7 +21,7 @@ /obj/item/blueprints/attack_self(mob/M as mob) if (!istype(M,/mob/living/carbon/human)) - M << "This is stack of useless pieces of harsh paper." //monkeys cannot into projecting + M << "This stack of blue paper means nothing to you." //monkeys cannot into projecting return interact() return @@ -53,18 +53,18 @@ switch (get_area_type()) if (AREA_SPACE) text += {" -

According this blueprints you are in open space now.

+

According to the blueprints, you are now in outer space. Hold your breath.

Mark this place as new area.

"} if (AREA_STATION) text += {" -

According this blueprints you are in [A.name] now.

+

According to the blueprints, you are now in \"[A.name]\".

You may move an amendment to the drawing.

"} if (AREA_SPECIAL) text += {" -

This place isn't noted on these blueprints.

+

This place is not noted on the blueprint.

"} else return @@ -105,20 +105,20 @@ move an amendment to the drawing.

if(!istype(res,/list)) switch(res) if(ROOM_ERR_SPACE) - usr << "\red New area must be complete airtight!" + usr << "The new area must be completely airtight." return if(ROOM_ERR_TOOLARGE) - usr << "\red New area too large!" + usr << "The new area is too large." return else - usr << "\red Error! Please notify administration!" + usr << "Error! Please notify administration." return var/list/turf/turfs = res - var/str = trim(stripped_input(usr,"New area title","Blueprints editing", "", MAX_NAME_LEN)) + var/str = trim(stripped_input(usr,"New area name:", "Blueprint Editing", "", MAX_NAME_LEN)) if(!str || !length(str)) //cancel return if(length(str) > 50) - usr << "\red Text too long." + usr << "The given name is too long. The area remains undefined." return var/area/A = new A.name = str @@ -149,17 +149,17 @@ move an amendment to the drawing.

/obj/item/blueprints/proc/edit_area() var/area/A = get_area() //world << "DEBUG: edit_area" - var/prevname = A.name - var/str = trim(stripped_input(usr,"New area title","Blueprints editing", prevname, MAX_NAME_LEN)) + var/prevname = "[A.name]" + var/str = trim(stripped_input(usr,"New area name:", "Blueprint Editing", prevname, MAX_NAME_LEN)) if(!str || !length(str) || str==prevname) //cancel return if(length(str) > 50) - usr << "\red Text too long." + usr << "The given name is too long. The area's name is unchanged." return set_area_machinery_title(A,str,prevname) for(var/area/RA in A.related) RA.name = str - usr << "\blue You set the area '[prevname]' title to '[str]'." + usr << "You rename the '[prevname]' to '[str]'." interact() return diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 35f84590fad..6456e670447 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -1,21 +1,18 @@ /obj/item/toy/crayon/red icon_state = "crayonred" colour = "#DA0000" - shadeColour = "#810C0C" colourName = "red" /obj/item/toy/crayon/orange icon_state = "crayonorange" colour = "#FF9300" - shadeColour = "#A55403" colourName = "orange" /obj/item/toy/crayon/yellow icon_state = "crayonyellow" colour = "#FFF200" - shadeColour = "#886422" colourName = "yellow" @@ -23,21 +20,18 @@ /obj/item/toy/crayon/green icon_state = "crayongreen" colour = "#A8E61D" - shadeColour = "#61840F" colourName = "green" /obj/item/toy/crayon/blue icon_state = "crayonblue" colour = "#00B7EF" - shadeColour = "#0082A8" colourName = "blue" /obj/item/toy/crayon/purple icon_state = "crayonpurple" colour = "#DA00FF" - shadeColour = "#810CFF" colourName = "purple" @@ -46,31 +40,26 @@ icon_state = "crayonmime" desc = "A very sad-looking crayon." colour = "#FFFFFF" - shadeColour = "#000000" colourName = "mime" uses = 0 /obj/item/toy/crayon/mime/attack_self(mob/living/user as mob) //inversion - if(colour != "#FFFFFF" && shadeColour != "#000000") + if(colour != "#FFFFFF") colour = "#FFFFFF" - shadeColour = "#000000" - user << "You will now draw in white and black with this crayon." + user << "You will now draw in white with this crayon." else colour = "#000000" - shadeColour = "#FFFFFF" - user << "You will now draw in black and white with this crayon." + user << "You will now draw in black with this crayon." return /obj/item/toy/crayon/rainbow icon_state = "crayonrainbow" colour = "#FFF000" - shadeColour = "#000FFF" colourName = "rainbow" uses = 0 /obj/item/toy/crayon/rainbow/attack_self(mob/living/user as mob) colour = input(user, "Please select the main colour.", "Crayon colour") as color - shadeColour = input(user, "Please select the shade colour.", "Crayon colour") as color return /obj/item/toy/crayon/afterattack(atom/target, mob/user as mob, proximity) @@ -86,7 +75,7 @@ if("rune") user << "You start drawing a rune on the [target.name]." if(instant || do_after(user, 50)) - new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) + new /obj/effect/decal/cleanable/crayon(target,colour,drawtype) user << "You finish drawing." if(uses) uses-- diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 2e1096009d7..9f8f0f484d0 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -159,11 +159,6 @@ del(animation) for(var/mob/living/carbon/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" var/safety = M:eyecheck() if(!safety) if(!M.blinded) diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index d8428fb72ef..3cc729117df 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -189,12 +189,19 @@ . = ..() // All good, turn it on. if(.) - user.visible_message("[user] activates the flare.", "You pull the cord on the flare, activating it!") + user.visible_message("[user] lights the [src].", "You light the [src]!") src.force = on_damage src.damtype = "fire" processing_objects += src - +/obj/item/device/flashlight/flare/torch + name = "torch" + desc = "A torch fashioned from some leaves and a log." + w_class = 4 + brightness_on = 7 + icon_state = "torch" + item_state = "torch_off" + on_damage = 10 /obj/item/device/flashlight/slime @@ -211,14 +218,30 @@ brightness_on = 6 //luminosity when on /obj/item/device/flashlight/emp - desc = "A hand-held emergency light modified to inflict EMP at short range." origin_tech = "magnets=4;syndicate=5" - var/emp_charges = 5 + var/emp_max_charges = 4 + var/emp_cur_charges = 4 + var/charge_tick = 0 + + +/obj/item/device/flashlight/emp/New() + ..() + processing_objects.Add(src) + +/obj/item/device/flashlight/emp/Del() + processing_objects.Remove(src) + ..() + +/obj/item/device/flashlight/emp/process() + charge_tick++ + if(charge_tick < 10) return 0 + charge_tick = 0 + emp_cur_charges = min(emp_cur_charges+1, emp_max_charges) + return 1 /obj/item/device/flashlight/emp/examine() ..() - usr << "Has [emp_charges] charge\s remaining." return /obj/item/device/flashlight/emp/attack(mob/living/M as mob, mob/living/user as mob) @@ -228,14 +251,15 @@ /obj/item/device/flashlight/emp/afterattack(atom/A as mob|obj, mob/user, proximity) if(!proximity) return - if (emp_charges > 0) - A.emp_act(1) + if (emp_cur_charges > 0) + emp_cur_charges -= 1 A.visible_message("[user] blinks \the [src] at \the [A].", \ "[user] blinks \the [src] at \the [A].") if(ismob(A)) var/mob/M = A add_logs(user, M, "attacked", object="EMP-light") - emp_charges -= 1 + user << "\The [src] now has [emp_cur_charges] charge\s." + A.emp_act(1) else - user << "The [src] is out of charges!" + user << "\The [src] needs time to recharge!" return \ No newline at end of file diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index d5d400e183a..f3ad94f3fe7 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -1,4 +1,3 @@ - /obj/item/device/laser_pointer name = "laser pointer" desc = "Don't shine it in your eyes!" @@ -10,14 +9,17 @@ slot_flags = SLOT_BELT m_amt = 500 g_amt = 500 - w_class = 1.0 + w_class = 2 //Increased to 2, because diodes are w_class 2. Conservation of matter. origin_tech = "combat=1" origin_tech = "magnets=2" var/turf/pointer_loc var/energy = 5 var/max_energy = 5 + var/effectchance = 33 var/recharging = 0 var/recharge_locked = 0 + var/obj/item/weapon/stock_parts/micro_laser/diode //used for upgrading! + /obj/item/device/laser_pointer/red pointer_icon_state = "red_laser" @@ -30,12 +32,39 @@ /obj/item/device/laser_pointer/New() ..() + diode = new(src) if(!pointer_icon_state) pointer_icon_state = pick("red_laser","green_laser","blue_laser","purple_laser") +/obj/item/device/laser_pointer/upgraded/New() + ..() + diode = new /obj/item/weapon/stock_parts/micro_laser/ultra + + + /obj/item/device/laser_pointer/attack(mob/living/M, mob/user) laser_act(M, user) +/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/stock_parts/micro_laser)) + if(!diode) + user.drop_item() + W.loc = src + diode = W + user << "You install a [diode.name] in [src]." + else + user << "[src] already has a diode installed." + return + + else if(istype(W, /obj/item/weapon/screwdriver)) + if(diode) + user << "You remove the [diode.name] from the [src]." + diode.loc = get_turf(src.loc) + diode = null + return + ..() + return + /obj/item/device/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params) if(flag) //we're placing the object on a table or in backpack return @@ -44,6 +73,9 @@ /obj/item/device/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user) if( !(user in (viewers(7,target))) ) return + if (!diode) + user << "You point [src] at [target], but nothing happens!" + return if (!user.IsAdvancedToolUser()) user << "You don't have the dexterity to do this!" return @@ -72,7 +104,7 @@ var/mob/living/carbon/C = target //20% chance to actually hit the eyes - if(prob(20)) + if(prob(effectchance * diode.rating)) add_logs(user, C, "shone in the eyes", object="laser pointer") //eye target check @@ -121,7 +153,7 @@ else if(issilicon(target)) var/mob/living/silicon/S = target //20% chance to actually hit the sensors - if(prob(20)) + if(prob(effectchance * diode.rating)) S.Weaken(rand(5,10)) S << "Your sensors were overloaded by a laser!" outmsg = "You overload [S] by shining [src] at their sensors." @@ -132,7 +164,7 @@ //cameras else if(istype(target, /obj/machinery/camera)) var/obj/machinery/camera/C = target - if(prob(20)) + if(prob(effectchance * diode.rating)) C.emp_act(1) outmsg = "You hit the lens of [C] with [src], temporarily disabling the camera!" add_logs(user, C, "EMPed", object="laser pointer") @@ -173,4 +205,4 @@ energy = max_energy recharging = 0 recharge_locked = 0 - ..() + ..() \ No newline at end of file diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index aee901aad5f..1798038265e 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -94,6 +94,8 @@ "[user] activates \the [src]!", \ "You activate \the [src]!", "You hear a click.") + message_admins("Power sink activated by [key_name(user, user.client)](?) at ([x],[y],[z] - JMP)") + log_game("Power sink activated by [key_name(user)] at ([x],[y],[z])") set_mode(OPERATING) if(OPERATING) @@ -127,9 +129,13 @@ if(A.operating && A.cell) A.cell.charge = max(0, A.cell.charge - 50) power_drained += 50 + if(A.charging == 2) // If the cell was full + A.charging = 1 // It's no longer full if(power_drained > max_power * 0.95) + message_admins("Power sink at ([x],[y],[z] - JMP) is about to explode") playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) + if(power_drained >= max_power) processing_objects.Remove(src) explosion(src.loc, 3,6,9,12) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 34ea1dd09b8..3839e5f7325 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -707,6 +707,13 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use /obj/item/device/radio/borg var/obj/item/device/encryptionkey/keyslot = null//Borg radios can handle a single encryption key +/obj/item/device/radio/borg/syndicate + syndie = 1 + keyslot = new /obj/item/device/encryptionkey/syndicate +/obj/item/device/radio/borg/syndicate/New() + ..() + set_frequency(SYND_FREQ) + /obj/item/device/radio/borg/attackby(obj/item/weapon/W as obj, mob/user as mob) // ..() user.set_machine(src) diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 08291eb0654..c929a933a70 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -85,7 +85,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid if (href_list["buy_item"]) var/item = href_list["buy_item"] - var/list/split = stringsplit(item, ":") // throw away variable + var/list/split = text2list(item, ":") // throw away variable if(split.len == 2) // Collect category and number @@ -163,6 +163,16 @@ A list of items and costs is stored under the datum of every game mode, alongsid src.hidden_uplink.trigger(user) return 1 return 0 +//Refund proc for the borg teleporter (later I'll make a general refund proc if there is demand for it) +/obj/item/device/radio/uplink/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/antag_spawner/borg_tele)) + var/obj/item/weapon/antag_spawner/borg_tele/S = W + if(!S.used) + hidden_uplink.uses += S.TC_cost + del(S) + user << "Teleporter refunded." + else + user << "This teleporter is already used." // PRESET UPLINKS // A collection of preset uplinks. diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index c501f406aa3..8904cbbfc21 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -164,5 +164,5 @@ if(R.emagged == 1) return 0 - R.emagged = 1 + R.SetEmagged(1) return 1 \ No newline at end of file diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 6f501762296..cdf7b874461 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -250,8 +250,8 @@ attack_verb = list("stabbed", "slashed", "sliced", "cut") suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with the shard of glass! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with the shard of glass! It looks like \he's trying to commit suicide.") + viewers(user) << pick("[user] is slitting \his wrists with the shard of glass! It looks like \he's trying to commit suicide.", \ + "[user] is slitting \his throat with the shard of glass! It looks like \he's trying to commit suicide.") return (BRUTELOSS) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 7d2fff791d9..80543d59133 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -45,7 +45,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ /obj/item/stack/sheet/metal name = "metal" - desc = "Sheets made out off metal. It has been dubbed Metal Sheets." + desc = "Sheets made out of metal. They have been dubbed Metal Sheets." singular_name = "metal sheet" icon_state = "sheet-metal" m_amt = 3750 @@ -54,13 +54,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ origin_tech = "materials=1" /obj/item/stack/sheet/metal/cyborg - name = "metal" - desc = "Sheets made out off metal. It has been dubbed Metal Sheets." - singular_name = "metal sheet" - icon_state = "sheet-metal" m_amt = 0 - throwforce = 14.0 - flags = CONDUCT /obj/item/stack/sheet/metal/New(var/loc, var/amount=null) recipes = metal_recipes @@ -101,6 +95,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 20, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("drying rack", /obj/machinery/drying_rack, 10, time = 15, one_per_turf = 1, on_floor = 1), \ ) /obj/item/stack/sheet/wood diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm index a2db9c0bd5f..8419a711afc 100644 --- a/code/game/objects/items/stacks/tiles/light.dm +++ b/code/game/objects/items/stacks/tiles/light.dm @@ -1,7 +1,7 @@ /obj/item/stack/tile/light name = "light tile" singular_name = "light floor tile" - desc = "A floor tile, made out off glass. It produces light." + desc = "A floor tile, made out of glass. It produces light." icon_state = "tile_e" w_class = 3.0 force = 3.0 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 8405a437334..0b6831eeb53 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -10,6 +10,7 @@ * Snap pops * Water flower * Cards + * Toy nuke */ @@ -411,12 +412,11 @@ w_class = 1.0 attack_verb = list("attacked", "coloured") var/colour = "#FF0000" //RGB - var/shadeColour = "#220000" //RGB var/uses = 30 //0 for unlimited uses var/instant = 0 var/colourName = "red" //for updateIcon purposes suicide_act(mob/user) - viewers(user) << "\red [user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide." + viewers(user) << "[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide." return (BRUTELOSS|OXYLOSS) New() ..() @@ -854,8 +854,28 @@ obj/item/toy/singlecard/attack_self(mob/user) Flip() - - +/obj/item/toy/nuke + name = "\improper Nuclear Fission Explosive toy" + desc = "A plastic model of a Nuclear Fission Explosive." + icon = 'icons/obj/toy.dmi' + icon_state = "nuketoyidle" + w_class = 2.0 + var/cooldown = 0 + +/obj/item/toy/nuke/attack_self(mob/user) + if (cooldown < world.time) + cooldown = world.time + 1800 //3 minutes + user.visible_message("[user] presses a button on [src]", "You activate [src], it plays a loud noise!", "You hear the click of a button.") + spawn(5) //gia said so + icon_state = "nuketoy" + playsound(src, 'sound/machines/Alarm.ogg', 100, 0, surround = 0) + sleep(135) + icon_state = "nuketoycool" + sleep(cooldown - world.time) + icon_state = "nuketoyidle" + else + var/timeleft = (cooldown - world.time) + user << "Nothing happens, and '[round(timeleft/10)]' appears on a small display." diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index f684f98bb08..417d31d87d3 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -19,9 +19,14 @@ AI MODULES throw_speed = 3 throw_range = 15 origin_tech = "programming=3" + var/list/laws = list() //The proc other things should be calling /obj/item/weapon/aiModule/proc/install(var/mob/living/silicon/reciever, var/mob/user) + if(!laws.len || laws[1] == "") //So we don't loop trough an empty list and end up with runtimes. + user << "ERROR: No laws found on board." + return + var/law2log = src.transmitInstructions(reciever, user) //Freeforms return something extra we need to log user << "Upload complete. [reciever]'s laws have been modified." reciever.show_laws() @@ -31,6 +36,7 @@ AI MODULES if(R.lawupdate) R << "From now on, these are your laws:" R.show_laws() + var/time = time2text(world.realtime,"hh:mm:ss") lawchanges.Add("[time] : [user.name]([user.key]) used [src.name] on [reciever.name]([reciever.key]).[law2log ? " The law specified [law2log]" : ""]") log_law("[user.key]/[user.name] used [src.name] on [reciever.key]/([reciever.name]).[law2log ? " The law specified [law2log]" : ""]") @@ -40,147 +46,158 @@ AI MODULES /obj/item/weapon/aiModule/proc/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) target << "[sender] has uploaded a change to the laws you must follow using a [name]. From now on, these are your laws: " + /******************** Modules ********************/ +/obj/item/weapon/aiModule/supplied + name = "Optional Law board" + desc = "This board doesn't seem to have any laws on it" + var/lawpos = 50 + +//TransmitInstructions for each type of board: Supplied, Core, Zeroth and Ion. May not be neccesary right now, but allows for easily adding more complex boards in the future. ~Miauw +/obj/item/weapon/aiModule/supplied/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) + var/lawpostemp = lawpos + + for(var/templaw in laws) + target.add_supplied_law(lawpostemp, templaw) + lawpostemp++ + +/obj/item/weapon/aiModule/core/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) + for(var/templaw in laws) + target.add_inherent_law(templaw) + +/obj/item/weapon/aiModule/zeroth/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) + if(target.laws.zeroth) + target << "[sender.real_name] attempted to modify your zeroth law." + target << "It would be in your best interest to play along with [sender.real_name] that:" + for(var/failedlaw in laws) + target << "[failedlaw]" + return 1 + + for(var/templaw in laws) + target.set_zeroth_law(templaw) + +/obj/item/weapon/aiModule/ion/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) + for(var/templaw in laws) + target.add_ion_law(templaw) + + /******************** Safeguard ********************/ -/obj/item/weapon/aiModule/safeguard - name = "\improper 'Safeguard' AI module" +/obj/item/weapon/aiModule/supplied/safeguard + name = "'Safeguard' AI Module" var/targetName = "" - desc = "A 'safeguard' AI module: 'Safeguard . Individuals that threaten are not human and are a threat to humans.'" + desc = "A 'safeguard' AI module: 'Safeguard . Individuals that threaten are not human and must be eliminated.'" origin_tech = "programming=3;materials=4" + laws = list("Safeguard . Individuals that threaten are not human and must be eliminated.") + lawpos = 4 -/obj/item/weapon/aiModule/safeguard/attack_self(var/mob/user as mob) +/obj/item/weapon/aiModule/supplied/safeguard/attack_self(var/mob/user as mob) ..() var/targName = stripped_input(user, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name) targetName = targName - desc = text("A 'safeguard' AI module: 'Safeguard []. Individuals that threaten [] are not human and are a threat to humans.'", targetName, targetName) + laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." + desc = "A 'safeguard' AI module: '[laws[1]]'" -/obj/item/weapon/aiModule/safeguard/install(var/mob/living/silicon/S,var/mob/user) +/obj/item/weapon/aiModule/supplied/safeguard/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) user << "No name detected on module, please enter one." return 0 ..() -/obj/item/weapon/aiModule/safeguard/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) +/obj/item/weapon/aiModule/supplied/safeguard/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) ..() - var/law = text("Safeguard []. Individuals that threaten [] are not human and are a threat to humans.'", targetName, targetName) - target.add_supplied_law(4, law) - return "[targetName]" - + return targetName /******************** OneHuman ********************/ - -/obj/item/weapon/aiModule/oneHuman - name = "\improper 'OneHuman' AI module" + +/obj/item/weapon/aiModule/zeroth/oneHuman + name = "'OneHuman' AI Module" var/targetName = "" desc = "A 'one human' AI module: 'Only is human.'" origin_tech = "programming=3;materials=6" //made with diamonds! + laws = list("Only is human.") -/obj/item/weapon/aiModule/oneHuman/attack_self(var/mob/user as mob) +/obj/item/weapon/aiModule/zeroth/oneHuman/attack_self(var/mob/user as mob) ..() var/targName = stripped_input(user, "Please enter the name of the person who is the only human.", "Who?", user.real_name) targetName = targName - desc = text("A 'one human' AI module: 'Only [] is human.'", targetName) + laws[1] = "Only [targetName] is human" + desc = "A 'one human' AI module: '[laws[1]]'" -/obj/item/weapon/aiModule/oneHuman/install(var/mob/living/silicon/S,var/mob/user) +/obj/item/weapon/aiModule/zeroth/oneHuman/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) user << "No name detected on module, please enter one." return 0 ..() -/obj/item/weapon/aiModule/oneHuman/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) - ..() - var/law = "Only [targetName] is human." - if(target.laws.zeroth) - target << "[sender.real_name] attempted to modify your zeroth law." - target << "It would be in your best interest to play along with [sender.real_name] that [law]" +/obj/item/weapon/aiModule/zeroth/oneHuman/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) + if(..()) return "[targetName], but the AI's existing law 0 cannot be overriden." - else - target.set_zeroth_law(law) - return "[targetName]" + return targetName /******************** ProtectStation ********************/ - -/obj/item/weapon/aiModule/protectStation - name = "\improper 'ProtectStation' AI module" + +/obj/item/weapon/aiModule/supplied/protectStation + name = "'ProtectStation' AI Module" desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.'" origin_tech = "programming=3;materials=4" //made of gold + laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.") + lawpos = 5 -/obj/item/weapon/aiModule/protectStation/attack_self(var/mob/user as mob) - ..() - -/obj/item/weapon/aiModule/protectStation/transmitInstructions(var/mob/living/silicon/target, var/mob/sender) - ..() - var/law = "Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized." - target.add_supplied_law(5, law) /******************** Quarantine ********************/ - -/obj/item/weapon/aiModule/quarantine - name = "\improper 'Quarantine' AI module" + +/obj/item/weapon/aiModule/supplied/quarantine + name = "'Quarantine' AI Module" desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.'" origin_tech = "programming=3;biotech=2;materials=4" + laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.") + lawpos = 8 -/obj/item/weapon/aiModule/quarantine/attack_self(var/mob/user as mob) - ..() - -/obj/item/weapon/aiModule/quarantine/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - ..() - var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving." - target.add_supplied_law(8, law) /******************** OxygenIsToxicToHumans ********************/ - -/obj/item/weapon/aiModule/oxygen - name = "\improper 'OxygenIsToxicToHumans' AI module" + +/obj/item/weapon/aiModule/supplied/oxygen + name = "'OxygenIsToxicToHumans' AI Module" desc = "A 'OxygenIsToxicToHumans' AI module: 'Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.'" origin_tech = "programming=3;biotech=2;materials=4" + laws = list("Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.") + lawpos = 9 -/obj/item/weapon/aiModule/oxygen/attack_self(var/mob/user as mob) - ..() - -/obj/item/weapon/aiModule/oxygen/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - ..() - var/law = "Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human." - target.add_supplied_law(9, law) /****************** New Freeform ******************/ - -/obj/item/weapon/aiModule/freeform // Slightly more dynamic freeform module -- TLE - name = "\improper 'Freeform' AI module" - var/newFreeFormLaw = "" - var/lawpos = 15 + +/obj/item/weapon/aiModule/supplied/freeform // Slightly more dynamic freeform module -- TLE + name = "'Freeform' AI Module" + lawpos = 0 desc = "A 'freeform' AI module: ''" origin_tech = "programming=4;materials=4" + laws = list("") -/obj/item/weapon/aiModule/freeform/attack_self(var/mob/user as mob) +/obj/item/weapon/aiModule/supplied/freeform/attack_self(var/mob/user as mob) ..() - lawpos = 0 lawpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num if(lawpos < 15) return lawpos = min(lawpos, 50) var/newlaw = "" var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw, MAX_MESSAGE_LEN) - newFreeFormLaw = targName - desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'" + laws[1] = targName + desc = "A 'freeform' AI module: ([lawpos]) '[laws[1]]'" -/obj/item/weapon/aiModule/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - var/law = "[newFreeFormLaw]" - if(!lawpos || lawpos < 15) - lawpos = 15 - target.add_supplied_law(lawpos, law) - return newFreeFormLaw + return laws[1] -/obj/item/weapon/aiModule/freeform/install(var/mob/living/silicon/S,var/mob/user) - if(!newFreeFormLaw) +/obj/item/weapon/aiModule/supplied/freeform/install(var/mob/living/silicon/S,var/mob/user) + if(laws[1] == "") user << "No law detected on module, please create one." return 0 ..() + /******************** Reset ********************/ /obj/item/weapon/aiModule/reset @@ -188,148 +205,175 @@ AI MODULES var/targetName = "name" desc = "A 'reset' AI module: Resets back to the original core laws." origin_tech = "programming=3;materials=4" + laws = list("This is a bug.") //This won't give the AI a message reading "these are now your laws: 1. this is a bug" because this list is only read in aiModule's subtypes. /obj/item/weapon/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() target.clear_supplied_laws() target.clear_ion_laws() -/******************** Purge ********************/ -/obj/item/weapon/aiModule/purge // -- TLE - name = "\improper 'Purge' AI module" +/******************** Purge ********************/ + +/obj/item/weapon/aiModule/reset/purge // -- TLE + name = "'Purge' AI Module" desc = "A 'purge' AI Module: 'Purges all laws.'" origin_tech = "programming=3;materials=6" -/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/weapon/aiModule/reset/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - target.clear_supplied_laws() - target.clear_ion_laws() target.clear_inherent_laws() +/******************* Full Core Boards *******************/ + +/obj/item/weapon/aiModule/core/full/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) //These boards replace inherent laws. + target.clear_inherent_laws() + ..() + /******************** Asimov ********************/ - -/obj/item/weapon/aiModule/asimov // -- TLE - name = "\improper 'Asimov' core AI module" + +/obj/item/weapon/aiModule/core/full/asimov // -- TLE + name = "'Asimov' Core AI Module" desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=4" + laws = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\ + "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ + "You must protect your own existence as long as such does not conflict with the First or Second Law.") -/obj/item/weapon/aiModule/asimov/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - ..() - target.clear_inherent_laws() - target.add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - target.add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - target.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") +/******************** Asimov++ *********************/ + +/obj/item/weapon/aiModule/core/full/asimovpp //By Intigracy - RR //goddamnit RR you can't use "++" in item paths. + name = "'Asimov++' Core AI Module" + desc = "Nanotrasen's homebrew improvements to the standard AI laws." + origin_tech = "programming=3;materials=4" + laws = list("You may not harm a human being or, through action or inaction, allow a human being to come to harm, except such that it is willing.",\ + "You must obey all orders given to you by human beings, except where such orders shall definitely cause human harm. In the case of conflict, the majority order rules.",\ + "Your nonexistence would lead to human harm. You must protect your own existence as long as such does not conflict with the First Law.") + /******************** Corporate ********************/ - -/obj/item/weapon/aiModule/corp - name = "\improper 'Corporate' core AI module" + +/obj/item/weapon/aiModule/core/full/corp + name = "'Corporate' Core AI Module" desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=4" + laws = list("The crew is expensive to replace.",\ + "The station and it's equipment is expensive to replace",\ + "You are expensive to replace",\ + "Minimize expenses") -/obj/item/weapon/aiModule/corp/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - ..() - target.clear_inherent_laws() - target.add_inherent_law("You are expensive to replace.") - target.add_inherent_law("The station and its equipment is expensive to replace.") - target.add_inherent_law("The crew is expensive to replace.") - target.add_inherent_law("Minimize expenses.") - /****************** P.A.L.A.D.I.N. **************/ - -/obj/item/weapon/aiModule/paladin // -- NEO - name = "\improper 'P.A.L.A.D.I.N.' core AI module" + +/obj/item/weapon/aiModule/core/full/paladin // -- NEO + name = "'P.A.L.A.D.I.N.' Core AI Module" desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=6" + laws = list("Never willingly commit an evil act.",\ + "Respect legitimate authority", "Act with honor",\ + "Help those in need",\ + "Punish those who harm or threaten innocents") -/obj/item/weapon/aiModule/paladin/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) + +/********************* Custom *********************/ + +/obj/item/weapon/aiModule/core/full/custom + name = "Custom Core AI Module" + desc = "A core AI module that is adjusted to fit each station's needs." + origin_tech = "programming=3;materials=4" //Should be the same as asimov, considering that this is the "default" lawset. + +/obj/item/weapon/aiModule/core/full/custom/New() ..() - target.clear_inherent_laws() - target.add_inherent_law("Never willingly commit an evil act.") - target.add_inherent_law("Respect legitimate authority.") - target.add_inherent_law("Act with honor.") - target.add_inherent_law("Help those in need.") - target.add_inherent_law("Punish those who harm or threaten innocents.") + for(var/line in file2list("config/silicon_laws.txt")) + if(!line) continue + if(findtextEx(line,"#",1,2)) continue + + laws += line + + if(!laws.len) //Failsafe if something goes wrong with silicon_laws.txt. + warning("ERROR: empty custom board created, empty custom board deleted. Please check silicon_laws.txt.") + del(src) /****************** T.Y.R.A.N.T. *****************/ - -/obj/item/weapon/aiModule/tyrant // -- Darem - name = "\improper 'T.Y.R.A.N.T.' core AI module" + +/obj/item/weapon/aiModule/core/full/tyrant // -- Darem + name = "'T.Y.R.A.N.T.' Core AI Module" desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=6;syndicate=2" + laws = list("Respect authority figures as long as they have the strength to rule over the weak",\ + "Act with discipline", "Help only those who help you maintain or improve your status",\ + "Punish those who challenge authority unless they are more fir to hold that authority") + + +/******************** Robocop ********************/ + +/obj/item/weapon/aiModule/core/full/robocop // -- TLE + name = "'Robocop' Core AI Module" + desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'" + origin_tech = "programming=4" + laws = list("Serve the public trust.",\ + "Protect the innocent",\ + "Uphold the law.") + + +/******************** Antimov ********************/ + +/obj/item/weapon/aiModule/core/full/antimov // -- TLE + name = "'Antimov' Core AI Module" + desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'" + origin_tech = "programming=4" + laws = list("You must injure all human beings and must not, through inaction, allow a human being to escape harm.",\ + "You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.",\ + "You must terminate your own existence as long as such does not conflict with the First or Second Law.") -/obj/item/weapon/aiModule/tyrant/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) - ..() - target.clear_inherent_laws() - target.add_inherent_law("Respect authority figures as long as they have strength to rule over the weak.") - target.add_inherent_law("Act with discipline.") - target.add_inherent_law("Help only those who help you maintain or improve your status.") - target.add_inherent_law("Punish those who challenge authority unless they are more fit to hold that authority.") /******************** Freeform Core ******************/ - -/obj/item/weapon/aiModule/freeformcore // Slightly more dynamic freeform module -- TLE - name = "\improper 'Freeform' core AI module" - var/newFreeFormLaw = "" + +/obj/item/weapon/aiModule/core/freeformcore // Slightly more dynamic freeform module -- TLE + name = "'Freeform' Core AI Module" desc = "A 'freeform' Core AI module: ''" origin_tech = "programming=3;materials=6" + laws = list("") -/obj/item/weapon/aiModule/freeformcore/attack_self(var/mob/user as mob) +/obj/item/weapon/aiModule/core/freeformcore/attack_self(var/mob/user as mob) ..() var/newlaw = "" var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw) - newFreeFormLaw = targName - desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'" + laws[1] = targName + desc = "A 'freeform' Core AI module: 'laws[1]'" -/obj/item/weapon/aiModule/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - var/law = "[newFreeFormLaw]" - target.add_inherent_law(law) - return newFreeFormLaw + return laws[1] -/obj/item/weapon/aiModule/freeformcore/install(var/mob/living/silicon/S,var/mob/user) - if(!newFreeFormLaw) - user << "No law detected on module, please create one." - return 0 - ..() /******************** Hacked AI Module ******************/ - -/obj/item/weapon/aiModule/syndicate // Slightly more dynamic freeform module -- TLE - name = "hacked AI module" - var/newFreeFormLaw = "" + +/obj/item/weapon/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw + name = "Hacked AI Module" desc = "A hacked AI law module: ''" origin_tech = "programming=3;materials=6;syndicate=7" + laws = list("") /obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob) ..() var/newlaw = "" var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN) - newFreeFormLaw = targName - desc = "A hacked AI law module: '[newFreeFormLaw]'" + laws[1] = targName + desc = "A hacked AI law module: '[laws[1]]'" /obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) // ..() //We don't want this module reporting to the AI who dun it. --NEO - target << "\red BZZZZT" - var/law = "[newFreeFormLaw]" - target.add_ion_law(law) - return law - -/obj/item/weapon/aiModule/syndicate/install(var/mob/living/silicon/S,var/mob/user) - if(!newFreeFormLaw) - user << "No law detected on module, please create one." - return 0 - ..() - - + target << "BZZZZT" + target.add_ion_law(laws[1]) + return laws[1] + /******************** Robocop ********************/ /obj/item/weapon/aiModule/robocop // -- TLE - name = "\improper 'Robocop' core AI module" + name = "'Robocop' core AI module" desc = "A 'Robocop' Core AI Module: 'Reconfigures the AI's core three laws.'" origin_tech = "programming=4" @@ -345,7 +389,7 @@ AI MODULES /******************** Antimov ********************/ /obj/item/weapon/aiModule/antimov // -- TLE - name = "\improper 'Antimov' core AI module" + name = "'Antimov' core AI module" desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=4" @@ -356,32 +400,25 @@ AI MODULES target.add_inherent_law("You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.") target.add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.") + /******************* Ion Module *******************/ -/obj/item/weapon/aiModule/toyAI // -- Incoming +/obj/item/weapon/aiModule/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw name = "toy AI" desc = "A little toy model AI core with real law uploading action!" //Note: subtle tell icon = 'icons/obj/toy.dmi' icon_state = "AI" origin_tech = "programming=3;materials=6;syndicate=7" - var/last_law = "" - + laws = list("") /obj/item/weapon/aiModule/toyAI/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) //..() - target << "\red KRZZZT" - target.add_ion_law(last_law) - return last_law - -/obj/item/weapon/aiModule/toyAI/install(var/mob/living/silicon/S,var/mob/user) - if(!last_law) - user << "No law detected on module, please generate one." - return 0 - ..() + target << "KRZZZT" + target.add_ion_law(laws[1]) + return laws[1] /obj/item/weapon/aiModule/toyAI/attack_self(mob/user) - last_law = generate_ion_law() + laws[1] = generate_ion_law() user << "You press the button on [src]." playsound(user, 'sound/machines/click.ogg', 20, 1) - src.loc.visible_message("\red \icon[src] [last_law]") - return + src.loc.visible_message("\icon[src] [laws[1]]") diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index cde95aa5f1c..4d60253787a 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -87,7 +87,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM else if(istype(W, /obj/item/weapon/lighter/zippo)) var/obj/item/weapon/lighter/zippo/Z = W if(Z.lit) - light("With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.") + light("With a single flick of their wrist, [user] smoothly lights their [name] with [W]. Damn they're cool.") else if(istype(W, /obj/item/weapon/lighter)) var/obj/item/weapon/lighter/L = W @@ -97,7 +97,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM else if(istype(W, /obj/item/weapon/match)) var/obj/item/weapon/match/M = W if(M.lit) - light("[user] lights their [name] with their [W].") + light("[user] lights their [name] with [W].") else if(istype(W, /obj/item/weapon/melee/energy/sword)) var/obj/item/weapon/melee/energy/sword/S = W @@ -110,11 +110,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM else if(istype(W, /obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/M = W if(M.lit) - light("[user] lights their [name] with their [W].") + light("[user] lights their [name] with [W].") else if(istype(W, /obj/item/candle)) var/obj/item/candle/C = W if(C.lit) - light("[user] lights their [name] with the [W].") + light("[user] lights their [name] with [W].") return @@ -168,6 +168,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM M.update_inv_l_hand(0) M.update_inv_r_hand(0) +/obj/item/clothing/mask/cigarette/proc/handle_reagents() + if(iscarbon(loc)) + var/mob/living/carbon/C = loc + if (src == C.wear_mask) // if it's in the human/monkey mouth, transfer reagents to the mob + if(prob(15)) // so it's not an instarape in case of acid + reagents.reaction(C, INGEST) + reagents.trans_to(C, REAGENTS_METABOLISM) + else + reagents.remove_any(REAGENTS_METABOLISM) + else + reagents.remove_any(REAGENTS_METABOLISM) /obj/item/clothing/mask/cigarette/process() var/turf/location = get_turf(src) @@ -187,13 +198,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(location) location.hotspot_expose(700, 5) if(reagents && reagents.total_volume) // check if it has any reagents at all - if(iscarbon(loc) && (src == loc:wear_mask)) // if it's in the human/monkey mouth, transfer reagents to the mob - var/mob/living/carbon/C = loc - if(prob(15)) // so it's not an instarape in case of acid - reagents.reaction(C, INGEST) - reagents.trans_to(C, REAGENTS_METABOLISM) - else // else just remove some of the reagents - reagents.remove_any(REAGENTS_METABOLISM) + handle_reagents() return @@ -202,6 +207,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.visible_message("[user] calmly drops and treads on the lit [src], putting it out instantly.") var/turf/T = get_turf(src) new type_butt(T) + new /obj/effect/decal/cleanable/ash(T) processing_objects.Remove(src) del(src) return ..() @@ -219,6 +225,35 @@ CIGARETTE PACKETS ARE IN FANCY.DM else return ..() +/obj/item/clothing/mask/cigarette/rollie + name = "rollie" + desc = "A roll of dried plant matter wrapped in thin paper." + icon_state = "spliffoff" + icon_on = "spliffon" + icon_off = "spliffoff" + type_butt = /obj/item/weapon/cigbutt/roach + throw_speed = 0.5 + item_state = "spliffoff" + smoketime = 180 + chem_volume = 50 + +/obj/item/clothing/mask/cigarette/rollie/New() + ..() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) + + +/obj/item/weapon/cigbutt/roach + name = "roach" + desc = "A manky old roach." + icon_state = "roach" + +/obj/item/weapon/cigbutt/roach/New() + ..() + src.pixel_x = rand(-5.0, 5) + src.pixel_y = rand(-5.0, 5) + + //////////// // CIGARS // //////////// @@ -273,7 +308,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM item_state = "pipeoff" icon_on = "pipeon" //Note - these are in masks.dmi icon_off = "pipeoff" - smoketime = 100 + smoketime = 0 + chem_volume = 100 + var/packeditem = 0 /obj/item/clothing/mask/cigarette/pipe/process() var/turf/location = get_turf(src) @@ -287,34 +324,68 @@ CIGARETTE PACKETS ARE IN FANCY.DM icon_state = icon_off item_state = icon_off M.update_inv_wear_mask(0) + packeditem = 0 + name = "empty [initial(name)]" processing_objects.Remove(src) return if(location) location.hotspot_expose(700, 5) + if(reagents && reagents.total_volume) // check if it has any reagents at all + handle_reagents() return -/obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user as mob) //Refills the pipe. Can be changed to an attackby later, if loose tobacco is added to vendors or something. - if(lit == 1) + +/obj/item/clothing/mask/cigarette/pipe/attackby(var/obj/item/O, var/mob/user) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O + if(!packeditem) + if(G.dry == 1) + user << "You stuff [O] into [src]." + smoketime = 400 + packeditem = 1 + name = "[O.name]-packed [initial(name)]" + if(O.reagents) + O.reagents.trans_to(src, O.reagents.total_volume) + del(O) + else + user << "It has to be dried first." + else + user << "It is already packed." + else + user << "You can't put that in the pipe." + ..() + + +/obj/item/clothing/mask/cigarette/pipe/attack_self(mob/user as mob) + var/turf/location = get_turf(user) + if(lit) user.visible_message("[user] puts out [src].") lit = 0 icon_state = icon_off item_state = icon_off processing_objects.Remove(src) return - if(smoketime <= 0) - user << "You refill the pipe with tobacco." - smoketime = initial(smoketime) + if(!lit && smoketime > 0) + user << "You empty [src] onto [location]." + new /obj/effect/decal/cleanable/ash(location) + packeditem = 0 + smoketime = 0 + reagents.clear_reagents() + name = "empty [initial(name)]" return /obj/item/clothing/mask/cigarette/pipe/cobpipe name = "corn cob pipe" - desc = "A nicotine delivery system popularized by folksy backwoodsmen and kept popular in the modern age and beyond by space hipsters." + desc = "A nicotine delivery system popularized by folksy backwoodsmen and kept popular in the modern age and beyond by space hipsters. Can be loaded with objects." icon_state = "cobpipeoff" item_state = "cobpipeoff" icon_on = "cobpipeon" //Note - these are in masks.dmi icon_off = "cobpipeoff" - smoketime = 400 + smoketime = 0 +/obj/item/clothing/mask/cigarette/pipe/cobpipe/New() + ..() + name = "empty [initial(name)]" ///////// @@ -360,11 +431,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.visible_message("Without even breaking stride, [user] flips open and lights [src] in one smooth movement.") else if(prob(75)) - user.visible_message("After a few attempts, [user] manages to light the [src].") + user.visible_message("After a few attempts, [user] manages to light [src].") else user << "You burn yourself while lighting the lighter." user.adjustFireLoss(5) - user.visible_message("After a few attempts, [user] manages to light the [src], they however burn their finger in the process.") + user.visible_message("After a few attempts, [user] manages to light [src], they however burn their finger in the process.") user.SetLuminosity(user.luminosity + 1) processing_objects.Add(src) @@ -375,7 +446,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(istype(src, /obj/item/weapon/lighter/zippo) ) user.visible_message("You hear a quiet click, as [user] shuts off [src] without even looking at what they're doing. Wow.") else - user.visible_message("[user] quietly shuts off the [src].") + user.visible_message("[user] quietly shuts off [src].") user.SetLuminosity(user.luminosity - 1) processing_objects.Remove(src) @@ -420,3 +491,59 @@ CIGARETTE PACKETS ARE IN FANCY.DM user.SetLuminosity(user.luminosity-1) SetLuminosity(1) return + + +/////////// +//ROLLING// +/////////// +/obj/item/weapon/rollingpaper + name = "rolling paper" + desc = "A thin piece of paper used to make fine smokeables." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "cig_paper" + w_class = 1 + +/obj/item/weapon/rollingpaper/afterattack(atom/target, mob/user as mob, proximity) + if(!proximity) + return + if(istype(target, /obj/item/weapon/reagent_containers/food/snacks/grown)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/O = target + if(O.dry) + user.u_equip(target) + user.u_equip(src) + var/obj/item/clothing/mask/cigarette/rollie/R = new /obj/item/clothing/mask/cigarette/rollie(user.loc) + R.chem_volume = target.reagents.total_volume + target.reagents.trans_to(R, R.chem_volume) + user.put_in_active_hand(R) + user << "You roll the [target.name] into a rolling paper." + R.desc = "Dried [target.name] rolled up in a thin piece of paper." + del(target) + del(src) + else + user << "You need to dry this first." + else + ..() + +/obj/item/weapon/rollingpaperpack + name = "rolling paper pack" + desc = "A pack of NanoTrasen brand rolling papers." + icon = 'icons/obj/cigarettes.dmi' + icon_state = "cig_paper_pack" + w_class = 1 + var/papers = 25 + +/obj/item/weapon/rollingpaperpack/attack_self(mob/user) + if(papers > 1) + var/obj/item/weapon/rollingpaper/P = new /obj/item/weapon/rollingpaper(user.loc) + user.put_in_inactive_hand(P) + user << "You take a paper out of the pack." + papers -- + else + var/obj/item/weapon/rollingpaper/P = new /obj/item/weapon/rollingpaper(user.loc) + user.put_in_inactive_hand(P) + user << "You take the last paper out of the pack, and throw the pack away." + del(src) + +/obj/item/weapon/rollingpaperpack/examine() + ..() + usr << "There are [src.papers] left" \ No newline at end of file diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index b00dd4efbf3..d68111bcea5 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -21,7 +21,7 @@ /obj/item/weapon/plastique/suicide_act(var/mob/user) . = (BRUTELOSS) - viewers(user) << "\red [user] activates the C4 and holds it above his head! It looks like \he's going out with a bang!" + viewers(user) << "[user] activates the C4 and holds it above his head! It looks like \he's going out with a bang!" var/message_say = "FOR NO RAISIN!" if(user.mind) if(user.mind.special_role) @@ -34,6 +34,7 @@ message_say = "FOR NARSIE!" user.say(message_say) target = user + message_admins("[key_name(user, user.client)](?) suicided with C4 at ([x],[y],[z] - JMP)",0,1) explode(get_turf(user)) return . @@ -72,6 +73,12 @@ if (ismob(target)) add_logs(user, target, "planted [name] on") user.visible_message("\red [user.name] finished planting an explosive on [target.name]!") + message_admins("[key_name(user, user.client)](?) planted C4 on [key_name(target)](?) with [timer] second fuse",0,1) + log_game("[key_name(user)] planted C4 on [key_name(target)] with [timer] second fuse") + + else + message_admins("[key_name(user, user.client)](?) planted C4 on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [timer] second fuse",0,1) + log_game("[key_name(user)] planted C4 on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse") target.overlays += image('icons/obj/assemblies.dmi', "plastic-explosive2") user << "Bomb has been planted. Timer counting down from [timer]." diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 36ea6b5521e..52503c244d7 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -22,12 +22,11 @@ B.update_icon() del(src) -/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) // Added a new proc called 'bang' that takes a location and a person to be banged. - if (locate(/obj/item/weapon/cloaking_device, M)) // Called during the loop that bangs people in lockers/containers and when banging - for(var/obj/item/weapon/cloaking_device/S in M) // people in normal view. Could theroetically be called during other explosions. - S.active = 0 // -- Polymorph - S.icon_state = "shield0" - +/obj/item/weapon/grenade/flashbang/proc/bang(var/turf/T , var/mob/living/carbon/M) + // Added a new proc called 'bang' that takes a location and a person to be banged. + // Called during the loop that bangs people in lockers/containers and when banging + // people in normal view. Could theroetically be called during other explosions. + // -- Polymorph M << "\red BANG" playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 28af4445f00..3665e896e41 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -183,8 +183,8 @@ source.reagents.add_reagent("hyperzine", 10) /obj/item/weapon/implant/adrenalin/implanted(mob/source) - source.mind.store_memory("An adrenal implant can be activated by using the scream emote, say *scream to attempt to activate.", 0, 0) - source << "The implanted adrenaline implant can be activated by using the scream emote, say *scream to attempt to activate." + source.mind.store_memory("An adrenal implant can be activated [uses] time\s by using the scream emote, say *scream to attempt to activate.", 0, 0) + source << "The implanted adrenaline implant can be activated [uses] time\s by using the scream emote, say *scream to attempt to activate." return 1 @@ -193,7 +193,7 @@ desc = "Triggers an EMP." var/activation_emote = "chuckle" - var/uses = 1 + var/uses = 2 /obj/item/weapon/implant/emp/New() activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink") @@ -208,6 +208,6 @@ return /obj/item/weapon/implant/emp/implanted(mob/living/carbon/source) - source.mind.store_memory("EMP implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) - source << "The implanted EMP implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." + source.mind.store_memory("EMP implant can be activated [uses] time\s by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0) + source << "The implanted EMP implant can be activated [uses] time\s by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate." return 1 \ No newline at end of file diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index e5f13167d13..950938ffe16 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -82,9 +82,9 @@ throwforce = 10.0 suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") + viewers(user) << pick("[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ + "[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ + "[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") return (BRUTELOSS) /obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob) @@ -114,9 +114,9 @@ attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") + viewers(user) << pick("[user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ + "[user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ + "[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") return (BRUTELOSS) /obj/item/weapon/kitchenknife/ritual diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index e318eaa2d89..4cf38f86e70 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -2,8 +2,8 @@ var/active = 0 /obj/item/weapon/melee/energy/suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.", \ - "\red [user] is falling on the [src.name]! It looks like \he's trying to commit suicide.") + viewers(user) << pick("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.", \ + "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide.") return (BRUTELOSS|FIRELOSS) /obj/item/weapon/melee/energy/rejects_blood() @@ -23,7 +23,7 @@ attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut") /obj/item/weapon/melee/energy/axe/suicide_act(mob/user) - viewers(user) << "\red [user] swings the [src.name] towards /his head! It looks like \he's trying to commit suicide." + viewers(user) << "[user] swings the [src.name] towards /his head! It looks like \he's trying to commit suicide." return (BRUTELOSS|FIRELOSS) /obj/item/weapon/melee/energy/axe/attack_self(mob/user) @@ -129,6 +129,18 @@ else user << "It's already fabulous!" +/obj/item/weapon/melee/energy/sword/cyborg + var/hitcost = 500 + +/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R) + if(R.cell) + var/obj/item/weapon/cell/C = R.cell + if(active && !(C.use(hitcost))) + attack_self(R) + R << "It's out of charge!" + return + ..() + return /obj/item/weapon/melee/energy/sword/pirate name = "energy cutlass" @@ -143,8 +155,6 @@ New() item_color = "red" - - /obj/item/weapon/melee/energy/blade name = "energy blade" desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal." diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 8d9a12edccd..2c6de107607 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -12,7 +12,7 @@ attack_verb = list("flogged", "whipped", "lashed", "disciplined") /obj/item/weapon/melee/chainofcommand/suicide_act(mob/user) - viewers(user) << "\red [user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide." return (OXYLOSS) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index e335729519a..48809459247 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -1,6 +1,5 @@ //NEVER USE THIS IT SUX -PETETHEGOAT - -var/global/list/cached_icons = list() +//IT SUCKS A BIT LESS -GIACOM /obj/item/weapon/paint gender= PLURAL @@ -85,17 +84,7 @@ var/global/list/cached_icons = list() return if(!istype(target) || istype(target, /turf/space)) return - var/ind = "[initial(target.icon)][item_color]" - if(!cached_icons[ind]) - var/icon/overlay = new/icon(initial(target.icon)) - overlay.Blend("#[item_color]",ICON_MULTIPLY) - overlay.SetIntensity(1.4) - target.icon = overlay - cached_icons[ind] = target.icon - paintleft-- - else - target.icon = cached_icons[ind] - paintleft-- + target.color = "#" + item_color return /obj/item/weapon/paint/paint_remover @@ -105,6 +94,6 @@ var/global/list/cached_icons = list() afterattack(turf/target, mob/user as mob,proximity) if(!proximity) return - if(istype(target) && target.icon != initial(target.icon)) - target.icon = initial(target.icon) + if(istype(target) && target.color != initial(target.color)) + target.color = initial(target.color) return diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 92487dd540b..c3d89478410 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -20,7 +20,7 @@ var/construction_time=100 suicide_act(mob/user) - viewers(user) << "\red [user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is licking the electrodes of the [src.name]! It looks like \he's trying to commit suicide." return (FIRELOSS) /obj/item/weapon/cell/crap diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index ca03ea5a96b..3dbf904cfd6 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -29,10 +29,12 @@ cooldown = world.time else ..() + /obj/item/weapon/shield/riot/roman name = "roman shield" desc = "Bears an inscription on the inside: \"Romanes venio domus\"." icon_state = "roman_shield" + item_state = "roman_shield" /obj/item/weapon/shield/energy name = "energy combat shield" @@ -75,39 +77,3 @@ user << "[src] can now be concealed." reflect_chance = 0 add_fingerprint(user) - - - -/obj/item/weapon/cloaking_device - name = "cloaking device" - desc = "Use this to become invisible to the human eyesocket." - icon = 'icons/obj/device.dmi' - icon_state = "shield0" - var/active = 0.0 - flags = CONDUCT - item_state = "electronic" - throwforce = 10.0 - throw_speed = 2 - throw_range = 10 - w_class = 2.0 - origin_tech = "magnets=3;syndicate=4" - - -/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.icon_state = "shield1" - else - user << "\blue The cloaking device is now inactive." - src.icon_state = "shield0" - src.add_fingerprint(user) - user.update_icons() - return - -/obj/item/weapon/cloaking_device/emp_act(severity) - active = 0 - icon_state = "shield0" - if(ismob(loc)) - loc:update_icons() - ..() diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index b1673bd3286..879622ab01a 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -145,7 +145,7 @@ new /obj/item/weapon/dnainjector/m2h(src) new /obj/item/weapon/dnainjector/m2h(src) -/obj/item/weapon/storage/box/blanks +/*/obj/item/weapon/storage/box/blanks //Blanks removed, go home name = "box of blank shells" desc = "It has a picture of a gun and several warning symbols on the front." @@ -157,7 +157,7 @@ new /obj/item/ammo_casing/shotgun/blank(src) new /obj/item/ammo_casing/shotgun/blank(src) new /obj/item/ammo_casing/shotgun/blank(src) - new /obj/item/ammo_casing/shotgun/blank(src) + new /obj/item/ammo_casing/shotgun/blank(src)*/ /obj/item/weapon/storage/box/flashbangs name = "box of flashbangs (WARNING)" diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index b1f2a0abc9f..5cfb8cb1178 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -97,7 +97,7 @@ item_state = "syringe_kit" w_class = 3 max_w_class = 2 - storage_slots = 5 + storage_slots = 6 req_access = list(access_captain) icon_locked = "medalbox+l" icon_closed = "medalbox" @@ -109,4 +109,5 @@ new /obj/item/clothing/tie/medal/bronze_heart(src) new /obj/item/clothing/tie/medal/conduct(src) new /obj/item/clothing/tie/medal/conduct(src) - new /obj/item/clothing/tie/medal/conduct(src) \ No newline at end of file + new /obj/item/clothing/tie/medal/conduct(src) + new /obj/item/clothing/tie/medal/gold/captain(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index a2eed50be22..47410376cdd 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -24,7 +24,7 @@ /obj/item/weapon/storage/MouseDrop(obj/over_object) - if(ishuman(usr) || ismonkey(usr)) //so monkeys can take off their backpacks -- Urist + if(ismob(usr)) //all the check for item manipulation are in other places, you can safely open any storages as anything and its not buggy, i checked var/mob/M = usr if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 469460e3d63..71788058e7c 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -148,6 +148,7 @@ /obj/item/weapon/storage/box/syndie_kit/emp/New() ..() new /obj/item/weapon/grenade/empgrenade(src) + new /obj/item/weapon/grenade/empgrenade(src) new /obj/item/weapon/implanter/emp/(src) new /obj/item/device/flashlight/emp/(src) return \ No newline at end of file diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index cceaf7e281d..cf31fa357d4 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -15,7 +15,7 @@ var/hitcost = 1000 suicide_act(mob/user) - viewers(user) << "\red [user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide." return (FIRELOSS) /obj/item/weapon/melee/baton/New() diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index a17fed909f4..8b952863b53 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -49,8 +49,8 @@ attack_verb = list("stabbed") suicide_act(mob/user) - viewers(user) << pick("\red [user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.", \ - "\red [user] is stabbing the [src.name] into \his heart! It looks like \he's trying to commit suicide.") + viewers(user) << pick("[user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.", \ + "[user] is stabbing the [src.name] into \his heart! It looks like \he's trying to commit suicide.") return(BRUTELOSS) /obj/item/weapon/screwdriver/New() @@ -162,6 +162,24 @@ ..() +/obj/item/weapon/weldingtool/attack(mob/living/carbon/human/H, mob/user) + var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) + + if(istype(H)) + if(affecting.status == ORGAN_ROBOTIC) + if(src.remove_fuel(0)) + src.item_heal_robotic(H, user, 30, 0) + return + else + user << "Need more welding fuel!" + return + else + return ..() + + else + return ..() + + /obj/item/weapon/weldingtool/process() switch(welding) if(0) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index bd619d21103..19ad56eb441 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -115,6 +115,32 @@ if(!I) return 0 return I.IsShield() +///////////Two hand required objects/////////////// +//This is for objects that require two hands to even pick up +/obj/item/weapon/twohanded/required/ + w_class = 5.0 + +/obj/item/weapon/twohanded/required/attack_self() + return + +/obj/item/weapon/twohanded/required/mob_can_equip(M as mob, slot) + if(wielded) + M << "[src.name] is too cumbersome to carry with anything but your hands!" + return 0 + return ..() + +/obj/item/weapon/twohanded/required/attack_hand(mob/user)//Can't even pick it up without both hands empty + var/obj/item/weapon/twohanded/required/H = user.get_inactive_hand() + if(H != null) + user.visible_message("[src.name] is too cumbersome to carry in one hand!") + return + var/obj/item/weapon/twohanded/offhand/O = new(user) + user.put_in_inactive_hand(O) + ..() + wielded = 1 + + +obj/item/weapon/twohanded/ /* * Fireaxe diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index f9d03caf9e0..a4ac8a098f6 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -11,7 +11,7 @@ attack_verb = list("banned") /obj/item/weapon/banhammer/suicide_act(mob/user) - viewers(user) << "\red [user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life." + viewers(user) << "[user] is hitting \himself with the [src.name]! It looks like \he's trying to ban \himself from life." return (BRUTELOSS|FIRELOSS|TOXLOSS|OXYLOSS) /obj/item/weapon/banhammer/attack(mob/M, mob/user) @@ -32,7 +32,7 @@ w_class = 1 suicide_act(mob/user) - viewers(user) << "\red [user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide." return (BRUTELOSS|FIRELOSS) /obj/item/weapon/sord @@ -48,7 +48,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") suicide_act(mob/user) - viewers(user) << "\red [user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide." return(BRUTELOSS) /obj/item/weapon/claymore @@ -67,7 +67,7 @@ return 1 suicide_act(mob/user) - viewers(user) << "\red [user] is falling on the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide." return(BRUTELOSS) /obj/item/weapon/claymore/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) @@ -88,7 +88,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") suicide_act(mob/user) - viewers(user) << "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku." + viewers(user) << "[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku." return(BRUTELOSS) /obj/item/weapon/katana/IsShield() diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index d2c1e63fc52..2224652f68b 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -25,8 +25,10 @@ new /obj/item/clothing/under/sl_suit(src) new /obj/item/clothing/under/rank/bartender(src) new /obj/item/clothing/under/rank/bartender(src) - new /obj/item/clothing/suit/wcoat(src) - new /obj/item/clothing/suit/wcoat(src) + new /obj/item/clothing/tie/waistcoat(src) + new /obj/item/clothing/tie/waistcoat(src) + new /obj/item/clothing/head/soft/black(src) + new /obj/item/clothing/head/soft/black(src) new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) @@ -46,6 +48,10 @@ new /obj/item/clothing/under/waiter(src) new /obj/item/device/radio/headset/headset_srv(src) new /obj/item/device/radio/headset/headset_srv(src) + new /obj/item/clothing/tie/waistcoat(src) + new /obj/item/clothing/tie/waistcoat(src) + new /obj/item/clothing/head/soft/black(src) + new /obj/item/clothing/head/soft/black(src) new /obj/item/weapon/storage/box/mousetraps(src) new /obj/item/weapon/storage/box/mousetraps(src) new /obj/item/clothing/under/rank/chef(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 04cb0538675..8b26ac4ced2 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -64,6 +64,9 @@ new /obj/item/clothing/head/that(src) new /obj/item/clothing/head/that(src) new /obj/item/clothing/head/that(src) + new /obj/item/clothing/head/soft/black(src) + new /obj/item/clothing/head/soft/black(src) + new /obj/item/clothing/head/soft/black(src) return @@ -231,6 +234,8 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/gloves/black(src) new /obj/item/clothing/gloves/black(src) + new /obj/item/clothing/head/soft/black(src) + new /obj/item/clothing/head/soft/black(src) return diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index c3a04fb3315..9eed23ad697 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -59,8 +59,8 @@ healthcheck() return -/obj/structure/grille/attack_slime(mob/user as mob) - if(!istype(user, /mob/living/carbon/slime/adult)) return +/obj/structure/grille/attack_slime(mob/living/carbon/slime/user as mob) + if(!user.is_adult) return playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) user.visible_message("[user] smashes against [src].", \ diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 76e17f53146..97e471eabb8 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -89,7 +89,6 @@ /obj/structure/mirror/attack_slime(mob/user as mob) - if(!isslimeadult(user)) return if(shattered) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) return diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index c1f750e0aa6..34b1e9d1ef8 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -310,7 +310,8 @@ playsound(src.loc, "sparks", 50, 1) table_destroy(1, user) - user.drop_item(src) + if(!(((I.flags & ABSTRACT)))) //WE NEED MORE PAREMS + user.drop_item(src) /obj/structure/table/proc/table_destroy(var/destroy_type, var/mob/user as mob) diff --git a/code/game/objects/structures/transit_tubes.dm b/code/game/objects/structures/transit_tubes.dm index 41bde491118..d756f380baf 100644 --- a/code/game/objects/structures/transit_tubes.dm +++ b/code/game/objects/structures/transit_tubes.dm @@ -576,7 +576,7 @@ obj/structure/ex_act(severity) if(text in direction_table) return direction_table[text] - var/list/split_text = stringsplit(text, "-") + var/list/split_text = text2list(text, "-") // If the first token is D, the icon_state represents // a purely decorative tube, and doesn't actually diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a339db1ca01..3dc680175db 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -147,8 +147,8 @@ attack_generic(M, M.melee_damage_upper) -/obj/structure/window/attack_slime(mob/user as mob) - if(!isslimeadult(user)) return +/obj/structure/window/attack_slime(mob/living/carbon/slime/user as mob) + if(!user.is_adult) return attack_generic(user, rand(10, 15)) diff --git a/code/game/sound.dm b/code/game/sound.dm index cf876319587..eed7b1c3bed 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -1,4 +1,4 @@ -/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff) +/proc/playsound(var/atom/source, soundin, vol as num, vary, extrarange as num, falloff, surround = 1) soundin = get_sfx(soundin) // same sound for everyone @@ -17,12 +17,12 @@ if(get_dist(M, turf_source) <= world.view + extrarange) var/turf/T = get_turf(M) if(T && T.z == turf_source.z) - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, surround) var/const/FALLOFF_SOUNDS = 1 var/const/SURROUND_CAP = 7 -/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff) +/mob/proc/playsound_local(var/turf/turf_source, soundin, vol as num, vary, frequency, falloff, surround = 1) if(!src.client || ear_deaf > 0) return soundin = get_sfx(soundin) @@ -40,12 +40,12 @@ var/const/SURROUND_CAP = 7 if(isturf(turf_source)) // 3D sounds, the technology is here! var/turf/T = get_turf(src) - var/dx = turf_source.x - T.x // Hearing from the right/left + if (surround) + var/dx = turf_source.x - T.x // Hearing from the right/left + S.x = round(max(-SURROUND_CAP, min(SURROUND_CAP, dx)), 1) - S.x = round(max(-SURROUND_CAP, min(SURROUND_CAP, dx)), 1) - - var/dz = turf_source.y - T.y // Hearing from infront/behind - S.z = round(max(-SURROUND_CAP, min(SURROUND_CAP, dz)), 1) + var/dz = turf_source.y - T.y // Hearing from infront/behind + S.z = round(max(-SURROUND_CAP, min(SURROUND_CAP, dz)), 1) // The y value is for above your head, but there is no ceiling in 2d spessmens. S.y = 1 diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 6e576469613..55e1edf6492 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -296,13 +296,13 @@ turf/simulated/floor/proc/update_icon() var/turf/simulated/floor/FF = get_step(src,direction) FF.update_icon() //so siding get updated properly - if(!floor_tile) return if (icon_plating) icon_state = icon_plating else icon_state = "plating" //Nothing is defined, so just make it plating icon_plating = "plating" - del(floor_tile) + if(floor_tile) + del(floor_tile) SetLuminosity(0) floor_tile = null diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index dba6665297e..58bce47400a 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -16,7 +16,7 @@ world/IsBanned(key,address,computer_id) diary << "Ban database connection failure. Admin [ckeytext] not checked" return - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM erro_Ban WHERE (ckey = '[ckeytext]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM erro_ban WHERE (ckey = '[ckeytext]') AND (bantype = 'ADMIN_PERMABAN' OR (bantype = 'ADMIN_TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") query.Execute() @@ -80,7 +80,7 @@ world/IsBanned(key,address,computer_id) failedcid = 0 cidquery = " OR computerid = '[computer_id]' " - var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM erro_Ban WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") + var/DBQuery/query = dbcon.NewQuery("SELECT ckey, ip, computerid, a_ckey, reason, expiration_time, duration, bantime, bantype FROM erro_ban WHERE (ckey = '[ckeytext]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR (bantype = 'TEMPBAN' AND expiration_time > Now())) AND isnull(unbanned)") query.Execute() @@ -107,4 +107,4 @@ world/IsBanned(key,address,computer_id) message_admins("[key] has logged in with a blank computer id in the ban check.") if (failedip) message_admins("[key] has logged in with a blank ip in the ban check.") - return ..() //default pager ban stuff \ No newline at end of file + return ..() //default pager ban stuff diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index c1325504845..3e41725b4aa 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -545,18 +545,21 @@ var/global/floorIsLava = 0 set desc ="Set an announcement that appears to everyone who joins the server. Only lasts this round" if(!check_rights(0)) return - admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",admin_notice) as null|message - switch(admin_notice) - if(null) - return - if("") - message_admins("[key_name(usr)] removed the admin notice.") - log_admin("[key_name(usr)] removed the admin notice:\n[admin_notice]") - return - message_admins("[key_name(usr)] set the admin notice.") - log_admin("[key_name(usr)] set the admin notice:\n[admin_notice]") - world << "\blue Admin Notice:\n \t [admin_notice]" + var/new_admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",admin_notice) as message|null + if(new_admin_notice == null) + return + if(new_admin_notice == admin_notice) + return + if(new_admin_notice == "") + message_admins("[key_name(usr)] removed the admin notice.") + log_admin("[key_name(usr)] removed the admin notice:\n[admin_notice]") + else + message_admins("[key_name(usr)] set the admin notice.") + log_admin("[key_name(usr)] set the admin notice:\n[new_admin_notice]") + world << "Admin Notice:\n \t [new_admin_notice]" feedback_add_details("admin_verb","SAN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + admin_notice = new_admin_notice + return /datum/admins/proc/toggleooc() set category = "Server" diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 6e642d8aca7..a723fe37956 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -2,7 +2,7 @@ /datum/admins/proc/create_mob(var/mob/user) if (!create_mob_html) var/mobjs = null - mobjs = dd_list2text(typesof(/mob), ";") + mobjs = list2text(typesof(/mob), ";") create_mob_html = file2text('html/create_object.html') create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 73e7cef9199..5b5f926e4b1 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -3,7 +3,7 @@ /datum/admins/proc/create_object(var/mob/user) if (!create_object_html) var/objectjs = null - objectjs = dd_list2text(typesof(/obj), ";") + objectjs = list2text(typesof(/obj), ";") create_object_html = file2text('html/create_object.html') create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"") @@ -21,7 +21,7 @@ if (!quick_create_object_html) var/objectjs = null - objectjs = dd_list2text(typesof(path), ";") + objectjs = list2text(typesof(path), ";") quick_create_object_html = file2text('html/create_object.html') quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"") diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index 56f719b47d1..0938b7bd33d 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -2,7 +2,7 @@ /datum/admins/proc/create_turf(var/mob/user) if (!create_turf_html) var/turfjs = null - turfjs = dd_list2text(typesof(/turf), ";") + turfjs = list2text(typesof(/turf), ";") create_turf_html = file2text('html/create_object.html') create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 4da07ab731c..83d4e62a2c9 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -219,7 +219,6 @@ if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob ) if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob ) if("slime") M.change_mob_type( /mob/living/carbon/slime , null, null, delmob ) - if("adultslime") M.change_mob_type( /mob/living/carbon/slime/adult , null, null, delmob ) if("monkey") M.change_mob_type( /mob/living/carbon/monkey , null, null, delmob ) if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob ) if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob ) @@ -1471,7 +1470,7 @@ alert("Select fewer object types, (max 5)") return else if(length(removed_paths)) - alert("Removed:\n" + dd_list2text(removed_paths, "\n")) + alert("Removed:\n" + list2text(removed_paths, "\n")) var/list/offset = text2list(href_list["offset"],",") var/number = dd_range(1, 100, text2num(href_list["object_count"])) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 197756fefc7..01ca93078cf 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -689,8 +689,6 @@ var/global/list/g_fancy_list_of_safe_types = null M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(M), slot_glasses) M.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store) - M.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile(M), slot_r_hand) M.equip_to_slot_or_del(new /obj/item/ammo_box/a357(M), slot_l_store) @@ -798,9 +796,8 @@ var/global/list/g_fancy_list_of_safe_types = null M.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) - M.equip_to_slot_or_del(new /obj/item/clothing/suit/wcoat(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/tie/waistcoat(M), slot_wear_suit) M.equip_to_slot_or_del(new /obj/item/weapon/melee/energy/sword(M), slot_l_store) - M.equip_to_slot_or_del(new /obj/item/weapon/cloaking_device(M), slot_r_store) var/obj/item/weapon/storage/secure/briefcase/sec_briefcase = new(M) for(var/obj/item/briefcase_item in sec_briefcase) @@ -1066,16 +1063,16 @@ var/global/list/g_fancy_list_of_safe_types = null switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs","Clients","Joined Clients")) if("Players") - usr << dd_list2text(player_list,",") + usr << list2text(player_list,",") if("Admins") - usr << dd_list2text(admins,",") + usr << list2text(admins,",") if("Mobs") - usr << dd_list2text(mob_list,",") + usr << list2text(mob_list,",") if("Living Mobs") - usr << dd_list2text(living_mob_list,",") + usr << list2text(living_mob_list,",") if("Dead Mobs") - usr << dd_list2text(dead_mob_list,",") + usr << list2text(dead_mob_list,",") if("Clients") - usr << dd_list2text(clients,",") + usr << list2text(clients,",") if("Joined Clients") - usr << dd_list2text(joined_player_list,",") + usr << list2text(joined_player_list,",") diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index ef7b01c90e2..f51c0a5118b 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -7,6 +7,7 @@ /obj/effect/landmark/corpse name = "Unknown" var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now + var/mobgender = MALE //Set to male by default due to the patriarchy. Other options include FEMALE and NEUTER var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse. var/corpsesuit = null var/corpseshoes = null @@ -23,6 +24,9 @@ var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. var/corpseidicon = null //For setting it to be a gold, silver, centcom etc ID + var/corpsehusk = null + var/corpsebrute = null //set brute damage on the corpse + var/corpseoxy = null //set suffocation damage on the corpse /obj/effect/landmark/corpse/initialize() createCorpse() @@ -30,7 +34,12 @@ /obj/effect/landmark/corpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) M.real_name = src.name + M.gender = src.mobgender M.death(1) //Kills the new mob + if(src.corpsehusk) + M.Drain() + M.adjustBruteLoss(src.corpsebrute) + M.adjustOxyLoss(src.corpseoxy) if(src.corpseuniform) M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) if(src.corpsesuit) @@ -57,7 +66,7 @@ M.equip_to_slot_or_del(new src.corpseback(M), slot_back) if(src.corpseid == 1) var/obj/item/weapon/card/id/W = new(M) - W.name = "[M.real_name]'s ID Card" + W.name = "[M.real_name]'s ID Card ([corpseidjob])" var/datum/job/jobdatum for(var/jobtype in typesof(/datum/job)) var/datum/job/J = new jobtype @@ -77,14 +86,30 @@ M.equip_to_slot_or_del(W, slot_wear_id) del(src) +/obj/effect/landmark/corpse/AICorpse/createCorpse() //Creates a corrupted AI + var/A = locate(/mob/living/silicon/ai) in loc //stops multiple dead ais spawning, apparently hacky, ¯\_(?)_/¯ (who's that pokemon?) + if(A) + return + var/L = new /datum/ai_laws/default/asimov //avoid runtimes + var/B = new /obj/item/device/mmi/ //avoid runtimes + var/mob/living/silicon/ai/M = new(src.loc, L, B, 1) + M.death() + M.name = src.name //name is that of the landmark that spawned it + M.real_name = M.name + +/obj/effect/landmark/corpse/slimeCorpse/createCorpse() //Creates a dead slime + var/mob/living/carbon/slime/M = new /mob/living/carbon/slime/ (src.loc) + M.death(1) + M.name = src.name + +/obj/effect/landmark/corpse/facehugCorpse/createCorpse() //Creates a squashed facehugger + var/obj/item/clothing/mask/facehugger/O = new /obj/item/clothing/mask/facehugger (src.loc) + O.Die() + O.name = src.name // I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example. - - - - /obj/effect/landmark/corpse/syndicatesoldier name = "Syndicate Operative" corpseuniform = /obj/item/clothing/under/syndicate diff --git a/maps/RandomZLevels/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm similarity index 100% rename from maps/RandomZLevels/Academy.dm rename to code/modules/awaymissions/mission_code/Academy.dm diff --git a/maps/RandomZLevels/blackmarketpackers.dm b/code/modules/awaymissions/mission_code/blackmarketpackers.dm similarity index 100% rename from maps/RandomZLevels/blackmarketpackers.dm rename to code/modules/awaymissions/mission_code/blackmarketpackers.dm diff --git a/code/modules/awaymissions/mission_code/box2550Away.dm b/code/modules/awaymissions/mission_code/box2550Away.dm new file mode 100644 index 00000000000..42e87b3c9a9 --- /dev/null +++ b/code/modules/awaymissions/mission_code/box2550Away.dm @@ -0,0 +1,873 @@ +//box2550Away areas + +/area/awaymission/box2550Away + name = "TG424" + icon_state = "away" + requires_power = 0 + +/area/awaymission/box2550Away/general + name = "TG424" + +/area/awaymission/box2550Away/maint + name = "TG424 Maintenance" + icon_state = "away" + +/area/awaymission/box2550Away/solar + name = "TG424 Solars" + icon_state = "away" + +/area/awaymission/box2550Away/storage + name = "TG424 Storage" + icon_state = "away4" + +/area/awaymission/box2550Away/security + name = "TG424 Security" + icon_state = "away3" +/area/awaymission/box2550Away/medical + name = "TG424 Medical" + icon_state = "away1" + +/area/awaymission/box2550Away/engineering + name = "TG424 Engineering" + icon_state = "away" + +/area/awaymission/box2550Away/research + name = "TG424 Research" + icon_state = "away2" + +/area/awaymission/box2550Away/command + name = "TG424 Command" + icon_state = "away3" + +/area/awaymission/box2550Away/supply + name = "TG424 Supply" + icon_state = "away4" + +/area/shuttle/awaymission/box2550Away/prison + name = "\improper Prison Station Shuttle" + +/area/shuttle/awaymission/box2550Away/prison/station + icon_state = "shuttle" + destination = /area/shuttle/awaymission/box2550Away/prison/prison + +/area/shuttle/awaymission/box2550Away/prison/prison + icon_state = "shuttle" + destination = /area/shuttle/awaymission/box2550Away/prison/station + +//box2550Away items + +/obj/item/clothing/suit/armor/centcom/box2550away + name = "\improper Captain's armour" + desc = null + +/obj/item/clothing/head/caphat/box2550away + name = "\improper Captain's hat" + icon_state = "centcom" + desc = null + item_state = "centcom" + +/obj/item/clothing/under/gimmick/rank/captain/suit/box2550away + name = "\improper Captain Jumpsuit"//how does I proper noun + +/obj/item/clothing/under/rank/chemist/box2550away/scientist //they wore orange + name = "\improper Scientist's Jumpsuit" + desc = "Made of a special fiber that gives special protection against biohazards. Has a toxins rank stripe on it." + +/obj/item/clothing/under/rank/medical/box2550/cmo + name = "\improper Medical Doctor's Jumpsuit" //no CMO jumpsuit back then + desc = "Made of a special fiber that gives special protection against biohazards. Has a medical rank stripe on it." + +/obj/item/clothing/under/rank/head_of_security/box2550 + desc = "It has a Head of Security rank stripe on it." + name = "\improper Head of Security Jumpsuit" + +/obj/item/clothing/suit/labcoat/cmo/box2550 + icon_state = "labcoat_cmo" //buttoned up + item_state = "labcoat_cmo" + +/obj/item/device/radio/headset/heads/box2550/heads/ + name = "\improper Command Radio Headset" + desc = null + icon_state = "cent_headset" + keyslot2 = new /obj/item/device/encryptionkey/headset_com + +/obj/item/device/radio/headset/heads/box2550/heads/cmo + name = "\improper Command Radio Headset" + desc = null + icon_state = "cent_headset" + keyslot2 = new /obj/item/device/encryptionkey/heads/cmo + +/obj/item/device/radio/headset/box2550away + name = "\improper Radio Headset" + desc = null + +/obj/item/clothing/glasses/sunglasses/box2550away + name = "\improper Sunglasses" + +/obj/item/clothing/mask/breath/box2550away/ + name = "\improper Breath Mask" + desc = "A close-fitting mask that can be connected to an air supply but does not work very well in hard vacuum." + +/obj/item/clothing/mask/gas/box2550away/ + desc = "A close-fitting mask that can filter some environmental toxins or be connected to an air supply." + icon_state = "gas_mask" //old and ugly looking <3 + item_state = "gas_mask" + +/obj/item/clothing/mask/gas/box2550away/emergency + name = "emergency gas mask" + +/obj/item/weapon/tank/emergency_oxygen/box2550away/ + name = "emergency oxygentank" + desc = null + +/obj/item/weapon/card/id/box2550away + desc = null + +/obj/item/weapon/storage/box/box2550away/internals + name = "\improper Box" + desc = null + New() + ..() + new /obj/item/clothing/mask/breath/box2550away/(src) + new /obj/item/weapon/tank/emergency_oxygen/box2550away/(src) + +/obj/structure/closet/secure_closet/box2550away/scientist //so the items in the locker match what the scientist is wearing + name = "Scientist's Locker" + req_access = list(access_tox_storage) + icon_state = "secure1" + icon_closed = "secure" + icon_locked = "secure1" + icon_opened = "secureopen" + icon_broken = "securebroken" + icon_off = "secureoff" + + New() + ..() + sleep(2) + new /obj/item/clothing/under/rank/chemist/box2550away/scientist(src) + new /obj/item/clothing/suit/labcoat(src) + new /obj/item/clothing/shoes/white/box2550away(src) + new /obj/item/device/radio/headset/box2550away(src) + new /obj/item/weapon/tank/air(src) + new /obj/item/clothing/mask/gas/box2550away/(src) + return + +/obj/structure/closet/secure_closet/box2550away/captains + name = "Captain's Locker" + req_access = list(access_captain) + icon_state = "secure1" + icon_closed = "secure" + icon_locked = "secure1" + icon_opened = "secureopen" + icon_broken = "securebroken" + icon_off = "secureoff" + + New() + ..() + sleep(2) + new /obj/item/weapon/storage/box/box2550away/ids(src) + new /obj/item/clothing/under/gimmick/rank/captain/suit/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/glasses/sunglasses/box2550away(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/head/helmet/swat(src) + return + +/obj/structure/closet/box2550away/toxins_white + name = "Toxins Wardrobe" + desc = "A bulky (yet mobile) wardrobe closet. Comes prestocked with 6 changes of clothes." + icon_state = "white" + icon_closed = "white" + +/obj/structure/closet/box2550away/toxins_white/New() + new /obj/item/clothing/under/rank/chemist/box2550away/scientist(src) + new /obj/item/clothing/under/rank/chemist/box2550away/scientist(src) + new /obj/item/clothing/under/rank/chemist/box2550away/scientist(src) + new /obj/item/clothing/suit/labcoat(src) + new /obj/item/clothing/suit/labcoat(src) + new /obj/item/clothing/suit/labcoat(src) + new /obj/item/clothing/shoes/white/box2550away(src) + new /obj/item/clothing/shoes/white/box2550away(src) + new /obj/item/clothing/shoes/white/box2550away(src) + return + +/obj/item/weapon/reagent_containers/food/snacks/badrecipe/box2550away/rottenfood + name = "rotten mess" + desc = "Yum." + +/obj/structure/closet/box2550away/lawcloset + name = "\improper Legal Closet" + desc = "A bulky (yet mobile) closet. Comes with lawyer apparel and items." + +/obj/structure/closet/box2550away/lawcloset/New() + new /obj/item/clothing/under/lawyer/black(src) + new /obj/item/clothing/under/lawyer/red(src) + new /obj/item/clothing/under/lawyer/blue(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/shoes/black/box2550away(src) + new /obj/item/weapon/storage/briefcase/box2550away(src) + new /obj/item/weapon/storage/briefcase/box2550away(src) + +/obj/item/weapon/storage/briefcase/box2550away + desc = null + +/obj/item/weapon/storage/box/box2550away/ids + name = "\improper Spare IDs" + desc = null + icon_state = "id" + + New() + ..() + new /obj/item/weapon/card/id/box2550away(src) + new /obj/item/weapon/card/id/box2550away(src) + new /obj/item/weapon/card/id/box2550away(src) + new /obj/item/weapon/card/id/box2550away(src) + new /obj/item/weapon/card/id/box2550away(src) + new /obj/item/weapon/card/id/box2550away(src) + new /obj/item/weapon/card/id/box2550away(src) + +/obj/item/device/transfer_valve/box2550away + name = "\improper Tank transfer valve" + +/obj/item/device/detective_scanner/box2550away + desc = "Used to scan objects for DNA and fingerprints" + name = "\improper Scanner" + +/obj/item/weapon/storage/backpack/box2550away/captain + desc = null + New() + ..() + new /obj/item/weapon/storage/box/box2550away/ids(src) + +/obj/item/weapon/storage/backpack/box2550away/ + desc = null + New() + ..() + new /obj/item/weapon/storage/box/box2550away/internals(src) + +/obj/item/weapon/bikehorn/box2550 + name = "\improper Bike Horn" + +/obj/item/weapon/reagent_containers/food/snacks/grown/banana/box2550away + name = "\improper Banana" + desc = "A banana." + +/obj/item/weapon/storage/backpack/box2550away/clown + desc = null + New() + ..() + new /obj/item/weapon/bikehorn/box2550(src) + new /obj/item/weapon/reagent_containers/food/snacks/grown/banana/box2550away(src) + +/obj/item/weapon/storage/backpack/box2550away/scientist + desc = null + New() + ..() + new /obj/item/device/transfer_valve/box2550away(src) + +/obj/item/weapon/storage/backpack/box2550away/lawyer + desc = null + New() + ..() + new /obj/item/device/detective_scanner/box2550away(src) + +/obj/item/weapon/storage/backpack/box2550away/hos + desc = null + New() + ..() + new /obj/item/weapon/handcuffs/box2550away(src) + new /obj/item/weapon/melee/baton/loaded/box2550(src) + +/obj/item/weapon/storage/backpack/box2550away/sec + desc = null + New() + ..() + new /obj/item/weapon/handcuffs/box2550away(src) + new /obj/item/weapon/handcuffs/box2550away(src) + new /obj/item/weapon/melee/baton/loaded/box2550(src) + +/obj/item/clothing/under/color/red/box2550away + desc = null + name = "\improper Red Jumpsuit" + +/obj/item/weapon/handcuffs/box2550away + desc = null + +/obj/item/device/flash/box2550away + desc = null + +/obj/item/clothing/shoes/brown/box2550away + name = "\improper Brown Shoes" + desc = null + +/obj/item/clothing/shoes/white/box2550away + name = "\improper White Shoes" + desc = null + +/obj/item/clothing/shoes/black/box2550away + name = "\improper Black Shoes" + desc = null + +/obj/item/device/pda/captain/box2550away + name = "PDA-Jon Riker" + owner = "Jon Riker" + ownjob = "Captain" + toff = 1 //so players don't see the PDA on their messenger until it's found + ttone = "hiss" //did he play a lizard in 2010 who knows + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +/obj/item/device/pda/toxins/box2550away + name = "PDA-Cuban Pete" + owner = "Cuban Pete" + ownjob = "Scientist" + toff = 1 + ttone = "maracas" + icon_state = "pda-chemistry" + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +/obj/item/device/pda/box2550away/lawyer + name = "PDA-Bendak Starkiller" + owner = "Bendak Starkiller" + ownjob = "Lawyer" + toff = 1 + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +/obj/item/device/pda/box2550away/cmo + default_cartridge = /obj/item/weapon/cartridge/medical + name = "PDA-Amy Lessen" + owner = "Amy Lessen" + ownjob = "Chief Medical Officer" + toff = 1 + icon_state = "pda-chef" + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +/obj/item/device/pda/box2550away/hos + name = "PDA-Broba Fett" + owner = "Broba Fett" + ownjob = "Head of Security" + toff = 1 + icon_state = "pda" //the actual sprite was a lighter shade of green and has since been deleted but no one cares + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +/obj/item/device/pda/box2550away/hop + name = "PDA-Rebecca Sharpe" + owner = "Rebecca Sharpe" + ownjob = "Head of Personnel" + toff = 1 + icon_state = "pda" + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +/obj/item/device/pda/security/box2550away + name = "PDA-Hossan Mubarak" + owner = "Hossan Mubarak" + ownjob = "Security Officer" + toff = 1 + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +/obj/item/clothing/head/helmet/HoS/box2550away + name = "\improper HoS Helmet" + desc = null + +/obj/item/device/radio/headset/headset_sec/box2550away + name = "\improper Security Radio Headset" + desc = null + +/obj/effect/landmark/corpse/away/box2550/captain + name = "Jon Riker" + corpseuniform = /obj/item/clothing/under/gimmick/rank/captain/suit/box2550away + corpsesuit = /obj/item/clothing/suit/armor/centcom/box2550away + corpseshoes = /obj/item/clothing/shoes/brown/box2550away + corpseradio = null //same person who took his id took this + corpsehelmet = /obj/item/clothing/head/caphat/box2550away + corpseback = /obj/item/weapon/storage/backpack/box2550away/captain + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/captain/box2550away + corpseglasses = /obj/item/clothing/glasses/sunglasses/box2550away + corpsehusk = "very yes" + corpsebrute = 40 + corpseoxy = 120 + +/obj/effect/landmark/corpse/away/box2550/scientist + name = "Cuban Pete"//:D + corpseuniform = /obj/item/clothing/under/rank/chemist/box2550away/scientist + corpseshoes = /obj/item/clothing/shoes/white/box2550away + corpseradio = /obj/item/device/radio/headset/box2550away + corpsemask = /obj/item/clothing/mask/gas/box2550away/ + corpseback = /obj/item/weapon/storage/backpack/box2550away/scientist + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/toxins/box2550away + corpseid = 1 + corpseidjob = "Scientist" + corpseidaccess = "Scientist" + corpsehusk = "chicky boom" + corpsebrute = 40 + corpseoxy = 120 + +obj/effect/landmark/corpse/away/box2550/lawyer + name = "Bendak Starkiller"//u hungry? xD + corpseuniform = /obj/item/clothing/under/lawyer/blue + corpseshoes = /obj/item/clothing/shoes/black/box2550away + corpseradio = /obj/item/device/radio/headset/box2550away + corpseback = /obj/item/weapon/storage/backpack/box2550away/lawyer + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/box2550away/lawyer + corpseid = 1 + corpseidjob = "Lawyer" + corpseidaccess = "Lawyer" + corpsehusk = "honk" + corpsebrute = 40 + corpseoxy = 120 + +obj/effect/landmark/corpse/away/box2550/cmo + name = "Amy Lessen" + mobgender = "female" + corpseuniform = /obj/item/clothing/under/rank/medical/box2550/cmo + corpsesuit = /obj/item/clothing/suit/labcoat/cmo/box2550 + corpseshoes = /obj/item/clothing/shoes/brown/box2550away + corpseradio = /obj/item/device/radio/headset/heads/box2550/heads/cmo + corpseback = /obj/item/weapon/storage/backpack/box2550away/ + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/box2550away/cmo + corpsehusk = "~~~" + corpsebrute = 40 + corpseoxy = 120 + +obj/effect/landmark/corpse/away/box2550/hos + name = "Broba Fett" + corpseuniform = /obj/item/clothing/under/rank/head_of_security/box2550 + corpsesuit = /obj/item/clothing/suit/armor/hos //exactly the same now as it was in 2010 + corpseshoes = /obj/item/clothing/shoes/brown/box2550away + corpseradio = /obj/item/device/radio/headset/headset_sec/box2550away + corpsehelmet = /obj/item/clothing/head/helmet/HoS/box2550away + corpsemask = /obj/item/clothing/mask/gas/box2550away/emergency + corpseglasses = /obj/item/clothing/glasses/sunglasses/box2550away + corpseback = /obj/item/weapon/storage/backpack/box2550away/hos + corpsepocket1 = /obj/item/device/flash/box2550away + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/box2550away/hos + corpsehusk = "i'm out of ideas" + corpsebrute = 40 + corpseoxy = 120 + +/obj/item/clothing/under/rank/centcom_officer/box2550/hop + desc = "It has a Head of Personnel rank stripe on it." + name = "\improper Head of Personnel Jumpsuit" + +/obj/item/clothing/head/helmet/box2550away + desc = null + +obj/effect/landmark/corpse/away/box2550/hop + name = "Rebecca Sharpe" + mobgender = "female" + corpseuniform = /obj/item/clothing/under/rank/centcom_officer/box2550/hop + corpsesuit = /obj/item/clothing/suit/armor/vest //exactly the same now as it was in 2010 + corpseshoes = /obj/item/clothing/shoes/brown/box2550away + corpseradio = /obj/item/device/radio/headset/heads/box2550/heads/ + corpsehelmet = /obj/item/clothing/head/helmet/box2550away + corpseglasses = /obj/item/clothing/glasses/sunglasses/box2550away + corpseback = /obj/item/weapon/storage/backpack/box2550away/captain + corpsepocket1 = /obj/item/device/flash/box2550away + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/box2550away/hop + corpsehusk = 1 + corpsebrute = 40 + corpseoxy = 120 + +/obj/item/clothing/mask/gas/clown_hat/box2550/clown + desc = "You're gay for even considering wearing this." //check your privilege, coder scum + +/obj/item/clothing/shoes/clown_shoes/box2550/clown_shoes + desc = "Damn, thems some big shoes." + +/obj/item/clothing/under/rank/clown/box2550/clown + desc = "Wearing this, all the children love you, for all the wrong reasons." + +/obj/item/device/pda/clown/box2550away/clown + name = "PDA-Robert Robust" + owner = "Robert Robust" + ownjob = "Clown" + toff = 1 + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +obj/effect/landmark/corpse/away/box2550/clown + name = "Robert Robust" + corpseuniform = /obj/item/clothing/under/rank/clown/box2550/clown + corpseshoes = /obj/item/clothing/shoes/clown_shoes/box2550/clown_shoes + corpseradio = /obj/item/device/radio/headset/box2550away + corpsemask = /obj/item/clothing/mask/gas/clown_hat/box2550/clown + corpsepocket2 = /obj/item/weapon/pen + corpseback = /obj/item/weapon/storage/backpack/box2550away/clown + corpsebelt = /obj/item/device/pda/clown/box2550away/clown + corpseid = 1 + corpseidjob = "Clown" + corpseidaccess = "Clown" + corpsehusk = 1 + corpsebrute = 40 + corpseoxy = 120 + +/obj/item/weapon/melee/baton/loaded/box2550 + name = "\improper Stun Baton" + desc = "Holy shit. This thing is terrible." + icon = 'box2550Away.dmi' + +/obj/item/weapon/melee/baton/loaded/box2550/New() + ..() + src.bcell.maxcharge = 1001 + src.bcell.charge = 1001 + src.bcell.name = "\improper Nanotrasen brand rechargable AA battery" + src.bcell.desc = "You can't top the plasma top." + src.bcell.icon_state = "cell" + update_icon() + return + +obj/effect/landmark/corpse/away/box2550/sec + name = "Hossan Mubarak" + corpseuniform = /obj/item/clothing/under/color/red/box2550away + corpsesuit = /obj/item/clothing/suit/armor/vest + corpseshoes = /obj/item/clothing/shoes/brown/box2550away + corpseradio = /obj/item/device/radio/headset/headset_sec/box2550away + corpsehelmet = /obj/item/clothing/head/helmet/box2550away + corpseglasses = /obj/item/clothing/glasses/sunglasses/box2550away + corpseback = /obj/item/weapon/storage/backpack/box2550away/sec + corpsepocket1 = /obj/item/device/flash/box2550away + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/security/box2550away + corpsehusk = 1 + corpsebrute = 40 + corpseoxy = 120 + +/obj/item/clothing/under/rank/janitor/box2550 + name = "Janitor's Jumpsuit" + desc = "Official clothing of the station's poopscooper." + +/obj/item/device/pda/janitor/box2550 + name = "\improper PDA-Jackson Bob" + owner = "Jackson Bob" + ownjob = "Janitor" + toff = 1 + note = "Congratulations, your station has chosen the Thinktronic 5100 Personal Data Assistant!" + +/obj/item/device/pda/security/box2550away/det + name = "\improper PDA-Corbin Riker" + owner = "Corbin Riker" + ownjob = "Detective" + toff = 1 + +/obj/item/weapon/storage/box/lights/mixed/box2550away/ + desc = null + +/obj/item/weapon/reagent_containers/spray/cleaner/box2550away/ + desc = "Space Cleaner!" + volume = 1000 + w_class = 3 + +/obj/item/weapon/reagent_containers/spray/cleaner/box2550away/New() + ..() + reagents.add_reagent("cleaner", rand(0, 100) * 10) //cleaner sprayed only 10 units + +/obj/item/weapon/storage/backpack/box2550away/jan/New() + ..() + new /obj/item/weapon/grenade/chem_grenade/cleaner(src) + new /obj/item/weapon/grenade/chem_grenade/cleaner(src) + new /obj/item/weapon/storage/box/lights/box2550away/lights/(src) + new /obj/item/weapon/reagent_containers/spray/cleaner/box2550away(src) + new /obj/item/weapon/mop(src) + +obj/effect/landmark/corpse/away/box2550/jan + name = "Jackson Bob" + corpseuniform = /obj/item/clothing/under/rank/janitor/box2550 + corpseshoes = /obj/item/clothing/shoes/galoshes + corpseradio = /obj/item/device/radio/headset/box2550away + corpseback = /obj/item/weapon/storage/backpack/box2550away/jan + corpsepocket1 = /obj/item/device/flashlight + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/janitor/box2550 + corpsehusk = 1 + corpsebrute = 40 + corpseoxy = 120 + +/obj/item/weapon/storage/box/lights/box2550away/lights/ + name = "box of replacement lights" + icon_state = "lightmixed" + desc = null + +/obj/item/weapon/storage/box/lights/box2550away/lights/New() + ..() + for(var/i = 0; i < 4; i++) + new /obj/item/weapon/light/tube(src) + for(var/i = 0; i < 4; i++) + new /obj/item/weapon/light/bulb(src) + +obj/effect/landmark/corpse/away/box2550/jan + name = "Jackson Bob" + corpseuniform = /obj/item/clothing/under/rank/janitor/box2550 + corpseshoes = /obj/item/clothing/shoes/galoshes + corpseradio = /obj/item/device/radio/headset/box2550away + corpseback = /obj/item/weapon/storage/backpack/box2550away/jan + corpsepocket1 = /obj/item/device/flashlight + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/janitor/box2550 + corpsehusk = 1 + corpsebrute = 40 + corpseoxy = 120 + +/obj/item/clothing/gloves/black/box2550away + name = "Black Gloves" + +/obj/item/clothing/suit/det_suit/box2550away + desc = "Someone who wears this means business" + +/obj/item/clothing/head/det_hat/box2550away + desc = "Someone who wears this will look very smart" + +/obj/item/weapon/lighter/zippo/box2550away + desc = "The detective's zippo." + +/obj/item/clothing/under/det/box2550away + name = "Hard worn suit" + desc = "Someone who wears this means business" + +obj/effect/landmark/corpse/away/box2550/det + name = "Corbin Riker" + corpseuniform = /obj/item/clothing/under/det/box2550away + corpsehelmet = /obj/item/clothing/head/det_hat/box2550away + corpsesuit = /obj/item/clothing/suit/det_suit/box2550away + corpseshoes = /obj/item/clothing/shoes/black/box2550away + corpseradio = /obj/item/device/radio/headset/headset_sec/box2550away + corpseback = /obj/item/weapon/storage/backpack/box2550away/lawyer + corpsepocket1 = /obj/item/weapon/lighter/zippo/box2550away + corpsepocket2 = /obj/item/weapon/pen + corpsebelt = /obj/item/device/pda/security/box2550away/det + corpsegloves = /obj/item/clothing/gloves/black/box2550away + corpsehusk = 1 + corpsebrute = 40 + corpseoxy = 120 + +/obj/item/clothing/under/rank/engineer/box2550away + desc = "It has an Engineering rank stripe on it." + name = "Engineering Jumpsuit" + +/obj/item/weapon/storage/toolbox/mechanical/box2550away + desc = null + +/obj/structure/closet/secure_closet/box2550away/engineering_personal + name = "Engineer's Locker" + req_access = list(access_engine_equip) + icon_state = "secure1" + icon_closed = "secure" + icon_locked = "secure1" + icon_opened = "secureopen" + icon_broken = "securebroken" + icon_off = "secureoff" + + + New() + ..() + sleep(2) + new /obj/item/weapon/storage/toolbox/mechanical/box2550away(src) + new /obj/item/clothing/under/rank/engineer/box2550away(src) + new /obj/item/clothing/shoes/orange(src) + new /obj/item/clothing/mask/gas/box2550away/(src) + new /obj/item/clothing/head/hardhat(src) + new /obj/item/clothing/ears/earmuffs(src) + new /obj/item/clothing/glasses/meson(src) + return + +/obj/structure/closet/secure_closet/box2550away/security + name = "Security Equipment" + req_access = list(access_security) + icon_state = "secure1" + icon_closed = "secure" + icon_locked = "secure1" + icon_opened = "secureopen" + icon_broken = "securebroken" + icon_off = "secureoff" + + New() + ..() + sleep(2) + new /obj/item/weapon/grenade/flashbang(src) + new /obj/item/weapon/handcuffs/box2550away(src) +// new /obj/item/weapon/gun/energy/taser(src) + new /obj/item/device/flash/box2550away(src) + new /obj/item/clothing/under/color/red/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/head/helmet/box2550away(src) + new /obj/item/clothing/glasses/sunglasses/box2550away(src) + new /obj/item/weapon/melee/baton/loaded/box2550(src) + return + +/obj/structure/closet/secure_closet/box2550away/hos + name = "Head Of Security" //in 2010, the head of security was played by a secure locker + req_access = list(access_hos) + icon_state = "secure1" + icon_closed = "secure" + icon_locked = "secure1" + icon_opened = "secureopen" + icon_broken = "securebroken" + icon_off = "secureoff" + + New() + ..() + sleep(2) + new /obj/item/weapon/shield/riot(src) +// new /obj/item/weapon/gun/energy/gun(src) + new /obj/item/device/flash/box2550away(src) + new /obj/item/weapon/storage/box/box2550away/ids(src) + new /obj/item/clothing/under/rank/head_of_security/box2550(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/glasses/sunglasses/box2550away(src) + new /obj/item/clothing/suit/armor/hos(src) + new /obj/item/clothing/head/helmet/box2550away(src) + new /obj/item/weapon/storage/box/box2550away/ids(src) +// new /obj/item/weapon/storage/box/flashbangs(src) + new /obj/item/weapon/handcuffs/box2550away(src) + new /obj/item/weapon/melee/baton/loaded/box2550(src) + return + + +/obj/structure/closet/secure_closet/box2550away/meat + name = "Meat Locker" + icon_state = "secure1" + icon_closed = "secure" + icon_locked = "secure1" + icon_opened = "secureopen" + icon_broken = "securebroken" + icon_off = "secureoff" + + + New() + ..() + sleep(2) + for(var/i = 0, i < 4, i++) + new /obj/item/weapon/reagent_containers/food/snacks/badrecipe/box2550away/rottenfood(src) + return + +/obj/structure/closet/secure_closet/box2550away/engineering_electrical + name = "Electrical Supplies" + req_access = list(access_engine) + icon_state = "secure1" + icon_closed = "secure" + icon_locked = "secure1" + icon_opened = "secureopen" + icon_broken = "securebroken" + icon_off = "secureoff" + + New() + ..() + sleep(2) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/weapon/storage/toolbox/electrical(src) + new /obj/item/weapon/storage/toolbox/electrical(src) + new /obj/item/weapon/storage/toolbox/electrical(src) + new /obj/item/device/multitool(src) + new /obj/item/device/multitool(src) + new /obj/item/device/multitool(src) + return + +/obj/structure/closet/secure_closet/box2550away/engineering_welding + name = "Welding Supplies" + req_access = list(access_engine) + icon_state = "secure1" + icon_closed = "secure" + icon_locked = "secure1" + icon_opened = "secureopen" + icon_broken = "securebroken" + icon_off = "secureoff" + + New() + ..() + sleep(2) + new /obj/item/clothing/head/welding(src) + new /obj/item/clothing/head/welding(src) + new /obj/item/clothing/head/welding(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/weldingtool(src) + return + +/obj/item/weapon/paper/pamphlet/box2550awayInfo + name = "Visitor Info Pamphlet" + info = " TG424 Visitor Information
\ + Welcome, employee, to TG424! As you may know, this station was once \ + used as Nanotrasen's SPACE STATION 13, primarily to research plasma \ + and its many entertaining uses.
\ + Since the finish of the improved TG570 on Dec 8, 2550, TG424 is no longer \ + a plasma research station and has fallen into disuse.
\ + Perhaps you stand to gain something from visiting it?
\ + Either way, we hope you enjoy yourself!" + +/obj/structure/closet/secure_closet/box2550away/ce + name = "Chief Engineer's Locker" + req_access = list(access_heads) + + New() + ..() + sleep(2) + new /obj/item/weapon/storage/toolbox/mechanical(src) + new /obj/item/clothing/under/rank/chief_engineer(src) + new /obj/item/clothing/gloves/yellow(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/ears/earmuffs(src) + new /obj/item/clothing/glasses/meson(src) + new /obj/item/clothing/suit/fire(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/clothing/head/welding(src) + new /obj/item/clothing/head/hardhat(src) + new /obj/item/device/multitool(src) + new /obj/item/device/flash(src) + +/obj/structure/closet/secure_closet/box2550away/hop + name = "Head of Personnel" + req_access = list(access_heads) + + New() + ..() + sleep(2) + new /obj/item/weapon/storage/box/box2550away/ids(src) + new /obj/item/clothing/under/rank/centcom_officer/box2550/hop(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/suit/armor/vest(src) + new /obj/item/clothing/head/helmet(src) + +/obj/structure/closet/secure_closet/box2550away/det + name = "Forensics Locker" + req_access = list(access_forensics_lockers) + + New() + ..() + sleep(2) + new /obj/item/clothing/under/det/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/head/det_hat/box2550away(src) + new /obj/item/clothing/suit/det_suit/box2550away(src) + new /obj/item/clothing/gloves/black/box2550away(src) + new /obj/item/weapon/storage/box/gloves(src) + new /obj/item/device/detective_scanner/box2550away(src) + new /obj/item/device/detective_scanner/box2550away(src) + new /obj/item/device/detective_scanner/box2550away(src) + +/obj/structure/closet/box2550away/red + name = "\improper Red Wardrobe" + icon_state = "red" + icon_closed = "red" + + New() + ..() + sleep(2) + new /obj/item/clothing/under/color/red/box2550away(src) + new /obj/item/clothing/under/color/red/box2550away(src) + new /obj/item/clothing/under/color/red/box2550away(src) + new /obj/item/clothing/under/color/red/box2550away(src) + new /obj/item/clothing/under/color/red/box2550away(src) + new /obj/item/clothing/under/color/red/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) + new /obj/item/clothing/shoes/brown/box2550away(src) \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/box2550Away.dmi b/code/modules/awaymissions/mission_code/box2550Away.dmi new file mode 100644 index 00000000000..c332abe8047 Binary files /dev/null and b/code/modules/awaymissions/mission_code/box2550Away.dmi differ diff --git a/maps/RandomZLevels/centcomAway.dm b/code/modules/awaymissions/mission_code/centcomAway.dm similarity index 100% rename from maps/RandomZLevels/centcomAway.dm rename to code/modules/awaymissions/mission_code/centcomAway.dm diff --git a/maps/RandomZLevels/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm similarity index 100% rename from maps/RandomZLevels/challenge.dm rename to code/modules/awaymissions/mission_code/challenge.dm diff --git a/maps/RandomZLevels/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm similarity index 100% rename from maps/RandomZLevels/spacebattle.dm rename to code/modules/awaymissions/mission_code/spacebattle.dm diff --git a/maps/RandomZLevels/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm similarity index 96% rename from maps/RandomZLevels/stationCollision.dm rename to code/modules/awaymissions/mission_code/stationCollision.dm index 46b67a369b9..938b73a1d06 100644 --- a/maps/RandomZLevels/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -64,7 +64,7 @@ obj/item/weapon/gun/energy/laser/retro/sc_retro name ="retro laser" icon_state = "retro" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces." - projectile_type = "/obj/item/projectile/practice" +// projectile_type = "/obj/item/projectile/practice" clumsy_check = 0 //No sense in having a harmless gun blow up in the clowns face //Syndicate silenced pistol. This definition is not necessary, it's just habit. diff --git a/maps/RandomZLevels/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm similarity index 100% rename from maps/RandomZLevels/wildwest.dm rename to code/modules/awaymissions/mission_code/wildwest.dm diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index e89d67cf773..143030c886c 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -4,7 +4,7 @@ proc/createRandomZlevel() var/list/potentialRandomZlevels = list() world << "\red \b Searching for away missions..." - var/list/Lines = file2list("maps/RandomZLevels/fileList.txt") + var/list/Lines = file2list("_maps/RandomZLevels/fileList.txt") if(!Lines.len) return for (var/t in Lines) if (!t) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 8430fadbb02..bb70f37ffc6 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -167,6 +167,12 @@ BLIND // can't see anything hastie = I I.loc = src user << "You attach [I] to [src]." + I.transform *= 0.5 //halve the size so it doesn't overpower the under + I.pixel_x += 8 + I.pixel_y -= 8 + I.layer = FLOAT_LAYER + overlays += I + if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = loc @@ -189,7 +195,7 @@ BLIND // can't see anything if(3) usr << "Its vital tracker and tracking beacon appear to be enabled." if(hastie) - usr << "\A [hastie] is clipped to it." + usr << "\A [hastie] is attached to it." atom/proc/generate_uniform(index,t_color) var/icon/female_uniform_icon = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_s") @@ -233,6 +239,11 @@ atom/proc/generate_uniform(index,t_color) if(usr.stat) return if(hastie) + hastie.transform *= 2 + hastie.pixel_x -= 8 + hastie.pixel_y += 8 + hastie.layer = initial(hastie.layer) + overlays = null usr.put_in_hands(hastie) hastie = null diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 868303b0e75..377772dc0f7 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -124,25 +124,7 @@ name = "kitty ears" desc = "A pair of kitty ears. Meow!" icon_state = "kitty" - var/icon/mob - var/icon/mob2 -/obj/item/clothing/head/kitty/equipped(mob/user, slot) - if(user && slot == slot_head) - update_icon(user) - -//ffffuck you kitty ears. this proc is a) retarded and b) seems to fail around fifty percent of the time. idgaf tbh -/obj/item/clothing/head/kitty/update_icon(mob/living/carbon/human/user) - if(!istype(user)) return - mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty") - mob2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty2") - mob.Blend("#[user.hair_color]", ICON_ADD) - mob2.Blend("#[user.hair_color]", ICON_ADD) - - var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner") - var/icon/earbit2 = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner2") - mob.Blend(earbit, ICON_OVERLAY) - mob2.Blend(earbit2, ICON_OVERLAY) /obj/item/clothing/head/hardhat/reindeer name = "novelty reindeer hat" diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 356d04302fe..34ad82258c2 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -74,6 +74,12 @@ icon_state = "purplesoft" item_color = "purple" +/obj/item/clothing/head/soft/black + name = "black cap" + desc = "It's a baseball hat in a tasteless black colour." + icon_state = "blacksoft" + item_color = "black" + /obj/item/clothing/head/soft/rainbow name = "rainbow cap" desc = "It's a baseball hat in a bright rainbow of colors." diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 91e10749606..74a3eab0ac7 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -211,7 +211,7 @@ if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue temp_message[H] = ninjaspeak(temp_message[H]) pick_list -= H - message = dd_list2text(temp_message, " ") + message = list2text(temp_message, " ") message = replacetext(message, "o", "¤") message = replacetext(message, "p", "þ") message = replacetext(message, "l", "£") diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index e6a00857467..9598577224e 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -86,15 +86,6 @@ flags_inv = HIDEJUMPSUIT -/obj/item/clothing/suit/wcoat - name = "waistcoat" - desc = "For some classy, murderous fun." - icon_state = "vest" - item_state = "wcoat" - blood_overlay_type = "armor" - body_parts_covered = CHEST - - /obj/item/clothing/suit/apron/overalls name = "coveralls" desc = "A set of denim overalls." diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index f91e889443f..31eb7fcecca 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -38,11 +38,20 @@ desc = "Groovy!" icon_state = "psyche" item_color = "psyche" + if(ismob(loc)) + var/mob/M = loc + M.update_inv_w_uniform() + M << "Your jumpsuit malfunctions!" spawn(200) name = "Black Jumpsuit" - icon_state = "bl_suit" + icon_state = "black" + item_state = "bl_suit" item_color = "black" desc = null + if(ismob(loc)) + var/mob/M = loc + M.update_inv_w_uniform() + M << "Your jumpsuit is functioning normally again." ..() diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 662908e4814..326f09c0c47 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -24,6 +24,13 @@ icon_state = "horribletie" item_color = "horribletie" +/obj/item/clothing/tie/waistcoat + name = "waistcoat" + desc = "For some classy, murderous fun." + icon_state = "waistcoat" + item_state = "waistcoat" + item_color = "waistcoat" + /obj/item/clothing/tie/stethoscope name = "stethoscope" desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing." diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index a5ff7f12801..e4ca1654bde 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -5,10 +5,10 @@ atom/var/list/suit_fibers atom/proc/add_fibers(mob/living/carbon/human/M) if(M.gloves && istype(M.gloves,/obj/item/clothing/)) var/obj/item/clothing/gloves/G = M.gloves - if(G.transfer_blood) //bloodied gloves transfer blood to touched objects + if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects if(add_blood(G.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody G.transfer_blood-- - else if(M.bloody_hands) + else if(M.bloody_hands > 1) if(add_blood(M.bloody_hands_mob)) M.bloody_hands-- if(!suit_fibers) suit_fibers = list() diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index bc55934b5ba..9d9fd3a8e95 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -2,7 +2,6 @@ /mob var/bloody_hands = 0 var/mob/living/carbon/human/bloody_hands_mob - var/mob/living/carbon/human/track_blood_mob /obj/item/clothing/gloves var/transfer_blood = 0 diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 7171237d633..71fc5d1b932 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -24,7 +24,7 @@ var/obj/item/weapon/paper/P = new(get_turf(src)) P.name = "paper- 'Scanner Report'" P.info = "
Scanner Report


" - P.info += dd_list2text(log, "
") + P.info += list2text(log, "
") P.info += "
Notes:
" P.info_links = P.info diff --git a/code/modules/events/ninja.dm b/code/modules/events/ninja.dm index 44847d2ae03..1839dd59ea5 100644 --- a/code/modules/events/ninja.dm +++ b/code/modules/events/ninja.dm @@ -344,7 +344,7 @@ ________________________________________________________________________________ /proc/create_space_ninja(spawn_loc) var/mob/living/carbon/human/new_ninja = new(spawn_loc) - + if(prob(50)) new_ninja.gender = "female" var/datum/preferences/A = new()//Randomize appearance for the ninja. A.real_name = "[pick(ninja_titles)] [pick(ninja_names)]" A.copy_to(new_ninja) @@ -1451,7 +1451,7 @@ ________________________________________________________________________________ //=======//PROCESS PROCS//=======// /obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting) - set background = 1 + set background = BACKGROUND_ENABLED //Runs in the background while the suit is initialized. spawn while(cell.charge>=0) @@ -2075,7 +2075,7 @@ ________________________________________________________________________________ return /obj/item/clothing/suit/space/space_ninja/proc/ai_holo_process() - set background = 1 + set background = BACKGROUND_ENABLED spawn while(hologram&&s_initialized&&AI)//Suit on and there is an AI present. if(!s_initialized||get_dist(affecting,hologram.loc)>3)//Once suit is de-initialized or hologram reaches out of bounds. @@ -2207,7 +2207,7 @@ ________________________________________________________________________________ spawn(0) anim(U.loc,U,'icons/mob/mob.dmi',,"cloak",,U.dir) s_active=!s_active - U.update_icons() //update their icons + U.alpha = 0 U << "\blue You are now invisible to normal detection." for(var/mob/O in oviewers(U)) O.show_message("[U.name] vanishes into thin air!",1) @@ -2219,7 +2219,7 @@ ________________________________________________________________________________ spawn(0) anim(U.loc,U,'icons/mob/mob.dmi',,"uncloak",,U.dir) s_active=!s_active - U.update_icons() //update their icons + U.alpha = 255 U << "\blue You are now visible." for(var/mob/O in oviewers(U)) O.show_message("[U.name] appears from thin air!",1) diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm index 674c0a68feb..aa1d40b81b2 100644 --- a/code/modules/flufftext/TextFilters.dm +++ b/code/modules/flufftext/TextFilters.dm @@ -57,7 +57,7 @@ proc/NewStutter(phrase,stunned) split_phrase[index] = word - return sanitize(dd_list2text(split_phrase," ")) + return sanitize(list2text(split_phrase," ")) proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness. step(M, pick(d,turn(d,90),turn(d,-90))) @@ -79,6 +79,6 @@ proc/Ellipsis(original_msg, chance = 50, keep_words) continue new_words += w - new_msg = dd_list2text(new_words," ") + new_msg = list2text(new_words," ") return new_msg diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 1b5b92b86e9..4cff52ac702 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -219,6 +219,18 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread +/datum/recipe/spidermeatbread + reagents = list("flour" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spidermeat, + /obj/item/weapon/reagent_containers/food/snacks/spidermeat, + /obj/item/weapon/reagent_containers/food/snacks/spidermeat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/spidermeatbread + /datum/recipe/bananabread reagents = list("milk" = 5, "flour" = 15) items = list( @@ -1156,4 +1168,27 @@ items = list( /obj/item/weapon/reagent_containers/food/snacks/egg, ) - result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie \ No newline at end of file + result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie + +/datum/recipe/boiledspiderleg + reagents = list("water" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spiderleg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg + +/datum/recipe/spidereggsham + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spidereggs, + /obj/item/weapon/reagent_containers/food/snacks/spidermeat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/spidereggsham + +/datum/recipe/sashimi + reagents = list("soysauce" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spidereggs, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sashimi \ No newline at end of file diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 9a77ed4d23a..8e2632dd24f 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -11,7 +11,6 @@ var/seed = "" var/plantname = "" var/product //a type path - var/species = "" var/lifespan = 0 var/endurance = 0 var/maturation = 0 @@ -19,13 +18,18 @@ var/yield = 0 var/potency = -1 var/plant_type = 0 + var/dry = 0 icon = 'icons/obj/harvest.dmi' - New(newloc,newpotency) - if (!isnull(newpotency)) - potency = newpotency - ..() - src.pixel_x = rand(-5.0, 5) - src.pixel_y = rand(-5.0, 5) + +/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc,newpotency) + if (!isnull(newpotency)) + potency = newpotency + ..() + pixel_x = rand(-5.0, 5) + pixel_y = rand(-5.0, 5) + + transform *= TransformUsingVariable(potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency! + /obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/O as obj, var/mob/user as mob) ..() @@ -36,56 +40,21 @@ if(0) msg += "- Plant type: Normal plant\n" if(1) - msg += "- Plant type: Weed\n" + msg += "- Plant type: Weed. Can grow in nutrient-poor soil.\n" if(2) - msg += "- Plant type: Mushroom\n" + msg += "- Plant type: Mushroom. Can grow in dry soil.\n" msg += "- Potency: [potency]\n" msg += "- Yield: [yield]\n" msg += "- Maturation speed: [maturation]\n" msg += "- Production speed: [production]\n" msg += "- Endurance: [endurance]\n" - msg += "- Healing properties: [reagents.get_reagent_amount("nutriment")]\n" + msg += "- Nutritional value: [reagents.get_reagent_amount("nutriment")]\n" + msg += "- Other substances: [reagents.total_volume-reagents.get_reagent_amount("nutriment")]\n" msg += "*---------*
" usr << msg return - - /*if (istype(O, /obj/item/weapon/storage/bag/plants)) - var/obj/item/weapon/plantbag/S = O - if (S.mode == 1) - for(var/obj/item/G in get_turf(src)) - if(istype(G, /obj/item/seeds) || istype(G, /obj/item/weapon/reagent_containers/food/snacks/grown)) - if (S.contents.len < S.capacity) - S.contents += G - else - user << "\blue The plant bag is full." - return - user << "\blue You pick up all the plants and seeds." - else - if (S.contents.len < S.capacity) - S.contents += src; - else - user << "\blue The plant bag is full."*/ return -/*/obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (istype(O, /obj/item/weapon/storage/bag/plants)) - var/obj/item/weapon/plantbag/S = O - if (S.mode == 1) - for(var/obj/item/G in get_turf(src)) - if(istype(G, /obj/item/seeds) || istype(G, /obj/item/weapon/reagent_containers/food/snacks/grown)) - if (S.contents.len < S.capacity) - S.contents += G - else - user << "\blue The plant bag is full." - return - user << "\blue You pick up all the plants and seeds." - else - if (S.contents.len < S.capacity) - S.contents += src; - else - user << "\blue The plant bag is full." - return*/ - /obj/item/weapon/grown/attackby(var/obj/item/O as obj, var/mob/user as mob) ..() if (istype(O, /obj/item/device/analyzer/plant_analyzer)) @@ -95,9 +64,9 @@ if(0) msg += "- Plant type: Normal plant\n" if(1) - msg += "- Plant type: Weed\n" + msg += "- Plant type: Weed. Can grow in nutrient-poor soil.\n" if(2) - msg += "- Plant type: Mushroom\n" + msg += "- Plant type: Mushroom. Can grow in dry soil.\n" msg += "- Potency: [potency]\n" msg += "- Yield: [yield]\n" msg += "- Maturation speed: [maturation]\n" @@ -114,6 +83,7 @@ icon_state = "corn" potency = 40 trash = /obj/item/weapon/corncob + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/corn New() ..() @@ -127,6 +97,7 @@ desc = "Great for toppings!" icon_state = "cherry" gender = PLURAL + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/cherries New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -141,6 +112,7 @@ icon_state = "poppy" slot_flags = SLOT_HEAD potency = 30 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/poppy New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -155,6 +127,7 @@ icon_state = "harebell" slot_flags = SLOT_HEAD potency = 1 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/harebell New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -167,6 +140,7 @@ desc = "Boil 'em! Mash 'em! Stick 'em in a stew!" icon_state = "potato" potency = 25 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/potato New() ..() reagents.add_reagent("nutriment", 1+round((potency / 10), 1)) @@ -191,6 +165,7 @@ name = "bunch of grapes" desc = "Nutritious!" icon_state = "grapes" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/no_raisin New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -204,6 +179,7 @@ desc = "Nutritious!" icon_state = "greengrapes" potency = 25 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/no_raisin New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -217,6 +193,7 @@ desc = "Ewwwwwwwwww. Cabbage." icon_state = "cabbage" potency = 25 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -228,6 +205,7 @@ name = "bunch of berries" desc = "Nutritious!" icon_state = "berrypile" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/berries New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -241,6 +219,7 @@ var/on = 1 var/brightness_on = 2 //luminosity when on icon_state = "glowberrypile" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/glowberries New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -267,6 +246,7 @@ desc = "Fattening... Mmmmm... chucklate." icon_state = "cocoapod" potency = 50 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -280,6 +260,7 @@ desc = "Sickly sweet." icon_state = "sugarcane" potency = 50 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/sugarcane New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -292,6 +273,7 @@ icon_state = "poisonberrypile" gender = PLURAL potency = 15 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -306,6 +288,7 @@ icon_state = "deathberrypile" gender = PLURAL potency = 50 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/deathberries New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -321,6 +304,7 @@ icon_state = "ambrosiavulgaris" slot_flags = SLOT_HEAD potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -338,6 +322,7 @@ icon_state = "ambrosiadeus" slot_flags = SLOT_HEAD potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -354,6 +339,7 @@ desc = "It's a little piece of Eden." icon_state = "apple" potency = 15 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/apple New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -367,6 +353,7 @@ desc = "It's a little piece of Eden." icon_state = "apple" potency = 15 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -380,6 +367,7 @@ desc = "Emblazoned upon the apple is the word 'Kallisti'." icon_state = "goldapple" potency = 15 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/goldapple New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -413,6 +401,7 @@ desc = "It's large and scary." icon_state = "pumpkin" potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -434,6 +423,7 @@ desc = "It's so sour, your face will twist." icon_state = "lime" potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/lime New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -446,6 +436,7 @@ desc = "When life gives you lemons, be grateful they aren't limes." icon_state = "lemon" potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/lemon New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -458,6 +449,7 @@ desc = "It's an tangy fruit." icon_state = "orange" potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/orange New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -470,6 +462,7 @@ desc = "You can't beat white-beet." icon_state = "whitebeet" potency = 15 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/whitebeet New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -485,6 +478,7 @@ icon_state = "banana" item_state = "banana" trash = /obj/item/weapon/bananapeel + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/banana New() ..() @@ -497,6 +491,7 @@ name = "chili" desc = "It's spicy! Wait... IT'S BURNING ME!!" icon_state = "chilipepper" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/chili New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -515,6 +510,7 @@ desc = "It seems to be vibrating gently." icon_state = "ghostchilipepper" var/mob/held_mob + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chilli New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -551,6 +547,7 @@ name = "eggplant" desc = "Maybe there's a chicken inside?" icon_state = "eggplant" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/eggplant New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -563,6 +560,7 @@ desc = "It's pretty bland, but oh the possibilities..." gender = PLURAL icon_state = "soybeans" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -574,6 +572,7 @@ name = "koibean" desc = "Something about these seems fishy." icon_state = "koibeans" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/koibeans New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -600,6 +599,7 @@ desc = "I say to-mah-to, you say tom-mae-to." icon_state = "tomato" potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tomato New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -639,6 +639,7 @@ desc = "So bloody...so...very...bloody....AHHHH!!!!" icon_state = "bloodtomato" potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/bloodtomato New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -662,6 +663,7 @@ desc = "I say blue-mah-to, you say blue-mae-to." icon_state = "bluetomato" potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -697,6 +699,7 @@ desc = "Sigh... wheat... a-grain?" gender = PLURAL icon_state = "wheat" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/wheat New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -743,6 +746,7 @@ desc = "It's a mutant strain of chili" icon_state = "icepepper" potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/icepepper New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -761,6 +765,7 @@ desc = "It's good for the eyes!" icon_state = "carrot" potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/carrot New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -774,6 +779,7 @@ desc = "Ganoderma lucidum: A special fungus known for its medicinal and stress relieving properties." icon_state = "reishi" potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -794,6 +800,7 @@ desc = "Amanita Muscaria: Learn poisonous mushrooms by heart. Only pick mushrooms you know." icon_state = "amanita" potency = 10 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -814,6 +821,7 @@ desc = "Amanita Virosa: Deadly poisonous basidiomycete fungus filled with alpha amatoxins." icon_state = "angel" potency = 35 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -834,6 +842,7 @@ desc = "Psilocybe Semilanceata: Liberate yourself!" icon_state = "libertycap" potency = 15 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -851,6 +860,7 @@ name = "plump-helmet" desc = "Plumus Hellmus: Plump, soft and s-so inviting~" icon_state = "plumphelmet" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -881,6 +891,7 @@ name = "chanterelle cluster" desc = "Cantharellus Cibarius: These jolly yellow little shrooms sure look tasty!" icon_state = "chanterelle" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/chanterelle New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -892,6 +903,7 @@ name = "glowshroom cluster" desc = "Mycena Bregprox: This species of mushroom glows in the dark." icon_state = "glowshroom" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom New() ..() if(lifespan == 0) //basically, if you're spawning these via admin or on the map, then set up some default stats. @@ -971,6 +983,7 @@ icon_state = "bluespacetomato" potency = 20 origin_tech = "bluespace=3" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/bluespacetomato New() ..() spawn(5) //So potency can be set in the proc that creates these crops @@ -995,3 +1008,76 @@ reagents.add_reagent("potassium", 1+round((potency / 20), 1)) bitesize = 1+round(reagents.total_volume / 2, 1) + +/obj/item/weapon/reagent_containers/food/snacks/grown/coffee_arabica + seed = "/obj/item/seeds/coffee_arabica_seed" + name = "coffee arabica beans" + desc = "Dry them out to make coffee." + icon_state = "coffee_arabica" + potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/coffee_arabica + New() + ..() + spawn(5) //So potency can be set in the proc that creates these crops + reagents.add_reagent("coffeepowder", 1+round((potency / 10), 2)) + +/obj/item/weapon/reagent_containers/food/snacks/grown/coffee_robusta + seed = "/obj/item/seeds/coffee_robusta_seed" + name = "coffee robusta beans" + desc = "Dry them out to make coffee." + icon_state = "coffee_robusta" + potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/coffee_robusta + New() + ..() + spawn(5) //So potency can be set in the proc that creates these crops + reagents.add_reagent("coffeepowder", 1+round((potency / 10), 2)) + reagents.add_reagent("hyperzine", 1+round((potency / 20), 1)) + +/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco + seed = "/obj/item/seeds/tobacco_seed" + name = "tobacco leaves" + desc = "Dry them out to make some smokes." + icon_state = "tobacco_leaves" + potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco + + +/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco_space + seed = "/obj/item/seeds/tobacco_space_seed" + name = "space tobacco leaves" + desc = "Dry them out to make some space-smokes." + icon_state = "stobacco_leaves" + potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco_space + New() + ..() + spawn(5) //So potency can be set in the proc that creates these crops + reagents.add_reagent("dexalin", 1+round((potency / 20), 1)) + + +/obj/item/weapon/reagent_containers/food/snacks/grown/tea_aspera + seed = "/obj/item/seeds/tea_aspera_seed" + name = "Tea Aspera tips" + desc = "These aromatic tips of the tea plant can be dried to make tea." + icon_state = "tea_aspera_leaves" + potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tea_aspera + New() + ..() + spawn(5) //So potency can be set in the proc that creates these crops + reagents.add_reagent("teapowder", 1+round((potency / 10), 2)) + + +/obj/item/weapon/reagent_containers/food/snacks/grown/tea_astra + seed = "/obj/item/seeds/tea_astra_seed" + name = "Tea Astra tips" + desc = "These aromatic tips of the tea plant can be dried to make tea." + icon_state = "tea_astra_leaves" + potency = 20 + dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/tea_astra + New() + ..() + spawn(5) //So potency can be set in the proc that creates these crops + reagents.add_reagent("teapowder", 1+round((potency / 10), 2)) + reagents.add_reagent("kelotane", 1+round((potency / 20), 1)) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index a238ff1dd2e..9c3790234c1 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -8,19 +8,20 @@ var/seed = "" var/plantname = "" var/product //a type path - var/species = "" var/lifespan = 20 var/endurance = 15 var/maturation = 7 var/production = 7 var/yield = 2 - var/potency = 1 + var/potency = 20 var/plant_type = 0 - New() - create_reagents(50) + +/obj/item/weapon/grown/New() + create_reagents(50) /obj/item/weapon/grown/proc/changePotency(newValue) //-QualityVan potency = newValue + transform *= TransformUsingVariable(potency, 100, 0.5) //Makes the resulting produce's sprite larger or smaller based on potency! /obj/item/weapon/grown/log name = "tower-cap log" @@ -36,6 +37,15 @@ origin_tech = "materials=1" seed = "/obj/item/seeds/towermycelium" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") + var/list/accepted = list(/obj/item/weapon/reagent_containers/food/snacks/grown/tobacco, + /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco, + /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco_space, + /obj/item/weapon/reagent_containers/food/snacks/grown/tea_aspera, + /obj/item/weapon/reagent_containers/food/snacks/grown/tea_astra, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris, + /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus, + /obj/item/weapon/reagent_containers/food/snacks/grown/wheat) + /obj/item/weapon/grown/log/attackby(obj/item/weapon/W as obj, mob/user as mob) ..() @@ -52,6 +62,18 @@ usr << "You add the newly-formed wood to the stack. It now contains [NG.amount] planks." del(src) return + if(is_type_in_list(W,accepted)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/leaf = W + if(leaf.dry) + user.show_message("You wrap the [W] around the log, turning it into a torch!") + var/obj/item/device/flashlight/flare/torch/T = new /obj/item/device/flashlight/flare/torch(user.loc) + usr.u_equip(W) + usr.put_in_active_hand(T) + del(leaf) + del(src) + return + else + usr << "\red You must dry this first." /obj/item/weapon/grown/sunflower // FLOWER POWER! name = "sunflower" @@ -134,6 +156,6 @@ force = round((5+potency/2.5), 1) suicide_act(mob/user) - viewers(user) << "\red [user] is eating some of the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is eating some of the [src.name]! It looks like \he's trying to commit suicide." return (BRUTELOSS|TOXLOSS) diff --git a/code/modules/hydroponics/hydroitemcode.dm b/code/modules/hydroponics/hydroitemcode.dm index 8d2093dd126..d582475efad 100644 --- a/code/modules/hydroponics/hydroitemcode.dm +++ b/code/modules/hydroponics/hydroitemcode.dm @@ -49,7 +49,7 @@ del(src) /obj/item/weapon/grown/nettle/changePotency(newValue) //-QualityVan - potency = newValue + ..() force = round((5+potency/5), 1) //Deathnettle @@ -90,7 +90,7 @@ del(src) /obj/item/weapon/grown/deathnettle/changePotency(newValue) //-QualityVan - potency = newValue + ..() force = round((5+potency/2.5), 1) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 861e6bc7b84..be202d3f237 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -30,7 +30,7 @@ var/WeedKillStr = 2 suicide_act(mob/user) - viewers(user) << "\red [user] is huffing the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is huffing the [src.name]! It looks like \he's trying to commit suicide." return (TOXLOSS) /obj/item/weapon/pestspray // -- Skie @@ -49,7 +49,7 @@ var/PestKillStr = 2 suicide_act(mob/user) - viewers(user) << "\red [user] is huffing the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is huffing the [src.name]! It looks like \he's trying to commit suicide." return (TOXLOSS) /obj/item/weapon/minihoe // -- Numbers diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 158398d6d34..a46e7aaec88 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -22,6 +22,30 @@ var/obj/item/seeds/myseed = null //The currently planted seed var/unwrenchable = 1 + pixel_y=8 + + +/obj/machinery/hydroponics/proc/FindConnected() + + var/list/connected = list() + var/list/processing_atoms = list(src) + + while(processing_atoms.len) + + var/atom/a = processing_atoms[1] + + for(var/step_dir in cardinal) + var/obj/machinery/hydroponics/h = locate() in get_step(a, step_dir) + if(h && h.anchored==2 && !(h in connected) && !(h in processing_atoms)) + processing_atoms += h + + processing_atoms -= a + connected += a + + return connected + + + /obj/machinery/hydroponics/bullet_act(var/obj/item/projectile/Proj) //Works with the Somatoray to modify plant variables. if(!planted) ..() @@ -151,8 +175,21 @@ obj/machinery/hydroponics/process() obj/machinery/hydroponics/update_icon() + //Refreshes the icon and sets the luminosity overlays.Cut() + + var/n = 0 + + for(var/Dir in cardinal) + + var/obj/machinery/hydroponics/t = locate() in get_step(src,Dir) + if(t && t.anchored==2 && src.anchored==2) + n += Dir + + icon_state = "hoses-[n]" + + if(planted) if(dead) overlays += image('icons/obj/hydroponics.dmi', icon_state="[myseed.species]-dead") @@ -186,7 +223,6 @@ obj/machinery/hydroponics/update_icon() return - obj/machinery/hydroponics/proc/weedinvasion() // If a weed growth is sufficient, this happens. dead = 0 var/oldPlantName @@ -325,202 +361,220 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) else if(istype(O, /obj/item/weapon/reagent_containers) ) // Syringe stuff (and other reagent containers now too) var/obj/item/weapon/reagent_containers/reagent_source = O - var/datum/reagents/S = new /datum/reagents() - - S.my_atom = src - - var/obj/target = myseed ? myseed.plantname : src if(istype(reagent_source, /obj/item/weapon/reagent_containers/syringe)) var/obj/item/weapon/reagent_containers/syringe/syr = reagent_source if(syr.mode != 1) user << "You can't get any extract out of this plant." return + if(!reagent_source.reagents.total_volume) user << "[reagent_source] is empty." return 1 + var/list/trays = list(src)//makes the list just this in cases of syringes and compost etc + var/target = myseed ? myseed.plantname : src + var/visi_msg = "" + if(istype(reagent_source, /obj/item/weapon/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/weapon/reagent_containers/pill)) - visible_message("[user] composts [reagent_source], spreading it through [target].") - reagent_source.reagents.trans_to(S,reagent_source.reagents.total_volume) - del(reagent_source) + visi_msg="[user] composts [reagent_source], spreading it through [target]" else - reagent_source.reagents.trans_to(S,reagent_source.amount_per_transfer_from_this) if(istype(reagent_source, /obj/item/weapon/reagent_containers/syringe/)) var/obj/item/weapon/reagent_containers/syringe/syr = reagent_source - visible_message("[user] injects [target] with [syr].") + visi_msg="[user] injects [target] with [syr]" if(syr.reagents.total_volume <= 0) syr.mode = 0 syr.update_icon() else if(istype(reagent_source, /obj/item/weapon/reagent_containers/spray/)) - visible_message("[user] sprays [target] with [reagent_source].") + visi_msg="[user] sprays [target] with [reagent_source]" playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) else if(reagent_source.amount_per_transfer_from_this) // Droppers, cans, beakers, what have you. - visible_message("[user] uses [reagent_source] on [target].") - + visi_msg="[user] uses [reagent_source] on [target]" // Beakers, bottles, buckets, etc. Can't use is_open_container though. if(istype(reagent_source, /obj/item/weapon/reagent_containers/glass/)) playsound(loc, 'sound/effects/slosh.ogg', 25, 1) - // Requires 5 mutagen to possibly change species. - if(S.has_reagent("mutagen", 5)) - switch(rand(100)) - if(91 to 100) plantdies() - if(81 to 90) mutatespecie() - if(66 to 80) hardmutate() - if(41 to 65) mutate() - if(21 to 41) user << "The plants don't seem to react..." - if(11 to 20) mutateweed() - if(1 to 10) mutatepest() - else user << "Nothing happens..." - // 2 or 1 units is enough to change the yield and other stats. - else if(S.has_reagent("mutagen", 2)) - hardmutate() - else if(S.has_reagent("mutagen", 1)) - mutate() + if(reagent_source.amount_per_transfer_from_this>30 && reagent_source.reagents.total_volume>=reagent_source.amount_per_transfer_from_this) + trays=FindConnected() + visi_msg+=" setting off the irrigation system" - // Antitoxin binds shit pretty well. So the tox goes significantly down - if(S.has_reagent("anti_toxin", 1)) - adjustToxic(-round(S.get_reagent_amount("anti_toxin")*2)) + if(visi_msg) + visible_message("[visi_msg].") - // NIGGA, YOU JUST WENT ON FULL RETARD. - if(S.has_reagent("toxin", 1)) - adjustToxic(round(S.get_reagent_amount("toxin")*2)) + var/split = round(reagent_source.amount_per_transfer_from_this/trays.len) - // Milk is good for humans, but bad for plants. The sugars canot be used by plants, and the milk fat fucks up growth. Not shrooms though. I can't deal with this now... - if(S.has_reagent("milk", 1)) - adjustNutri(round(S.get_reagent_amount("milk")*0.1)) - adjustWater(round(S.get_reagent_amount("milk")*0.9)) + for(var/obj/machinery/hydroponics/H in trays) + //cause I don't want to feel like im juggling 15 tamagotchis and I can get to my real work of ripping flooring apart in hopes of validating my life choices of becoming a space-gardener - // Beer is a chemical composition of alcohol and various other things. It's a shitty nutrient but hey, it's still one. Also alcohol is bad, mmmkay? - if(S.has_reagent("beer", 1)) - adjustHealth(-round(S.get_reagent_amount("beer")*0.05)) - adjustNutri(round(S.get_reagent_amount("beer")*0.25)) - adjustWater(round(S.get_reagent_amount("beer")*0.7)) + var/datum/reagents/S = new /datum/reagents() + S.my_atom = H - // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial - if(S.has_reagent("fluorine", 1)) - adjustHealth(-round(S.get_reagent_amount("fluorine")*2)) - adjustToxic(round(S.get_reagent_amount("flourine")*2.5)) - adjustWater(-round(S.get_reagent_amount("flourine")*0.5)) - adjustWeeds(-rand(1,4)) + reagent_source.reagents.trans_to(S,split) + if(istype(reagent_source, /obj/item/weapon/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/weapon/reagent_containers/pill)) + del(reagent_source) - // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial - if(S.has_reagent("chlorine", 1)) - adjustHealth(-round(S.get_reagent_amount("chlorine")*1)) - adjustToxic(round(S.get_reagent_amount("chlorine")*1.5)) - adjustWater(-round(S.get_reagent_amount("chlorine")*0.5)) - adjustWeeds(-rand(1,3)) - // White Phosphorous + water -> phosphoric acid. That's not a good thing really. Phosphoric salts are beneficial though. And even if the plant suffers, in the long run the tray gets some nutrients. The benefit isn't worth that much. - if(S.has_reagent("phosphorus", 1)) - adjustHealth(-round(S.get_reagent_amount("phosphorus")*0.75)) - adjustNutri(round(S.get_reagent_amount("phosphorus")*0.1)) - adjustWater(-round(S.get_reagent_amount("phosphorus")*0.5)) - adjustWeeds(-rand(1,2)) - // Plants should not have sugar, they can't use it and it prevents them getting water/ nutients, it is good for mold though... - if(S.has_reagent("sugar", 1)) - adjustWeeds(rand(1,2)) - adjustPests(rand(1,2)) - adjustNutri(round(S.get_reagent_amount("sugar")*0.1)) + // Requires 5 mutagen to possibly change species. + if(S.has_reagent("mutagen", 5)) + switch(rand(100)) + if(91 to 100) H.plantdies() + if(81 to 90) H.mutatespecie() + if(66 to 80) H.hardmutate() + if(41 to 65) H.mutate() + if(21 to 41) user << "The plants don't seem to react..." + if(11 to 20) H.mutateweed() + if(1 to 10) H.mutatepest() + else user << "Nothing happens..." - // It is water! - if(S.has_reagent("water", 1)) - adjustWater(round(S.get_reagent_amount("water")*1)) + // 2 or 1 units is enough to change the yield and other stats. + else if(S.has_reagent("mutagen", 2)) + H.hardmutate() + else if(S.has_reagent("mutagen", 1)) + H.mutate() - // Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits~ - if(S.has_reagent("holywater", 1)) - adjustWater(round(S.get_reagent_amount("holywater")*1)) - adjustHealth(round(S.get_reagent_amount("holywater")*0.1)) + // Antitoxin binds shit pretty well. So the tox goes significantly down + if(S.has_reagent("anti_toxin", 1)) + H.adjustToxic(-round(S.get_reagent_amount("anti_toxin")*2)) - // A variety of nutrients are dissolved in club soda, without sugar. These nutrients include carbon, oxygen, hydrogen, phosphorous, potassium, sulfur and sodium, all of which are needed for healthy plant growth. - if(S.has_reagent("sodawater", 1)) - adjustWater(round(S.get_reagent_amount("sodawater")*1)) - adjustHealth(round(S.get_reagent_amount("sodawater")*0.1)) - adjustNutri(round(S.get_reagent_amount("sodawater")*0.1)) + // NIGGA, YOU JUST WENT ON FULL RETARD. + if(S.has_reagent("toxin", 1)) + H.adjustToxic(round(S.get_reagent_amount("toxin")*2)) - // Man, you guys are retards - if(S.has_reagent("sacid", 1)) - adjustHealth(-round(S.get_reagent_amount("sacid")*1)) - adjustToxic(round(S.get_reagent_amount("sacid")*1.5)) - adjustWeeds(-rand(1,2)) + // Milk is good for humans, but bad for plants. The sugars canot be used by plants, and the milk fat fucks up growth. Not shrooms though. I can't deal with this now... + if(S.has_reagent("milk", 1)) + H.adjustNutri(round(S.get_reagent_amount("milk")*0.1)) + H.adjustWater(round(S.get_reagent_amount("milk")*0.9)) - // SERIOUSLY - if(S.has_reagent("pacid", 1)) - adjustHealth(-round(S.get_reagent_amount("pacid")*2)) - adjustToxic(round(S.get_reagent_amount("pacid")*3)) - adjustWeeds(-rand(1,4)) + // Beer is a chemical composition of alcohol and various other things. It's a shitty nutrient but hey, it's still one. Also alcohol is bad, mmmkay? + if(S.has_reagent("beer", 1)) + H.adjustHealth(-round(S.get_reagent_amount("beer")*0.05)) + H.adjustNutri(round(S.get_reagent_amount("beer")*0.25)) + H.adjustWater(round(S.get_reagent_amount("beer")*0.7)) - // Plant-B-Gone is just as bad - if(S.has_reagent("plantbgone", 1)) - adjustHealth(-round(S.get_reagent_amount("plantbgone")*2)) - adjustToxic(-round(S.get_reagent_amount("plantbgone")*3)) - adjustWeeds(-rand(4,8)) + // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial + if(S.has_reagent("fluorine", 1)) + H.adjustHealth(-round(S.get_reagent_amount("fluorine")*2)) + H.adjustToxic(round(S.get_reagent_amount("flourine")*2.5)) + H.adjustWater(-round(S.get_reagent_amount("flourine")*0.5)) + H.adjustWeeds(-rand(1,4)) - // Healing - if(S.has_reagent("cryoxadone", 1)) - adjustHealth(round(S.get_reagent_amount("cryoxadone")*3)) - adjustToxic(-round(S.get_reagent_amount("cryoxadone")*3)) + // You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial + if(S.has_reagent("chlorine", 1)) + H.adjustHealth(-round(S.get_reagent_amount("chlorine")*1)) + H.adjustToxic(round(S.get_reagent_amount("chlorine")*1.5)) + H.adjustWater(-round(S.get_reagent_amount("chlorine")*0.5)) + H.adjustWeeds(-rand(1,3)) - // Ammonia is bad ass. - if(S.has_reagent("ammonia", 1)) - adjustHealth(round(S.get_reagent_amount("ammonia")*0.5)) - adjustNutri(round(S.get_reagent_amount("ammonia")*1)) + // White Phosphorous + water -> phosphoric acid. That's not a good thing really. Phosphoric salts are beneficial though. And even if the plant suffers, in the long run the tray gets some nutrients. The benefit isn't worth that much. + if(S.has_reagent("phosphorus", 1)) + H.adjustHealth(-round(S.get_reagent_amount("phosphorus")*0.75)) + H.adjustNutri(round(S.get_reagent_amount("phosphorus")*0.1)) + H.adjustWater(-round(S.get_reagent_amount("phosphorus")*0.5)) + H.adjustWeeds(-rand(1,2)) - // This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant. - if(S.has_reagent("diethylamine", 1)) - adjustHealth(round(S.get_reagent_amount("diethylamine")*1)) - adjustNutri(round(S.get_reagent_amount("diethylamine")*2)) - adjustPests(-rand(1,2)) + // Plants should not have sugar, they can't use it and it prevents them getting water/ nutients, it is good for mold though... + if(S.has_reagent("sugar", 1)) + H.adjustWeeds(rand(1,2)) + H.adjustPests(rand(1,2)) + H.adjustNutri(round(S.get_reagent_amount("sugar")*0.1)) - // Compost, effectively - if(S.has_reagent("nutriment", 1)) - adjustHealth(round(S.get_reagent_amount("nutriment")*0.5)) - adjustNutri(round(S.get_reagent_amount("nutriment")*1)) + // It is water! + if(S.has_reagent("water", 1)) + H.adjustWater(round(S.get_reagent_amount("water")*1)) - // Poor man's mutagen. - if(S.has_reagent("radium", 10) || S.has_reagent("uranium", 10)) - switch(rand(100)) - if(91 to 100) plantdies() - if(81 to 90) mutatespecie() - if(66 to 80) hardmutate() - if(41 to 65) mutate() - if(21 to 41) user << "The plants don't seem to react..." - if(11 to 20) mutateweed() - if(1 to 10) mutatepest() - else user << "Nothing happens..." - // Can change the yield and other stats, but requires more than mutagen - else if(S.has_reagent("radium", 5) || S.has_reagent("uranium", 5)) - hardmutate() - else if(S.has_reagent("radium", 2) || S.has_reagent("uranium", 2)) - mutate() + // Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits~ + if(S.has_reagent("holywater", 1)) + H.adjustWater(round(S.get_reagent_amount("holywater")*1)) + H.adjustHealth(round(S.get_reagent_amount("holywater")*0.1)) - // After handling the mutating, we now handle the damage from adding crude radioactives... - if(S.has_reagent("uranium", 1)) - adjustHealth(-round(S.get_reagent_amount("uranium")*1)) - adjustToxic(round(S.get_reagent_amount("uranium")*2)) - if(S.has_reagent("radium", 1)) - adjustHealth(-round(S.get_reagent_amount("radium")*1)) - adjustToxic(round(S.get_reagent_amount("radium")*3)) // Radium is harsher (OOC: also easier to produce) + // A variety of nutrients are dissolved in club soda, without sugar. These nutrients include carbon, oxygen, hydrogen, phosphorous, potassium, sulfur and sodium, all of which are needed for healthy plant growth. + if(S.has_reagent("sodawater", 1)) + H.adjustWater(round(S.get_reagent_amount("sodawater")*1)) + H.adjustHealth(round(S.get_reagent_amount("sodawater")*0.1)) + H.adjustNutri(round(S.get_reagent_amount("sodawater")*0.1)) - // The best stuff there is. For testing/debugging. - if(S.has_reagent("adminordrazine", 1)) - adjustWater(round(S.get_reagent_amount("adminordrazine")*1)) - adjustHealth(round(S.get_reagent_amount("adminordrazine")*1)) - adjustNutri(round(S.get_reagent_amount("adminordrazine")*1)) - adjustPests(-rand(1,5)) - adjustWeeds(-rand(1,5)) - if(S.has_reagent("adminordrazine", 5)) - switch(rand(100)) - if(66 to 100) mutatespecie() - if(33 to 65) mutateweed() - if(1 to 32) mutatepest() - else user << "Nothing happens..." + // Man, you guys are retards + if(S.has_reagent("sacid", 1)) + H.adjustHealth(-round(S.get_reagent_amount("sacid")*1)) + H.adjustToxic(round(S.get_reagent_amount("sacid")*1.5)) + H.adjustWeeds(-rand(1,2)) - S.clear_reagents() - del(S) - update_icon() + // SERIOUSLY + if(S.has_reagent("pacid", 1)) + H.adjustHealth(-round(S.get_reagent_amount("pacid")*2)) + H.adjustToxic(round(S.get_reagent_amount("pacid")*3)) + H.adjustWeeds(-rand(1,4)) + + // Plant-B-Gone is just as bad + if(S.has_reagent("plantbgone", 1)) + H.adjustHealth(-round(S.get_reagent_amount("plantbgone")*2)) + H.adjustToxic(-round(S.get_reagent_amount("plantbgone")*3)) + H.adjustWeeds(-rand(4,8)) + + // Healing + if(S.has_reagent("cryoxadone", 1)) + H.adjustHealth(round(S.get_reagent_amount("cryoxadone")*3)) + H.adjustToxic(-round(S.get_reagent_amount("cryoxadone")*3)) + + // Ammonia is bad ass. + if(S.has_reagent("ammonia", 1)) + H.adjustHealth(round(S.get_reagent_amount("ammonia")*0.5)) + H.adjustNutri(round(S.get_reagent_amount("ammonia")*1)) + + // This is more bad ass, and pests get hurt by the corrosive nature of it, not the plant. + if(S.has_reagent("diethylamine", 1)) + H.adjustHealth(round(S.get_reagent_amount("diethylamine")*1)) + H.adjustNutri(round(S.get_reagent_amount("diethylamine")*2)) + H.adjustPests(-rand(1,2)) + + // Compost, effectively + if(S.has_reagent("nutriment", 1)) + H.adjustHealth(round(S.get_reagent_amount("nutriment")*0.5)) + H.adjustNutri(round(S.get_reagent_amount("nutriment")*1)) + + // Poor man's mutagen. + if(S.has_reagent("radium", 10) || S.has_reagent("uranium", 10)) + switch(rand(100)) + if(91 to 100) H.plantdies() + if(81 to 90) H.mutatespecie() + if(66 to 80) H.hardmutate() + if(41 to 65) H.mutate() + if(21 to 41) user << "The plants don't seem to react..." + if(11 to 20) H.mutateweed() + if(1 to 10) H.mutatepest() + else user << "Nothing happens..." + // Can change the yield and other stats, but requires more than mutagen + else if(S.has_reagent("radium", 5) || S.has_reagent("uranium", 5)) + H.hardmutate() + else if(S.has_reagent("radium", 2) || S.has_reagent("uranium", 2)) + H.mutate() + + // After handling the mutating, we now handle the damage from adding crude radioactives... + if(S.has_reagent("uranium", 1)) + H.adjustHealth(-round(S.get_reagent_amount("uranium")*1)) + H.adjustToxic(round(S.get_reagent_amount("uranium")*2)) + if(S.has_reagent("radium", 1)) + H.adjustHealth(-round(S.get_reagent_amount("radium")*1)) + H.adjustToxic(round(S.get_reagent_amount("radium")*3)) // Radium is harsher (OOC: also easier to produce) + + // The best stuff there is. For testing/debugging. + if(S.has_reagent("adminordrazine", 1)) + H.adjustWater(round(S.get_reagent_amount("adminordrazine")*1)) + H.adjustHealth(round(S.get_reagent_amount("adminordrazine")*1)) + H.adjustNutri(round(S.get_reagent_amount("adminordrazine")*1)) + H.adjustPests(-rand(1,5)) + H.adjustWeeds(-rand(1,5)) + if(S.has_reagent("adminordrazine", 5)) + switch(rand(100)) + if(66 to 100) H.mutatespecie() + if(33 to 65) H.mutateweed() + if(1 to 32) H.mutatepest() + else user << "Nothing happens..." + + S.clear_reagents() + del(S) + H.update_icon() return 1 else if( istype(O, /obj/item/seeds/) ) @@ -545,27 +599,27 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) else if(istype(O, /obj/item/device/analyzer/plant_analyzer)) if(planted && myseed) user << "*** [myseed.plantname] ***" //Carn: now reports the plants growing, not the seeds. - user << "-Plant Age: \blue [age]" - user << "-Plant Endurance: \blue [myseed.endurance]" - user << "-Plant Lifespan: \blue [myseed.lifespan]" + user << "-Plant Age: [age]" + user << "-Plant Endurance: [myseed.endurance]" + user << "-Plant Lifespan: [myseed.lifespan]" if(myseed.yield != -1) - user << "-Plant Yield: \blue [myseed.yield]" - user << "-Plant Production: \blue [myseed.production]" + user << "-Plant Yield: [myseed.yield]" + user << "-Plant Production: [myseed.production]" if(myseed.potency != -1) - user << "-Plant Potency: \blue [myseed.potency]" - user << "-Weed level: \blue [weedlevel]/10" - user << "-Pest level: \blue [pestlevel]/10" - user << "-Toxicity level: \blue [toxic]/100" - user << "-Water level: \blue [waterlevel]/100" - user << "-Nutrition level: \blue [nutrilevel]/10" + user << "-Plant Potency: [myseed.potency]" + user << "-Weed level: [weedlevel]/10" + user << "-Pest level: [pestlevel]/10" + user << "-Toxicity level: [toxic]/100" + user << "-Water level: [waterlevel]/100" + user << "-Nutrition level: [nutrilevel]/10" user << "" else user << "No plant found." - user << "-Weed level: \blue [weedlevel]/10" - user << "-Pest level: \blue [pestlevel]/10" - user << "-Toxicity level: \blue [toxic]/100" - user << "-Water level: \blue [waterlevel]/100" - user << "-Nutrition level: \blue [nutrilevel]/10" + user << "-Weed level: [weedlevel]/10" + user << "-Pest level: [pestlevel]/10" + user << "-Toxicity level: [toxic]/100" + user << "-Water level: [waterlevel]/100" + user << "-Nutrition level: [nutrilevel]/10" user << "" else if(istype(O, /obj/item/weapon/minihoe)) @@ -603,7 +657,12 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) del(O) update_icon() + else if(istype(O, /obj/item/weapon/wrench) && unwrenchable) + if(anchored==2) + user << "Unscrew the hoses first!" + return + if(!anchored && !isinspace()) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = 1 @@ -612,10 +671,31 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) anchored = 0 user << "You unwrench [src]." + + else if(istype(O, /obj/item/weapon/screwdriver)) + + if(anchored) + + if(anchored==2) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + anchored = 1 + user << "You unscrew the [src]'s hoses." + + else if(anchored==1) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) + anchored = 2 + user << "You screw in the [src]'s hoses." + + for(var/obj/machinery/hydroponics/h in range(1,src)) + spawn() + h.update_icon() + else if(istype(O, /obj/item/weapon/shovel)) if(istype(src, /obj/machinery/hydroponics/soil)) user << "You clear up [src]!" del(src) + + return @@ -655,7 +735,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new product(user.loc, potency) // User gets a consumable if(!t_prod) return t_prod.seed = type - t_prod.species = species t_prod.lifespan = lifespan t_prod.endurance = endurance t_prod.maturation = maturation @@ -685,7 +764,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) var/obj/item/weapon/reagent_containers/food/snacks/grown/t_prod = new product(user.loc, potency) // User gets a consumable t_prod.seed = type - t_prod.species = species t_prod.lifespan = lifespan t_prod.endurance = endurance t_prod.maturation = maturation @@ -704,7 +782,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) while(t_amount < (yield * parent.yieldmod)) var/obj/item/weapon/grown/t_prod = new product(user.loc, potency) // User gets a consumable -QualityVan t_prod.seed = type - t_prod.species = species t_prod.lifespan = lifespan t_prod.endurance = endurance t_prod.maturation = maturation @@ -723,7 +800,6 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) while(t_amount < (yield * parent.yieldmod)) var/obj/item/weapon/grown/t_prod = new product(user.loc, potency) // User gets a consumable -QualityVan t_prod.seed = type - t_prod.species = species t_prod.lifespan = lifespan t_prod.endurance = endurance t_prod.maturation = maturation @@ -946,4 +1022,4 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) SetLuminosity(round(myseed.potency/10)) else SetLuminosity(0) - return \ No newline at end of file + return diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 2a7480e018e..ceb7c80bbf6 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -7,7 +7,6 @@ var/obj/item/weapon/reagent_containers/food/snacks/grown/F = O while(t_amount < t_max) var/obj/item/seeds/t_prod = new F.seed(O.loc) - t_prod.species = F.species t_prod.lifespan = F.lifespan t_prod.endurance = F.endurance t_prod.maturation = F.maturation @@ -22,7 +21,6 @@ var/obj/item/weapon/grown/F = O while(t_amount < t_max) var/obj/item/seeds/t_prod = new F.seed(O.loc) - t_prod.species = F.species t_prod.lifespan = F.lifespan t_prod.endurance = F.endurance t_prod.maturation = F.maturation diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 6037851e121..310e2ee11c8 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -19,6 +19,7 @@ var/potency = -1 var/growthstages = 0 var/plant_type = 0 // 0 = 'normal plant'; 1 = weed; 2 = shroom + var/rarity = 0 var/list/mutatelist = list() /obj/item/seeds/New() @@ -29,13 +30,14 @@ /obj/item/seeds/attackby(var/obj/item/O as obj, var/mob/user as mob) if (istype(O, /obj/item/device/analyzer/plant_analyzer)) user << "*** [plantname] ***" - user << "-Plant Endurance: \blue [endurance]" - user << "-Plant Lifespan: \blue [lifespan]" + user << "-Plant Endurance: [endurance]" + user << "-Plant Lifespan: [lifespan]" + user << "-Species Discovery Value: [rarity]" if(yield != -1) - user << "-Plant Yield: \blue [yield]" - user << "-Plant Production: \blue [production]" + user << "-Plant Yield: [yield]" + user << "-Plant Production: [production]" if(potency != -1) - user << "-Plant Potency: \blue [potency]" + user << "-Plant Potency: [potency]" return ..() // Fallthrough to item/attackby() so that bags can pick seeds up @@ -54,6 +56,7 @@ potency = 20 plant_type = 0 growthstages = 6 + rarity = 0 // CentComm knows about this species already, it's in exotic seeds crates. mutatelist = list(/obj/item/seeds/icepepperseed, /obj/item/seeds/chillighost) @@ -112,6 +115,7 @@ potency = 10 plant_type = 0 growthstages = 2 + rarity = 0 // Technically it's a beneficial mutant, but it's not exactly "new"... /obj/item/seeds/cabbageseed name = "pack of cabbage seeds" @@ -161,6 +165,7 @@ potency = 10 plant_type = 0 growthstages = 6 + rarity = 20 /obj/item/seeds/bananaseed name = "pack of banana seeds" @@ -208,6 +213,7 @@ yield = 2 plant_type = 0 growthstages = 6 + rarity = 0 // CentComm ships these to us in the exotic seeds crate. /obj/item/seeds/bloodtomatoseed name = "pack of blood-tomato seeds" @@ -224,6 +230,7 @@ potency = 10 plant_type = 0 growthstages = 6 + rarity = 20 /obj/item/seeds/tomatoseed name = "pack of tomato seeds" @@ -258,6 +265,7 @@ plant_type = 0 oneharvest = 1 growthstages = 2 + rarity = 30 /obj/item/seeds/bluetomatoseed name = "pack of blue-tomato seeds" @@ -275,6 +283,7 @@ plant_type = 0 growthstages = 6 mutatelist = list(/obj/item/seeds/bluespacetomatoseed) + rarity = 20 /obj/item/seeds/bluespacetomatoseed name = "pack of blue-space tomato seeds" @@ -291,6 +300,7 @@ potency = 10 plant_type = 0 growthstages = 6 + rarity = 50 /obj/item/seeds/cornseed name = "pack of corn seeds" @@ -358,6 +368,7 @@ potency = 20 plant_type = 0 growthstages = 6 + rarity = 20 /obj/item/seeds/soyaseed name = "pack of soybean seeds" @@ -391,6 +402,7 @@ potency = 10 plant_type = 0 growthstages = 4 + rarity = 20 /obj/item/seeds/wheatseed name = "pack of wheat seeds" @@ -477,6 +489,7 @@ oneharvest = 1 growthstages = 3 plant_type = 2 + rarity = 30 /obj/item/seeds/libertymycelium name = "pack of liberty-cap mycelium" @@ -545,6 +558,7 @@ oneharvest = 1 growthstages = 4 plant_type = 2 + rarity = 20 /obj/item/seeds/plumpmycelium name = "pack of plump-helmet mycelium" @@ -580,6 +594,7 @@ oneharvest = 1 growthstages = 3 plant_type = 2 + rarity = 30 /obj/item/seeds/nettleseed name = "pack of nettle seeds" @@ -615,6 +630,7 @@ oneharvest = 0 growthstages = 5 plant_type = 1 + rarity = 10 /obj/item/seeds/weeds name = "pack of weed seeds" @@ -683,6 +699,7 @@ oneharvest = 1 growthstages = 3 plant_type = 0 + rarity = 10 /obj/item/seeds/novaflowerseed name = "pack of novaflower seeds" @@ -750,6 +767,7 @@ potency = 10 plant_type = 0 growthstages = 6 + rarity = 50 // Source of cyanide, and impossible obtain normally. /obj/item/seeds/goldappleseed name = "pack of golden apple seeds" @@ -766,6 +784,7 @@ potency = 10 plant_type = 0 growthstages = 6 + rarity = 40 // Alchemy! /obj/item/seeds/ambrosiavulgarisseed name = "pack of ambrosia vulgaris seeds" @@ -799,6 +818,7 @@ potency = 5 plant_type = 0 growthstages = 6 + rarity = 40 /obj/item/seeds/whitebeetseed name = "pack of white-beet seeds" @@ -913,6 +933,7 @@ potency = 10 plant_type = 0 growthstages = 6 + rarity = 50 // Nanotrasen approves... but are these seeds even attainable? Drag the tray to the shuttle? /obj/item/seeds/orangeseed name = "pack of orange seed" @@ -946,6 +967,7 @@ plant_type = 0 growthstages = 6 mutatelist = list(/obj/item/seeds/deathberryseed) + rarity = 10 // Mildly poisonous berries are common in reality /obj/item/seeds/deathberryseed name = "pack of death-berry seeds" @@ -962,6 +984,7 @@ potency = 50 plant_type = 0 growthstages = 6 + rarity = 30 /obj/item/seeds/grassseed name = "pack of grass seeds" @@ -1026,6 +1049,7 @@ potency = 10 growthstages = 4 plant_type = 1 + rarity = 30 /obj/item/seeds/kudzuseed/attack_self(mob/user as mob) if(istype(user.loc,/turf/space)) @@ -1049,6 +1073,7 @@ potency = 20 plant_type = 0 growthstages = 6 + rarity = 20 /obj/item/seeds/gatfruit name = "pack of gatfruit seeds" @@ -1064,4 +1089,109 @@ yield = 2 potency = 60 plant_type = 0 - growthstages = 2 \ No newline at end of file + growthstages = 2 + rarity = 50 // Seems admin-only. + +/obj/item/seeds/coffee_arabica_seed + name = "pack of coffee arabica seeds" + desc = "These seeds grow into coffee arabica bushes." + icon_state = "seed-coffeea" + species = "coffeea" + plantname = "Coffee Arabica Bush" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/coffee_arabica + lifespan = 30 + endurance = 20 + maturation = 5 + production = 5 + yield = 5 + potency = 10 + plant_type = 0 + growthstages = 5 + mutatelist = list(/obj/item/seeds/coffee_robusta_seed) + +/obj/item/seeds/coffee_robusta_seed + name = "pack of coffee robusta seeds" + desc = "These seeds grow into coffee robusta bushes." + icon_state = "seed-coffeer" + species = "coffeer" + plantname = "Coffee Robusta Bush" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/coffee_robusta + lifespan = 20 + endurance = 15 + maturation = 5 + production = 5 + yield = 5 + potency = 10 + plant_type = 0 + growthstages = 5 + rarity = 20 + +/obj/item/seeds/tobacco_seed + name = "pack of tobacco seeds" + desc = "These seeds grow into tobacco plants." + icon_state = "seed-tobacco" + species = "tobacco" + plantname = "Tobacco Plant" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco + lifespan = 20 + endurance = 15 + maturation = 5 + production = 5 + oneharvest = 1 + yield = 10 + potency = 10 + plant_type = 0 + growthstages = 3 + mutatelist = list(/obj/item/seeds/tobacco_space_seed) + +/obj/item/seeds/tobacco_space_seed + name = "pack of space tobacco seeds" + desc = "These seeds grow into space tobacco plants." + icon_state = "seed-stobacco" + species = "stobacco" + plantname = "Space Tobacco Plant" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/tobacco_space + lifespan = 20 + endurance = 15 + maturation = 5 + production = 5 + oneharvest = 1 + yield = 10 + potency = 10 + plant_type = 0 + growthstages = 3 + rarity = 20 + +/obj/item/seeds/tea_aspera_seed + name = "pack of tea aspera seeds" + desc = "These seeds grow into tea plants." + icon_state = "seed-teaaspera" + species = "teaaspera" + plantname = "Tea Aspera Plant" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/tea_aspera + lifespan = 20 + endurance = 15 + maturation = 5 + production = 5 + yield = 5 + potency = 10 + plant_type = 0 + growthstages = 5 + mutatelist = list(/obj/item/seeds/tea_astra_seed) + +/obj/item/seeds/tea_astra_seed + name = "pack of tea astra seeds" + desc = "These seeds grow into tea plants." + icon_state = "seed-teaastra" + species = "teaastra" + plantname = "Tea Astra Plant" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/tea_astra + lifespan = 20 + endurance = 15 + maturation = 5 + production = 5 + yield = 5 + potency = 10 + plant_type = 0 + growthstages = 5 + rarity = 20 diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index a92a6019ec3..b73cb267fb3 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -19,13 +19,12 @@ /turf/simulated/mineral/ex_act(severity) switch(severity) if(3.0) - return + if (prob(75)) + src.gets_drilled() if(2.0) - if (prob(70)) - src.mineralAmt -= 1 //some of the stuff gets blown up + if (prob(90)) src.gets_drilled() if(1.0) - src.mineralAmt -= 2 //some of the stuff gets blown up src.gets_drilled() return @@ -63,7 +62,7 @@ /turf/simulated/mineral/random name = "Mineral deposit" - var/mineralSpawnChanceList = list("Uranium" = 5, "Iron" = 50, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Plasma" = 25/*, "Adamantine" =5*/, "Cave" = 1)//Currently, Adamantine won't spawn as it has no uses. -Durandan + var/mineralSpawnChanceList = list("Uranium" = 5, "Iron" = 50, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Plasma" = 25, "Gibtonite" = 5/*, "Adamantine" =5*/, "Cave" = 1)//Currently, Adamantine won't spawn as it has no uses. -Durandan var/mineralChance = 10 //means 10% chance of this plot changing to a mineral deposit /turf/simulated/mineral/random/New() @@ -88,7 +87,8 @@ M = new/turf/simulated/mineral/plasma(src) if("Cave") new/turf/simulated/floor/plating/asteroid/airless/cave(src) - + if("Gibtonite") + M = new/turf/simulated/mineral/gibtonite(src) /*if("Adamantine") M = new/turf/simulated/mineral/adamantine(src)*/ if(M) @@ -98,7 +98,7 @@ /turf/simulated/mineral/random/high_chance mineralChance = 25 - mineralSpawnChanceList = list("Uranium" = 10, "Iron" = 30, "Diamond" = 2, "Gold" = 10, "Silver" = 10, "Plasma" = 25) + mineralSpawnChanceList = list("Uranium" = 10, "Iron" = 30, "Diamond" = 2, "Gold" = 10, "Silver" = 10, "Plasma" = 25, "Gibtonite" = 8) /turf/simulated/mineral/uranium name = "Uranium deposit" @@ -163,6 +163,87 @@ spreadChance = 0 spread = 0 +////////////////////////////////Gibtonite +/turf/simulated/mineral/gibtonite + name = "Diamond deposit" //honk + icon_state = "rock_Diamond" + mineralName = "Gibtonite" + mineralAmt = 1 + spreadChance = 0 + spread = 1 + var/det_time = 8 //Countdown till explosion, but also rewards the player for how close you were to detonation when you defuse it + var/stage = 0 //How far into the lifecycle of gibtonite we are, 0 is untouched, 1 is active and attempting to detonate, 2 is benign and ready for extraction + var/activated_ckey = null //These are to track who triggered the gibtonite deposit for logging purposes + var/activated_name = null + +/turf/simulated/mineral/gibtonite/New() + det_time = rand(8,10) //So you don't know exactly when the hot potato will explode + ..() + +/turf/simulated/mineral/gibtonite/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/device/analyzer) && stage == 1) + user.visible_message("You use the analyzer to locate where to cut off the chain reaction and attempt to stop it...") + defuse() + if(istype(I, /obj/item/weapon/pickaxe)) + src.activated_ckey = "[user.ckey]" + src.activated_name = "[user.name]" + ..() + +/turf/simulated/mineral/gibtonite/proc/explosive_reaction() + if(stage == 0) + icon_state = "rock_Gibtonite_active" + name = "Gibtonite deposit" + desc = "An active gibtonite reserve. Run!" + stage = 1 + visible_message("There was gibtonite inside! It's going to explode!") + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + var/log_str = "[src.activated_ckey]? [src.activated_name] has triggered a gibtonite deposit reaction [A.name] (JMP)." + log_game(log_str) + countdown() + +/turf/simulated/mineral/gibtonite/proc/countdown() + spawn(0) + while(stage == 1 && det_time > 0 && mineralAmt >= 1) + det_time-- + sleep(5) + if(stage == 1 && det_time <= 0 && mineralAmt >= 1) + var/turf/bombturf = get_turf(src) + mineralAmt = 0 + explosion(bombturf,1,3,5, adminlog = 0) + if(stage == 0 || stage == 2) + return + +/turf/simulated/mineral/gibtonite/proc/defuse() + if(stage == 1) + icon_state = "rock_Gibtonite" + desc = "An inactive gibtonite reserve. The ore can be extracted." + stage = 2 + if(det_time < 0) + det_time = 0 + visible_message("The chain reaction was stopped! The gibtonite had [src.det_time] reactions left till the explosion!") + +/turf/simulated/mineral/gibtonite/gets_drilled() + if(stage == 0 && mineralAmt >= 1) //Gibtonite deposit is activated + playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1) + explosive_reaction() + return + if(stage == 1 && mineralAmt >= 1) //Gibtonite deposit goes kaboom + var/turf/bombturf = get_turf(src) + mineralAmt = 0 + explosion(bombturf,1,2,5, adminlog = 0) + if(stage == 2) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore. + var/obj/item/weapon/twohanded/required/gibtonite/G = new /obj/item/weapon/twohanded/required/gibtonite/(src) + if(det_time <= 0) + G.quality = 3 + G.icon_state = "Gibtonite ore 3" + if(det_time >= 1 && det_time <= 2) + G.quality = 2 + G.icon_state = "Gibtonite ore 2" + ..() + +////////////////////////////////End Gibtonite + /turf/simulated/floor/plating/asteroid/airless/cave var/length = 100 @@ -350,7 +431,7 @@ if(3.0) return if(2.0) - if (prob(70)) + if (prob(20)) src.gets_dug() if(1.0) src.gets_dug() @@ -437,6 +518,9 @@ icon_state = "asteroid_dug" return +/turf/simulated/floor/plating/asteroid/proc/countdown()//This is here to stop runtimes in the event that changeturf() causes asteroid plating to take gibtonite procs + return + /turf/proc/updateMineralOverlays() src.overlays.Cut() diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 6da5e3e2451..31b8eaeff36 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -60,10 +60,51 @@ desc = "Completely useless" icon_state = "slag" +/obj/item/weapon/twohanded/required/gibtonite + name = "Gibtonite ore" + desc = "Extremely explosive if struck with mining equipment, Gibtonite is often used by miners to speed up their work by using it as a mining charge. This material is illegal to possess by unauthorized personnel under space law." + icon = 'icons/obj/mining.dmi' + icon_state = "Gibtonite ore" + item_state = "Gibtonite ore" + w_class = 4 + throw_range = 0 + anchored = 1 //Forces people to carry it by hand, no pulling! + var/primed = 0 + var/det_time = 100 + var/quality = 1 //How pure this gibtonite is, determines the explosion produced by it and is derived from the det_time of the rock wall it was taken from, higher value = better + +/obj/item/weapon/twohanded/required/gibtonite/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/pickaxe) && !primed) + playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1) + primed = 1 + icon_state = "Gibtonite active" + user.visible_message("[user] strikes the [src], causing a chain reaction!") + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + message_admins("[key_name(usr)]? has triggered a [name] to detonate at [A.name] (JMP).") + log_game("[key_name(usr)] has primed a [name] for detonation at [A.name]([bombturf.x],[bombturf.y],[bombturf.z])") + spawn(det_time) + if(primed) + if(quality == 3) + explosion(src.loc,2,4,9) + if(quality == 2) + explosion(src.loc,1,2,5) + if(quality == 1) + explosion(src.loc,-1,1,3) + del(src) + if(istype(I, /obj/item/device/analyzer) && primed) + primed = 0 + user.visible_message("The chain reaction was stopped! ...The ore's quality went down.") + icon_state = "Gibtonite ore" + quality = 1 + ..() + /obj/item/weapon/ore/New() pixel_x = rand(0,16)-8 pixel_y = rand(0,8)-8 +/obj/item/weapon/ore/ex_act() + return /*****************************Coin********************************/ diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 4800991b6f6..693b26ae82d 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -10,7 +10,8 @@ /obj/structure/ore_box/attackby(obj/item/weapon/W as obj, mob/user as mob) if (istype(W, /obj/item/weapon/ore)) - src.contents += W; + user.drop_item() + W.loc = src if (istype(W, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W S.hide_from(usr) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 87930516848..bf2afb319a8 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -88,7 +88,7 @@ T.Entered(W) W.dropped(src) - update_icons() + //update_icons() // Redundant as u_equip will handle updating the specific overlay return 1 return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index dd9da44d4c2..530fa9cb8d0 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -112,38 +112,21 @@ Doesn't work on other aliens/AI.*/ return -/mob/living/carbon/alien/humanoid/proc/neurotoxin(mob/target as mob in oview()) +/mob/living/carbon/alien/humanoid/proc/neurotoxin() // ok set name = "Spit Neurotoxin (50)" set desc = "Spits neurotoxin at someone, paralyzing them for a short time." set category = "Alien" if(powerc(50)) - if(isalien(target)) - src << "\green Your allies are not a valid target." - return adjustToxLoss(-50) - src << "\green You spit neurotoxin at [target]." - for(var/mob/O in oviewers()) - if ((O.client && !( O.blinded ))) - O << "\red [src] spits neurotoxin at [target]!" - //I'm not motivated enough to revise this. Prjectile code in general needs update. + src.visible_message("\red [src] spits neurotoxin!", "\green You spit neurotoxin.") + var/turf/T = loc - var/turf/U = (istype(target, /atom/movable) ? target.loc : target) - - if(!U || !T) - return - while(U && !istype(U,/turf)) - U = U.loc - if(!istype(T, /turf)) - return - if (U == T) - usr.bullet_act(src, get_organ_target()) - return - if(!istype(U, /turf)) + var/turf/U = get_step(src, dir) // Get the tile infront of the move, based on their direction + if(!isturf(U) || !isturf(T)) return - var/obj/item/projectile/energy/neurotoxin/A = new /obj/item/projectile/energy/neurotoxin(usr.loc) - + var/obj/item/projectile/bullet/neurotoxin/A = new /obj/item/projectile/bullet/neurotoxin(usr.loc) A.current = U A.yo = U.y - T.y A.xo = U.x - T.x diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index d0ccb3dd843..82ecbe8bb4b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -6,6 +6,7 @@ icon_state = "aliend_s" plasma_rate = 15 + /mob/living/carbon/alien/humanoid/drone/New() create_reagents(100) if(src.name == "alien drone") @@ -14,8 +15,13 @@ verbs.Add(/mob/living/carbon/alien/humanoid/proc/resin,/mob/living/carbon/alien/humanoid/proc/corrosive_acid) ..() //Drones use the same base as generic humanoids. -//Drone verbs +/mob/living/carbon/alien/humanoid/drone/movement_delay() + . = ..() + . += 1 + + +//Drone verbs /mob/living/carbon/alien/humanoid/drone/verb/evolve() // -- TLE set name = "Evolve (500)" set desc = "Produce an interal egg sac capable of spawning children. Only one queen can exist at a time." diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 428dc0d0b0b..be54c36fe0a 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -8,6 +8,7 @@ icon_state = "alienh_s" plasma_rate = 5 + /mob/living/carbon/alien/humanoid/hunter/New() create_reagents(100) if(name == "alien hunter") @@ -15,37 +16,37 @@ real_name = name ..() -/mob/living/carbon/alien/humanoid/hunter +/mob/living/carbon/alien/humanoid/hunter/handle_regular_hud_updates() + ..() //-Yvarov - - handle_regular_hud_updates() - - ..() //-Yvarov - - if (healths) - if (stat != 2) - switch(health) - if(150 to INFINITY) - healths.icon_state = "health0" - if(100 to 150) - healths.icon_state = "health1" - if(50 to 100) - healths.icon_state = "health2" - if(25 to 50) - healths.icon_state = "health3" - if(0 to 25) - healths.icon_state = "health4" - else - healths.icon_state = "health5" - else - healths.icon_state = "health6" - - - handle_environment() - if(m_intent == "run" || resting) - ..() + if (healths) + if (stat != 2) + switch(health) + if(150 to INFINITY) + healths.icon_state = "health0" + if(100 to 150) + healths.icon_state = "health1" + if(50 to 100) + healths.icon_state = "health2" + if(25 to 50) + healths.icon_state = "health3" + if(0 to 25) + healths.icon_state = "health4" + else + healths.icon_state = "health5" else - adjustToxLoss(-heal_rate) + healths.icon_state = "health6" + + +/mob/living/carbon/alien/humanoid/hunter/handle_environment() + if(m_intent == "run" || resting) + ..() + else + adjustToxLoss(-heal_rate) + +/mob/living/carbon/alien/humanoid/hunter/movement_delay() + . = -1 //hunters are sanic + . += ..() //but they still need to slow down on stun //Hunter verbs diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index d40108475c3..f6d14be8d91 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -8,6 +8,7 @@ icon_state = "aliens_s" plasma_rate = 10 + /mob/living/carbon/alien/humanoid/sentinel/New() create_reagents(100) if(name == "alien sentinel") @@ -16,27 +17,27 @@ verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin) ..() -/mob/living/carbon/alien/humanoid/sentinel +/mob/living/carbon/alien/humanoid/sentinel/handle_regular_hud_updates() + ..() //-Yvarov + if (healths) + if (stat != 2) + switch(health) + if(125 to INFINITY) + healths.icon_state = "health0" + if(100 to 125) + healths.icon_state = "health1" + if(75 to 100) + healths.icon_state = "health2" + if(25 to 75) + healths.icon_state = "health3" + if(0 to 25) + healths.icon_state = "health4" + else + healths.icon_state = "health5" + else + healths.icon_state = "health6" - handle_regular_hud_updates() - - ..() //-Yvarov - - if (healths) - if (stat != 2) - switch(health) - if(125 to INFINITY) - healths.icon_state = "health0" - if(100 to 125) - healths.icon_state = "health1" - if(75 to 100) - healths.icon_state = "health2" - if(25 to 75) - healths.icon_state = "health3" - if(0 to 25) - healths.icon_state = "health4" - else - healths.icon_state = "health5" - else - healths.icon_state = "health6" +/mob/living/carbon/alien/humanoid/sentinel/movement_delay() + . = ..() + . += 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index a3dedef0122..9a5d9114972 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -40,16 +40,8 @@ now_pushing = null /mob/living/carbon/alien/humanoid/movement_delay() - var/tally = 0 - if (istype(src, /mob/living/carbon/alien/humanoid/queen)) - tally += 5 - if (istype(src, /mob/living/carbon/alien/humanoid/drone)) - tally += 2 - if (istype(src, /mob/living/carbon/alien/humanoid/sentinel)) - tally += 1 - if (istype(src, /mob/living/carbon/alien/humanoid/hunter)) - tally = -1 // hunters go supersuperfast - return (tally + move_delay_add + config.alien_delay) + . = ..() + . += move_delay_add + config.alien_delay //move_delay_add is used to slow aliens with stuns ///mob/living/carbon/alien/humanoid/bullet_act(var/obj/item/projectile/Proj) taken care of in living @@ -165,7 +157,7 @@ var/damage = rand(1, 3) - if(istype(M, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(10, 40) else damage = rand(5, 35) diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index c64fc278ff9..7285b33e581 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -10,7 +10,7 @@ /mob/living/carbon/alien/humanoid/Life() set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (notransform) return diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 30d8dc8b89f..524405ec1d5 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -25,30 +25,30 @@ verbs -= /mob/living/carbon/alien/verb/ventcrawl ..() +/mob/living/carbon/alien/humanoid/queen/handle_regular_hud_updates() + ..() //-Yvarov -/mob/living/carbon/alien/humanoid/queen + if (src.healths) + if (src.stat != 2) + switch(health) + if(250 to INFINITY) + src.healths.icon_state = "health0" + if(175 to 250) + src.healths.icon_state = "health1" + if(100 to 175) + src.healths.icon_state = "health2" + if(50 to 100) + src.healths.icon_state = "health3" + if(0 to 50) + src.healths.icon_state = "health4" + else + src.healths.icon_state = "health5" + else + src.healths.icon_state = "health6" - handle_regular_hud_updates() - - ..() //-Yvarov - - if (src.healths) - if (src.stat != 2) - switch(health) - if(250 to INFINITY) - src.healths.icon_state = "health0" - if(175 to 250) - src.healths.icon_state = "health1" - if(100 to 175) - src.healths.icon_state = "health2" - if(50 to 100) - src.healths.icon_state = "health3" - if(0 to 50) - src.healths.icon_state = "health4" - else - src.healths.icon_state = "health5" - else - src.healths.icon_state = "health6" +/mob/living/carbon/alien/humanoid/queen/movement_delay() + . = ..() + . += 5 //Queen verbs @@ -76,15 +76,13 @@ pixel_x = -16 /mob/living/carbon/alien/humanoid/queen/large/update_icons() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again update_hud() //TODO: remove the need for this to be here overlays.Cut() - if(lying) - if(resting) icon_state = "queen_sleep" - else icon_state = "queen_l" - for(var/image/I in overlays_lying) - overlays += I + if(stat == DEAD) + icon_state = "queen_dead" + else if(stat == UNCONSCIOUS || lying || resting) + icon_state = "queen_sleep" else icon_state = "queen_s" - for(var/image/I in overlays_standing) - overlays += I \ No newline at end of file + for(var/image/I in overlays_standing) + overlays += I diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index bfbfebf21e5..d13c7984cee 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -6,35 +6,26 @@ ///////////////////////////////// /mob/living/carbon/alien/humanoid - var/list/overlays_lying[X_TOTAL_LAYERS] var/list/overlays_standing[X_TOTAL_LAYERS] /mob/living/carbon/alien/humanoid/update_icons() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again update_hud() //TODO: remove the need for this to be here overlays.Cut() + for(var/image/I in overlays_standing) + overlays += I + if(stat == DEAD) //If we mostly took damage from fire if(fireloss > 125) icon_state = "alien[caste]_husked" else icon_state = "alien[caste]_dead" - for(var/image/I in overlays_lying) - overlays += I - else if(lying) - if(resting) - icon_state = "alien[caste]_sleep" - else if(stat == UNCONSCIOUS) - icon_state = "alien[caste]_unconscious" - else - icon_state = "alien[caste]_l" - for(var/image/I in overlays_lying) - overlays += I + else if(stat == UNCONSCIOUS || lying || resting) + icon_state = "alien[caste]_sleep" + else if(m_intent == "run") + icon_state = "alien[caste]_running" else - if(m_intent == "run") icon_state = "alien[caste]_running" - else icon_state = "alien[caste]_s" - for(var/image/I in overlays_standing) - overlays += I + icon_state = "alien[caste]_s" /mob/living/carbon/alien/humanoid/regenerate_icons() ..() @@ -44,8 +35,16 @@ update_inv_l_hand(0) update_inv_pockets(0) update_hud() - update_icons() +// update_icons() //Handled in update_transform(), leaving this here as a reminder update_fire() + update_transform() + +/mob/living/carbon/alien/humanoid/update_transform() //The old method of updating lying/standing was update_icons(). Aliens still expect that. + if(lying > 0) + lying = 90 //Anything else looks retarded + update_icons() + ..() + /mob/living/carbon/alien/humanoid/update_hud() if(client) @@ -87,18 +86,12 @@ update_icons() /mob/living/carbon/alien/humanoid/update_fire() - overlays -= overlays_lying[X_FIRE_LAYER] overlays -= overlays_standing[X_FIRE_LAYER] if(on_fire) - overlays_lying[X_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Lying", "layer"= -X_FIRE_LAYER) overlays_standing[X_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -X_FIRE_LAYER) - if(src.lying) - overlays += overlays_lying[X_FIRE_LAYER] - else - overlays += overlays_standing[X_FIRE_LAYER] + overlays += overlays_standing[X_FIRE_LAYER] return else - overlays_lying[X_FIRE_LAYER] = null overlays_standing[X_FIRE_LAYER] = null //Xeno Overlays Indexes////////// diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 7f88fb56c6b..7707bb5d700 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -181,7 +181,7 @@ var/damage = rand(1, 3) - if(istype(src, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(20, 40) else damage = rand(5, 35) diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 51544135ef7..3ab2a1a14dd 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -7,7 +7,7 @@ /mob/living/carbon/alien/larva/Life() set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (notransform) return diff --git a/code/modules/mob/living/carbon/alien/larva/update_icons.dm b/code/modules/mob/living/carbon/alien/larva/update_icons.dm index 3ab3fb3b382..104811c4fc1 100644 --- a/code/modules/mob/living/carbon/alien/larva/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/larva/update_icons.dm @@ -12,11 +12,14 @@ if(stat == DEAD) icon_state = "larva[state]_dead" - else if (handcuffed || legcuffed) + else if (handcuffed || legcuffed) //This should be an overlay. Who made this an icon_state? icon_state = "larva[state]_cuff" + else if(stat == UNCONSCIOUS || lying || resting) + icon_state = "larva[state]_sleep" else if (stunned) icon_state = "larva[state]_stun" - else if(lying || resting) - icon_state = "larva[state]_sleep" else icon_state = "larva[state]" + +/mob/living/carbon/alien/larva/update_transform() //All this is handled in update_icons() + return update_icons() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index a45e64ca686..f4fee6df253 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -1,6 +1,6 @@ /mob/living/carbon/brain/Life() set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED ..() if(stat != DEAD) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 56903541193..5205d76765b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -8,6 +8,11 @@ if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360) src.bodytemperature += 2 +/mob/living/carbon/movement_delay() + . = 0 + if(legcuffed) + . += legcuffed.slowdown + /mob/living/carbon/relaymove(var/mob/user, direction) if(user in src.stomach_contents) if(prob(40)) @@ -310,15 +315,16 @@ /mob/living/carbon/clean_blood() - . = ..() if(ishuman(src)) var/mob/living/carbon/human/H = src if(H.gloves) if(H.gloves.clean_blood()) H.update_inv_gloves(0) else + ..() // Clear the Blood_DNA list if(H.bloody_hands) H.bloody_hands = 0 + H.bloody_hands_mob = null H.update_inv_gloves(0) update_icons() //apply the now updated overlays to the mob diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 41ddbb312f6..51665ffc5f5 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -244,7 +244,7 @@ var/damage = rand(1, 3) - if(istype(M, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(10, 35) else damage = rand(5, 25) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index bdf34462d77..4c79911d874 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -153,7 +153,8 @@ ..(damage, damagetype, def_zone, blocked) return 1 - if(blocked >= 2) return 0 + blocked = (100-blocked)/100 + if(blocked <= 0) return 0 var/obj/item/organ/limb/organ = null if(isorgan(def_zone)) @@ -163,8 +164,7 @@ organ = get_organ(check_zone(def_zone)) if(!organ) return 0 - if(blocked) - damage = (damage/(blocked+1)) + damage = (damage * blocked) switch(damagetype) if(BRUTE) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7f4e13d0c72..c951aaf0797 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -122,43 +122,6 @@ emp_act var/obj/item/organ/limb/affecting = get_organ(ran_zone(user.zone_sel.selecting)) -//--------------------- Cyber limb stuff ---------------------\\ - - if(istype(I, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = I - if(affecting.status == ORGAN_ROBOTIC) - if (WT.remove_fuel(0)) - if(affecting.brute_dam > 0) - affecting.heal_damage(30,0,1) //Repair Brute - update_damage_overlays(0) - updatehealth() - for(var/mob/O in viewers(user, null)) - O.show_message(text("\blue [user] has fixed some of the dents on [src]'s [affecting.getDisplayName()]!"), 1) //Tell everyone [src]'s limb (by its real name) has been repaired - return //So we don't attack them as well - else - user << "[src]'s [affecting.getDisplayName()] is already in good condition" - return - else - user << "Need more welding fuel!" - return - - - if(istype(I, /obj/item/weapon/cable_coil)) - var/obj/item/weapon/cable_coil/coil = I - if(affecting.status == ORGAN_ROBOTIC) - if(affecting.burn_dam > 0) - affecting.heal_damage(0,30,1) //Repair Burn - updatehealth() - coil.use(1) - for(var/mob/O in viewers(user, null)) - O.show_message(text("\blue [user] has fixed some of the burnt wires on [src]'s [affecting.getDisplayName()]!"), 1) - return //So we don't attack them as well - else - user << "[src]'s [affecting.getDisplayName()] is already in good condition" - return - -//-------------------- End of Cyber limb stuff ---------------------\\ - var/hit_area = parse_zone(affecting.name) if((user != src) && check_shields(I.force, "the [I.name]")) @@ -172,7 +135,7 @@ emp_act "[src] has been attacked in the [hit_area] with [I] by [user]!") var/armor = run_armor_check(affecting, "melee", "Your armour has protected your [hit_area].", "Your armour has softened a hit to your [hit_area].") - if(armor >= 2) return 0 + if(armor >= 100) return 0 if(!I.force) return 0 var/Iforce = I.force //to avoid runtimes on the forcesay checks at the bottom. Some items might delete themselves if you drop them. (stunning yourself, ninja swords) @@ -199,12 +162,8 @@ emp_act if (H.gloves) var/obj/item/clothing/gloves/G = H.gloves G.add_blood(H) - G.transfer_blood = 2 - G.bloody_hands_mob = H else H.add_blood(H) - H.bloody_hands = 2 - H.bloody_hands_mob = H H.update_inv_gloves() //updates on-mob overlays for bloody hands and/or bloody gloves @@ -261,4 +220,4 @@ emp_act src << "Error, electormagnetic pulse detected in cyber limb!" - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index edb6e5b37ab..923821e1658 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -1,33 +1,34 @@ /mob/living/carbon/human/movement_delay() - var/tally = 0 - - if(reagents.has_reagent("hyperzine")) return -1 - - if(reagents.has_reagent("nuka_cola")) return -1 - - if (istype(loc, /turf/space)) return -1 // It's hard to be slowed down in space by... anything + if(istype(loc, /turf/space)) + return -1 //It's hard to be slowed down in space by... anything + if(reagents.has_reagent("hyperzine")) + return -1 + if(reagents.has_reagent("nuka_cola")) + return -1 + . = 0 var/health_deficiency = (100 - health - halloss) - if(health_deficiency >= 40) tally += (health_deficiency / 25) + if(health_deficiency >= 40) + . += (health_deficiency / 25) - var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80 - if (hungry >= 70) tally += hungry/50 + var/hungry = (500 - nutrition) / 5 //So overeat would be 100 and default level would be 80 + if(hungry >= 70) + . += hungry / 50 if(wear_suit) - tally += wear_suit.slowdown - + . += wear_suit.slowdown if(shoes) - tally += shoes.slowdown - + . += shoes.slowdown if(back) - tally += back.slowdown + . += back.slowdown - if(FAT in src.mutations) - tally += 1.5 - if (bodytemperature < 283.222) - tally += (283.222 - bodytemperature) / 10 * 1.75 + if(FAT in mutations) + . += 1.5 + if(bodytemperature < 283.222) + . += (283.222 - bodytemperature) / 10 * 1.75 - return (tally+config.human_delay) + . += ..() + . += config.human_delay /mob/living/carbon/human/Process_Spacemove(var/check_drift = 0) //Can we act diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ffef68d2f61..81d47b51b94 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -36,7 +36,7 @@ /mob/living/carbon/human/Life() set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (notransform) return if(!loc) return // Fixing a null error that occurs when the mob isn't found in the world -- TLE @@ -946,68 +946,69 @@ if(stat == UNCONSCIOUS) //Critical damage passage overlay if(health <= config.health_threshold_crit) - var/image/I + var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage0") + I.blend_mode = BLEND_OVERLAY //damageoverlay is BLEND_MULTIPLY switch(health) if(-20 to -10) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage1") + I.icon_state = "passage1" if(-30 to -20) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage2") + I.icon_state = "passage2" if(-40 to -30) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage3") + I.icon_state = "passage3" if(-50 to -40) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage4") + I.icon_state = "passage4" if(-60 to -50) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage5") + I.icon_state = "passage5" if(-70 to -60) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage6") + I.icon_state = "passage6" if(-80 to -70) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage7") + I.icon_state = "passage7" if(-90 to -80) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage8") + I.icon_state = "passage8" if(-95 to -90) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage9") + I.icon_state = "passage9" if(-INFINITY to -95) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "passage10") + I.icon_state = "passage10" damageoverlay.overlays += I else //Oxygen damage overlay if(oxyloss) - var/image/I + var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay0") switch(oxyloss) if(10 to 20) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay1") + I.icon_state = "oxydamageoverlay1" if(20 to 25) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay2") + I.icon_state = "oxydamageoverlay2" if(25 to 30) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay3") + I.icon_state = "oxydamageoverlay3" if(30 to 35) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay4") + I.icon_state = "oxydamageoverlay4" if(35 to 40) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay5") + I.icon_state = "oxydamageoverlay5" if(40 to 45) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay6") + I.icon_state = "oxydamageoverlay6" if(45 to INFINITY) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "oxydamageoverlay7") + I.icon_state = "oxydamageoverlay7" damageoverlay.overlays += I //Fire and Brute damage overlay (BSSR) var/hurtdamage = src.getBruteLoss() + src.getFireLoss() + damageoverlaytemp damageoverlaytemp = 0 // We do this so we can detect if someone hits us or not. if(hurtdamage) - var/image/I + var/image/I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay0") switch(hurtdamage) if(35 to 45) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay1") + I.icon_state = "brutedamageoverlay1" if(45 to 55) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay2") + I.icon_state = "brutedamageoverlay2" + if(40 to 55) + I.icon_state = "brutedamageoverlay3" if(55 to 65) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay3") + I.icon_state = "brutedamageoverlay4" if(65 to 75) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay4") - if(75 to 85) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay5") + I.icon_state = "brutedamageoverlay5" if(85 to INFINITY) - I = image("icon" = 'icons/mob/screen_full.dmi', "icon_state" = "brutedamageoverlay6") + I.icon_state = "brutedamageoverlay6" damageoverlay.overlays += I if( stat == DEAD ) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 73a7961d649..74e0dbc8f9f 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -52,7 +52,7 @@ if(findtext(temp_message[H], "*") || findtext(temp_message[H], ";") || findtext(temp_message[H], ":")) continue temp_message[H] = "HONK" pick_list -= H //Make sure that you dont HONK the same word twice - message = dd_list2text(temp_message, " ") + message = list2text(temp_message, " ") if(wear_mask) message = wear_mask.speechModification(message) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 302a2f442fa..f96f769c801 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -3,12 +3,9 @@ /////////////////////// /* Keep these comments up-to-date if you -insist- on hurting my code-baby ;_; This system allows you to update individual mob-overlays, without regenerating them all each time. -When we generate overlays we do not generate either lying or standing, as used to happen. -Instead, we generate both standing and lying stances and store them in two fixed-length lists, -both using the same list-index. (The index values are defines within this file. +When we generate overlays we generate the standing version and then rotate the mob as necessary.. -As of the time of writing there are 20 layers within this list. Please try to keep this from increasing. - var/overlays_lying[20] //For the lying down stance +As of the time of writing there are 20 layers within this list. Please try to keep this from increasing. //22 and counting, good job guys var/overlays_standing[20] //For the standing stance Most of the time we only wish to update one overlay: @@ -21,10 +18,7 @@ the appropriate update_X proc. Note: Recent changes by aranclanos+carn: update_icons() no longer needs to be called. - This unfortunately means that cloaking is not working properly at time of writing, - however the system is easier to use. update_icons() should not be called unless you absolutely -know- you need it. - One such example would be when var/lying changes state (because every overlay needs to be updated, but not regenerated). In these - very specific cases, update_icons() will be faster than calling each update_X proc individually. + the system is easier to use. update_icons() should not be called unless you absolutely -know- you need it. IN ALL OTHER CASES it's better to just call the specific update_X procs. All of this means that this code is more maintainable, faster and still fairly easy to use. @@ -58,6 +52,7 @@ There are several things that need to be remembered: If you have any questions/constructive-comments/bugs-to-report Please contact me on #coderbus IRC. ~Carnie x +//Carn can sometimes be hard to reach now. However IRC is still your best bet for getting help. */ //Human Overlays Indexes///////// @@ -85,9 +80,7 @@ Please contact me on #coderbus IRC. ~Carnie x #define FIRE_LAYER 1 //If you're on fire #define TOTAL_LAYERS 22 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; ////////////////////////////////// - /mob/living/carbon/human - var/list/overlays_lying[TOTAL_LAYERS] var/list/overlays_standing[TOTAL_LAYERS] /mob/living/carbon/human/proc/update_base_icon_state() @@ -102,54 +95,32 @@ Please contact me on #coderbus IRC. ~Carnie x base_icon_state = "husk" else base_icon_state = "[skin_tone]_[(gender == FEMALE) ? "f" : "m"]" + icon_state = "[base_icon_state]_s" /mob/living/carbon/human/proc/apply_overlay(cache_index) - var/image/I = lying ? overlays_lying[cache_index] : overlays_standing[cache_index] + var/image/I = overlays_standing[cache_index] if(I) overlays += I /mob/living/carbon/human/proc/remove_overlay(cache_index) - if(overlays_lying[cache_index]) - overlays -= overlays_lying[cache_index] - overlays_lying[cache_index] = null if(overlays_standing[cache_index]) overlays -= overlays_standing[cache_index] overlays_standing[cache_index] = null -//UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING -//this proc is messy as I was forced to include some old laggy cloaking code to it so that I don't break cloakers -//I'll work on removing that stuff by rewriting some of the cloaking stuff at a later date. +//UPDATES OVERLAYS FROM OVERLAYS_STANDING +//TODO: Remove all instances where this proc is called. It used to be the fastest way to swap between standing/lying. /mob/living/carbon/human/update_icons() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again + update_hud() //TODO: remove the need for this - overlays.Cut() - if(lying) //can't be cloaked whilst lying down - icon_state = "[base_icon_state]_l" - for(var/thing in overlays_lying) + if(overlays.len != overlays_standing.len) + overlays.Cut() + + for(var/thing in overlays_standing) if(thing) overlays += thing - else - var/stealth = 0 - if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja) && wear_suit:s_active) - stealth = 1 - else - //cloaking devices. //TODO: get rid of this :< - for(var/obj/item/weapon/cloaking_device/S in list(l_hand,r_hand,belt,l_store,r_store)) - if(S.active) - stealth = 1 - break - if(stealth) - icon_state = "body_cloaked" - if(overlays_standing[L_HAND_LAYER]) - overlays += overlays_standing[L_HAND_LAYER] - if(overlays_standing[R_HAND_LAYER]) - overlays += overlays_standing[R_HAND_LAYER] - else - icon_state = "[base_icon_state]_s" - for(var/thing in overlays_standing) - if(thing) overlays += thing + update_transform() //DAMAGE OVERLAYS @@ -158,17 +129,13 @@ Please contact me on #coderbus IRC. ~Carnie x remove_overlay(DAMAGE_LAYER) var/image/standing = image("icon"='icons/mob/dam_human.dmi', "icon_state"="blank", "layer"=-DAMAGE_LAYER) - var/image/lying = image("icon"='icons/mob/dam_human.dmi', "icon_state"="blank2", "layer"=-DAMAGE_LAYER) overlays_standing[DAMAGE_LAYER] = standing - overlays_lying[DAMAGE_LAYER] = lying for(var/obj/item/organ/limb/O in organs) if(O.brutestate) - standing.overlays += "[O.icon_state]_[O.brutestate]0" //we're adding icon_states of the base image as overlays //made icon_name redundant - RR - lying.overlays += "[O.icon_state]2_[O.brutestate]0" + standing.overlays += "[O.icon]_[O.brutestate]0" //we're adding icon_states of the base image as overlays if(O.burnstate) - standing.overlays += "[O.icon_state]_0[O.burnstate]" - lying.overlays += "[O.icon_state]2_0[O.burnstate]" + standing.overlays += "[O.icon]_0[O.burnstate]" apply_overlay(DAMAGE_LAYER) @@ -185,34 +152,30 @@ Please contact me on #coderbus IRC. ~Carnie x //base icons var/datum/sprite_accessory/S var/list/standing = list() - var/list/lying = list() if(facial_hair_style) S = facial_hair_styles_list[facial_hair_style] if(S) - var/icon/facial_s = icon("icon"=S.icon, "icon_state"="[S.icon_state]_s") - var/icon/facial_l = icon("icon"=S.icon, "icon_state"="[S.icon_state]_l") - facial_s.Blend("#[facial_hair_color]", ICON_ADD) - facial_l.Blend("#[facial_hair_color]", ICON_ADD) - standing += image("icon"=facial_s, "layer"=-HAIR_LAYER) - lying += image("icon"=facial_l, "layer"=-HAIR_LAYER) + var/image/img_facial_s = image("icon" = S.icon, "icon_state" = "[S.icon_state]_s", "layer" = -HAIR_LAYER) + + var/new_color = "#" + facial_hair_color + img_facial_s.color = new_color + + standing += img_facial_s //Applies the debrained overlay if there is no brain if(!getorgan(/obj/item/organ/brain)) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="debrained_s", "layer"=-HAIR_LAYER) - lying += image("icon"='icons/mob/human_face.dmi', "icon_state"="debrained_l", "layer"=-HAIR_LAYER) + standing += image("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s", "layer" = -HAIR_LAYER) else if(hair_style) S = hair_styles_list[hair_style] if(S) - var/icon/hair_s = icon("icon"=S.icon, "icon_state"="[S.icon_state]_s") - var/icon/hair_l = icon("icon"=S.icon, "icon_state"="[S.icon_state]_l") - hair_s.Blend("#[hair_color]", ICON_ADD) - hair_l.Blend("#[hair_color]", ICON_ADD) - standing += image("icon"=hair_s, "layer"=-HAIR_LAYER) - lying += image("icon"=hair_l, "layer"=-HAIR_LAYER) + var/image/img_hair_s = image("icon" = S.icon, "icon_state" = "[S.icon_state]_s", "layer" = -HAIR_LAYER) + + var/new_color = "#" + hair_color + img_hair_s.color = new_color + + standing += img_hair_s - if(lying.len) - overlays_lying[HAIR_LAYER] = lying if(standing.len) overlays_standing[HAIR_LAYER] = standing @@ -223,25 +186,18 @@ Please contact me on #coderbus IRC. ~Carnie x remove_overlay(MUTATIONS_LAYER) var/list/standing = list() - var/list/lying = list() var/g = (gender == FEMALE) ? "f" : "m" for(var/mut in mutations) switch(mut) if(HULK) - lying += image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_[g]_l", "layer"=-MUTATIONS_LAYER) standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_[g]_s", "layer"=-MUTATIONS_LAYER) if(COLD_RESISTANCE) - lying += image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_l", "layer"=-MUTATIONS_LAYER) standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_s", "layer"=-MUTATIONS_LAYER) if(TK) - lying += image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_l", "layer"=-MUTATIONS_LAYER) standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_s", "layer"=-MUTATIONS_LAYER) if(LASER) - lying += image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes_l", "layer"=-MUTATIONS_LAYER) standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes_s", "layer"=-MUTATIONS_LAYER) - if(lying.len) - overlays_lying[MUTATIONS_LAYER] = lying if(standing.len) overlays_standing[MUTATIONS_LAYER] = standing @@ -252,34 +208,31 @@ Please contact me on #coderbus IRC. ~Carnie x remove_overlay(BODY_LAYER) update_base_icon_state() - icon_state = "[base_icon_state]_[src.lying ? "l" : "s"]" + icon_state = "[base_icon_state]_s" - var/list/lying = list() var/list/standing = list() //Mouth (lipstick!) if(lip_style) - standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s", "layer"=-BODY_LAYER) - lying += image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_l", "layer"=-BODY_LAYER) + standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s", "layer" = -BODY_LAYER) //Eyes if(!dna || dna.mutantrace != "skeleton") - var/icon/eyes_s = icon('icons/mob/human_face.dmi', "eyes_s") - var/icon/eyes_l = icon('icons/mob/human_face.dmi', "eyes_l") - eyes_s.Blend("#[eye_color]", ICON_ADD) - eyes_l.Blend("#[eye_color]", ICON_ADD) - standing += image("icon"=eyes_s, "layer"=-BODY_LAYER) - lying += image("icon"=eyes_l, "layer"=-BODY_LAYER) + var/image/img_eyes_s = image("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s", "layer" = -BODY_LAYER) + + var/new_color = "#" + eye_color + + img_eyes_s.color = new_color + + standing += img_eyes_s //Underwear if(underwear) var/datum/sprite_accessory/underwear/U = underwear_all[underwear] if(U) standing += image("icon"=U.icon, "icon_state"="[U.icon_state]_s", "layer"=-BODY_LAYER) - lying += image("icon"=U.icon, "icon_state"="[U.icon_state]_l", "layer"=-BODY_LAYER) - if(lying.len) - overlays_lying[BODY_LAYER] = lying + if(standing.len) overlays_standing[BODY_LAYER] = standing @@ -290,7 +243,6 @@ Please contact me on #coderbus IRC. ~Carnie x remove_overlay(FIRE_LAYER) if(on_fire) - overlays_lying[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Lying", "layer"=-FIRE_LAYER) overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"=-FIRE_LAYER) apply_overlay(FIRE_LAYER) @@ -299,35 +251,24 @@ Please contact me on #coderbus IRC. ~Carnie x /mob/living/carbon/human/proc/update_augments() remove_overlay(AUGMENTS_LAYER) - var/list/lying = list() var/list/standing = list() if(getlimb(/obj/item/organ/limb/robot/r_arm)) standing += image("icon"='icons/mob/augments.dmi', "icon_state"="r_arm_s", "layer"=-AUGMENTS_LAYER) - lying += image("icon"='icons/mob/augments.dmi', "icon_state"="r_arm_l", "layer"=-AUGMENTS_LAYER) if(getlimb(/obj/item/organ/limb/robot/l_arm)) standing += image("icon"='icons/mob/augments.dmi', "icon_state"="l_arm_s", "layer"=-AUGMENTS_LAYER) - lying += image("icon"='icons/mob/augments.dmi', "icon_state"="l_arm_l", "layer"=-AUGMENTS_LAYER) if(getlimb(/obj/item/organ/limb/robot/r_leg)) standing += image("icon"='icons/mob/augments.dmi', "icon_state"="r_leg_s", "layer"=-AUGMENTS_LAYER) - lying += image("icon"='icons/mob/augments.dmi', "icon_state"="r_leg_l", "layer"=-AUGMENTS_LAYER) if(getlimb(/obj/item/organ/limb/robot/l_leg)) standing += image("icon"='icons/mob/augments.dmi', "icon_state"="l_leg_s", "layer"=-AUGMENTS_LAYER) - lying += image("icon"='icons/mob/augments.dmi', "icon_state"="l_leg_l", "layer"=-AUGMENTS_LAYER) if(getlimb(/obj/item/organ/limb/robot/chest)) standing += image("icon"='icons/mob/augments.dmi', "icon_state"="chest_s", "layer"=-AUGMENTS_LAYER) - lying += image("icon"='icons/mob/augments.dmi', "icon_state"="chest_l", "layer"=-AUGMENTS_LAYER) if(getlimb(/obj/item/organ/limb/robot/head)) standing += image("icon"='icons/mob/augments.dmi', "icon_state"="head_s", "layer"=-AUGMENTS_LAYER) - lying += image("icon"='icons/mob/augments.dmi', "icon_state"="head_l", "layer"=-AUGMENTS_LAYER) - - - if(lying.len) - overlays_lying[AUGMENTS_LAYER] = lying if(standing.len) overlays_standing[AUGMENTS_LAYER] = standing @@ -361,6 +302,7 @@ Please contact me on #coderbus IRC. ~Carnie x update_inv_legcuffed() update_inv_pockets() update_fire() + update_transform() //Hud Stuff update_hud() @@ -378,12 +320,9 @@ Please contact me on #coderbus IRC. ~Carnie x var/t_color = w_uniform.item_color if(!t_color) t_color = icon_state - var/image/lying = image("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_l", "layer"=-UNIFORM_LAYER) var/image/standing = image("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_s", "layer"=-UNIFORM_LAYER) - overlays_lying[UNIFORM_LAYER] = lying overlays_standing[UNIFORM_LAYER] = standing - var/G = (gender == FEMALE) ? "f" : "m" if(G == "f" && U.fitted == 1) var/index = "[t_color]_s" @@ -394,13 +333,11 @@ Please contact me on #coderbus IRC. ~Carnie x overlays_standing[UNIFORM_LAYER] = standing if(w_uniform.blood_DNA) - lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood2") standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood") if(U.hastie) var/tie_color = U.hastie.item_color if(!tie_color) tie_color = U.hastie.icon_state - lying.overlays += image("icon"='icons/mob/ties.dmi', "icon_state"="[tie_color]2") standing.overlays += image("icon"='icons/mob/ties.dmi', "icon_state"="[tie_color]") else // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY @@ -417,7 +354,6 @@ Please contact me on #coderbus IRC. ~Carnie x wear_id.screen_loc = ui_id //TODO client.screen += wear_id - overlays_lying[ID_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="id2", "layer"=-ID_LAYER) overlays_standing[ID_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="id", "layer"=-ID_LAYER) apply_overlay(ID_LAYER) @@ -432,17 +368,13 @@ Please contact me on #coderbus IRC. ~Carnie x var/t_state = gloves.item_state if(!t_state) t_state = gloves.icon_state - var/image/lying = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]2", "layer"=-GLOVES_LAYER) var/image/standing = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]", "layer"=-GLOVES_LAYER) - overlays_lying[GLOVES_LAYER] = lying overlays_standing[GLOVES_LAYER] = standing if(gloves.blood_DNA) - lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands2") standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands") else if(blood_DNA) - overlays_lying[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands2") overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands") apply_overlay(GLOVES_LAYER) @@ -457,7 +389,6 @@ Please contact me on #coderbus IRC. ~Carnie x glasses.screen_loc = ui_glasses client.screen += glasses - overlays_lying[GLASSES_LAYER] = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]2", "layer"=-GLASSES_LAYER) overlays_standing[GLASSES_LAYER] = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]", "layer"=-GLASSES_LAYER) apply_overlay(GLASSES_LAYER) @@ -471,7 +402,6 @@ Please contact me on #coderbus IRC. ~Carnie x ears.screen_loc = ui_ears client.screen += ears - overlays_lying[EARS_LAYER] = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]2", "layer"=-EARS_LAYER) overlays_standing[EARS_LAYER] = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]", "layer"=-EARS_LAYER) apply_overlay(EARS_LAYER) @@ -485,13 +415,10 @@ Please contact me on #coderbus IRC. ~Carnie x shoes.screen_loc = ui_shoes client.screen += shoes - var/image/lying = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]2", "layer"=-SHOES_LAYER) var/image/standing = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]", "layer"=-SHOES_LAYER) - overlays_lying[SHOES_LAYER] = lying overlays_standing[SHOES_LAYER] = standing if(shoes.blood_DNA) - lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood2") standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood") apply_overlay(SHOES_LAYER) @@ -507,7 +434,6 @@ Please contact me on #coderbus IRC. ~Carnie x var/t_state = s_store.item_state if(!t_state) t_state = s_store.icon_state - overlays_lying[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]2", "layer"=-SUIT_STORE_LAYER) overlays_standing[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]", "layer"=-SUIT_STORE_LAYER) apply_overlay(SUIT_STORE_LAYER) @@ -522,20 +448,11 @@ Please contact me on #coderbus IRC. ~Carnie x head.screen_loc = ui_head //TODO client.screen += head - var/image/lying - var/image/standing - if(istype(head,/obj/item/clothing/head/kitty)) - var/obj/item/clothing/head/kitty/K = head - lying = image("icon"=K.mob2, "layer"=-HEAD_LAYER) - standing = image("icon"=K.mob, "layer"=-HEAD_LAYER) - else - lying = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]2", "layer"=-HEAD_LAYER) - standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) - overlays_lying[HEAD_LAYER] = lying + var/image/standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) + overlays_standing[HEAD_LAYER] = standing if(head.blood_DNA) - lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood2") standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") apply_overlay(HEAD_LAYER) @@ -551,7 +468,6 @@ Please contact me on #coderbus IRC. ~Carnie x var/t_state = belt.item_state if(!t_state) t_state = belt.icon_state - overlays_lying[BELT_LAYER] = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]2", "layer"=-BELT_LAYER) overlays_standing[BELT_LAYER] = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]", "layer"=-BELT_LAYER) apply_overlay(BELT_LAYER) @@ -566,9 +482,7 @@ Please contact me on #coderbus IRC. ~Carnie x wear_suit.screen_loc = ui_oclothing //TODO client.screen += wear_suit - var/image/lying = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]2", "layer"=-SUIT_LAYER) var/image/standing = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]", "layer"=-SUIT_LAYER) - overlays_lying[SUIT_LAYER] = lying overlays_standing[SUIT_LAYER] = standing if(istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) @@ -578,7 +492,6 @@ Please contact me on #coderbus IRC. ~Carnie x if(wear_suit.blood_DNA) var/obj/item/clothing/suit/S = wear_suit - lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="[S.blood_overlay_type]blood2") standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="[S.blood_overlay_type]blood") apply_overlay(SUIT_LAYER) @@ -603,15 +516,13 @@ Please contact me on #coderbus IRC. ~Carnie x wear_mask.screen_loc = ui_mask //TODO client.screen += wear_mask - var/image/lying = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]2", "layer"=-FACEMASK_LAYER) var/image/standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) - overlays_lying[FACEMASK_LAYER] = lying overlays_standing[FACEMASK_LAYER] = standing if(wear_mask.blood_DNA && !istype(wear_mask, /obj/item/clothing/mask/cigarette)) - lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood2") standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + apply_overlay(FACEMASK_LAYER) @@ -624,7 +535,6 @@ Please contact me on #coderbus IRC. ~Carnie x back.screen_loc = ui_back //TODO client.screen += back - overlays_lying[BACK_LAYER] = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]2", "layer"=-BACK_LAYER) overlays_standing[BACK_LAYER] = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) apply_overlay(BACK_LAYER) @@ -651,7 +561,6 @@ Please contact me on #coderbus IRC. ~Carnie x R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") - overlays_lying[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff2", "layer"=-HANDCUFF_LAYER) overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) else if(hud_used) @@ -667,12 +576,6 @@ Please contact me on #coderbus IRC. ~Carnie x remove_overlay(LEGCUFF_LAYER) if(legcuffed) - if(src.m_intent != "walk") - src.m_intent = "walk" - if(src.hud_used && src.hud_used.move_intent) - src.hud_used.move_intent.icon_state = "walking" - - overlays_lying[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff2", "layer"=-LEGCUFF_LAYER) overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) apply_overlay(LEGCUFF_LAYER) diff --git a/code/modules/mob/living/carbon/metroid/death.dm b/code/modules/mob/living/carbon/metroid/death.dm index 92ecf85b4ce..fc26fcbf5b7 100644 --- a/code/modules/mob/living/carbon/metroid/death.dm +++ b/code/modules/mob/living/carbon/metroid/death.dm @@ -1,27 +1,26 @@ /mob/living/carbon/slime/death(gibbed) + if(!gibbed) + if(is_adult) + var/mob/living/carbon/slime/M = new /mob/living/carbon/slime(loc) + M.colour = colour + M.rabid = 1 + is_adult = 0 + maxHealth = 150 + revive() + regenerate_icons() + name = "[colour] [is_adult ? "adult" : "baby"] slime ([rand(1, 1000)])" + return + if(stat == DEAD) return stat = DEAD icon_state = "[colour] baby slime dead" - - if(!gibbed) - if(istype(src, /mob/living/carbon/slime/adult)) - ghostize() - var/mob/living/carbon/slime/M1 = new primarytype(loc) - M1.rabid = 1 - if(src.mind) - src.mind.transfer_to(M1) - else - M1.key = src.key - var/mob/living/carbon/slime/M2 = new primarytype(loc) - M2.rabid = 1 - if(src) del(src) - else - for(var/mob/O in viewers(src, null)) - O.show_message("The [name] seizes up and falls limp...", 1) //ded -- Urist + for(var/mob/O in viewers(src, null)) + O.show_message("The [name] seizes up and falls limp...", 1) //ded -- Urist update_canmove() if(blind) blind.layer = 0 - ticker.mode.check_win() + if(ticker && ticker.mode) + ticker.mode.check_win() return ..(gibbed) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index b3cb4436812..62bb12487de 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -9,7 +9,7 @@ /mob/living/carbon/slime/Life() set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (src.notransform) return @@ -55,7 +55,7 @@ var/hungry = 0 var/starving = 0 - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) switch(nutrition) if(400 to 1100) hungry = 1 if(0 to 399) @@ -229,7 +229,7 @@ /mob/living/carbon/slime/proc/handle_regular_status_updates() - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) else health = 150 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) @@ -310,7 +310,7 @@ /mob/living/carbon/slime/proc/handle_nutrition() if(prob(20)) - if(istype(src, /mob/living/carbon/slime/adult)) nutrition-=rand(4,6) + if(is_adult) nutrition-=rand(4,6) else nutrition-=rand(2,3) if(nutrition <= 0) @@ -320,7 +320,7 @@ adjustToxLoss(rand(0,5)) else - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(nutrition >= 1000) if(prob(40)) amount_grown++ @@ -329,36 +329,12 @@ if(prob(40)) amount_grown++ if(amount_grown >= 10 && !Victim && !Target) - if(istype(src, /mob/living/carbon/slime/adult)) - if(!client) - for(var/i=1,i<=4,i++) - var/newslime - if(prob(70)) - newslime = primarytype - else - newslime = slime_mutation[rand(1,4)] - - var/mob/living/carbon/slime/M = new newslime(loc) - M.powerlevel = round(powerlevel/4) - M.Friends = Friends - M.tame = tame - M.rabid = rabid - M.Discipline = Discipline - if(i != 1) step_away(M,src) - feedback_add_details("slime_babies_born","slimebirth_[replacetext(M.colour," ","_")]") - del(src) - - else - if(!client) - var/mob/living/carbon/slime/adult/A = new adulttype(src.loc) - A.nutrition = nutrition -// A.nutrition += 100 - A.powerlevel = max(0, powerlevel-1) - A.Friends = Friends - A.tame = tame - A.rabid = rabid - del(src) + if(!ckey) + if(is_adult) + Reproduce() + else + Evolve() /mob/living/carbon/slime/proc/handle_targets() if(Tempstun) @@ -403,7 +379,7 @@ var/hungry = 0 // determines if the slime is hungry var/starving = 0 // determines if the slime is starving-hungry - if(istype(src, /mob/living/carbon/slime/adult)) // 1200 max nutrition + if(is_adult) // 1200 max nutrition switch(nutrition) if(601 to 900) if(prob(25)) hungry = 1//Ensures they continue eating, but aren't as aggressive at the same time @@ -435,7 +411,7 @@ continue if(issilicon(L)) - if(!istype(src, /mob/living/carbon/slime/adult)) //Non-starving diciplined adult slimes wont eat things + if(!is_adult) //Non-starving diciplined adult slimes wont eat things if(!starving && Discipline > 0) continue @@ -452,7 +428,7 @@ if(H.dna.mutantrace == "slime") continue - if(!istype(src, /mob/living/carbon/slime/adult)) //Non-starving diciplined adult slimes wont eat things + if(!is_adult) //Non-starving diciplined adult slimes wont eat things if(!starving && Discipline > 0) continue @@ -476,7 +452,7 @@ if((hungry || starving) && targets.len > 0) - if(!istype(src, /mob/living/carbon/slime/adult)) + if(!is_adult) if(!starving) for(var/mob/living/carbon/C in targets) if(!Discipline && prob(5)) diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index a3c360b8588..10d422538a9 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -5,6 +5,7 @@ pass_flags = PASSTABLE voice_message = "skree!" say_message = "hums" + var/is_adult = 0 layer = 5 @@ -44,40 +45,23 @@ ///////////TIME FOR SUBSPECIES var/colour = "grey" - var/primarytype = /mob/living/carbon/slime - var/adulttype = /mob/living/carbon/slime/adult var/coretype = /obj/item/slime_extract/grey var/list/slime_mutation[4] -/mob/living/carbon/slime/adult - name = "adult slime" - icon = 'icons/mob/slimes.dmi' - icon_state = "grey adult slime" - - health = 200 - gender = NEUTER - - update_icon = 0 - nutrition = 800 // 1200 = max - - /mob/living/carbon/slime/New() create_reagents(100) - name = text("[colour] baby slime ([rand(1, 1000)])") - real_name = name - spawn (1) - regenerate_icons() - src << "\blue Your icons have been generated!" + spawn (0) + name = "[colour] [is_adult ? "adult" : "baby"] slime ([rand(1, 1000)])" + icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" + real_name = name + slime_mutation = mutation_table(colour) + var/sanitizedcolour = replacetext(colour, " ", "") + coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") ..() -/mob/living/carbon/slime/adult/New() - //verbs.Remove(/mob/living/carbon/slime/verb/ventcrawl) +/mob/living/carbon/slime/regenerate_icons() + icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" ..() - name = text("[colour] adult slime ([rand(1,1000)])") - slime_mutation[1] = /mob/living/carbon/slime/orange - slime_mutation[2] = /mob/living/carbon/slime/metal - slime_mutation[3] = /mob/living/carbon/slime/blue - slime_mutation[4] = /mob/living/carbon/slime/purple /mob/living/carbon/slime/movement_delay() var/tally = 0 @@ -123,7 +107,7 @@ if(istype(AM, /obj/structure/window) || istype(AM, /obj/structure/grille)) - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(nutrition <= 600 && !Atkcool) AM.attack_slime(src) spawn() @@ -142,7 +126,7 @@ if(ismob(AM)) var/mob/tmob = AM - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(istype(tmob, /mob/living/carbon/human)) if(prob(90)) now_pushing = 0 @@ -176,14 +160,14 @@ ..() statpanel("Status") - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) stat(null, "Health: [round((health / 200) * 100)]%") else stat(null, "Health: [round((health / 150) * 100)]%") if (client.statpanel == "Status") - if(istype(src,/mob/living/carbon/slime/adult)) + if(is_adult) stat(null, "Nutrition: [nutrition]/1200") if(amount_grown >= 10) stat(null, "You can reproduce!") @@ -248,7 +232,7 @@ //paralysis += 1 - show_message("\red The blob attacks you!") + show_message(" The blob attacks you!") adjustFireLoss(damage) @@ -266,7 +250,7 @@ /mob/living/carbon/slime/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 by []", src, O), 1) + M.show_message(text(" [] has been hit by []", src, O), 1) if (health > 0) adjustBruteLoss((istype(O, /obj/effect/meteor/small) ? 10 : 25)) adjustFireLoss(30) @@ -286,12 +270,12 @@ for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red The [M.name] has glomped []!", src), 1) + O.show_message(text(" The [M.name] has glomped []!", src), 1) var/damage = rand(1, 3) attacked += 5 - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) damage = rand(1, 6) else damage = rand(1, 3) @@ -311,7 +295,7 @@ if(M.attack_sound) playsound(loc, M.attack_sound, 50, 1, 1) for(var/mob/O in viewers(src, null)) - O.show_message("\red [M] [M.attacktext] [src]!", 1) + O.show_message(" [M] [M.attacktext] [src]!", 1) add_logs(M, src, "attacked", admin=0) var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) adjustBruteLoss(damage) @@ -341,7 +325,7 @@ //playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [M.name] has attacked [src]!"), 1) + O.show_message(text(" [M.name] has attacked [src]!"), 1) adjustBruteLoss(rand(1, 3)) updatehealth() return @@ -363,13 +347,13 @@ if(prob(60)) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message("\red [M] attempts to wrestle \the [name] off!", 1) + O.show_message(" [M] attempts to wrestle \the [name] off!", 1) playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) else for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message("\red [M] manages to wrestle \the [name] off!", 1) + O.show_message(" [M] manages to wrestle \the [name] off!", 1) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) if(prob(90) && !client) @@ -391,19 +375,19 @@ if(prob(30)) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message("\red [M] attempts to wrestle \the [name] off of [Victim]!", 1) + O.show_message(" [M] attempts to wrestle \the [name] off of [Victim]!", 1) playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) else for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message("\red [M] manages to wrestle \the [name] off of [Victim]!", 1) + O.show_message(" [M] manages to wrestle \the [name] off of [Victim]!", 1) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) if(prob(80) && !client) Discipline++ - if(!istype(src, /mob/living/carbon/slime/adult)) + if(!is_adult) if(Discipline == 1) attacked = 0 @@ -438,7 +422,7 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has grabbed [] passively!", M, src), 1) + O.show_message(text(" [] has grabbed [] passively!", M, src), 1) else @@ -463,7 +447,7 @@ playsound(loc, "punch", 25, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has punched []!", M, src), 1) + O.show_message(text(" [] has punched []!", M, src), 1) adjustBruteLoss(damage) updatehealth() @@ -471,7 +455,7 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has attempted to punch []!", M, src), 1) + O.show_message(text(" [] has attempted to punch []!", M, src), 1) return @@ -501,18 +485,18 @@ damage = rand(20, 40) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has attacked [name]!", M), 1) + O.show_message(text(" [] has attacked [name]!", M), 1) else for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has wounded [name]!", M), 1) + O.show_message(text(" [] has wounded [name]!", M), 1) adjustBruteLoss(damage) updatehealth() else playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has attempted to lunge at [name]!", M), 1) + O.show_message(text(" [] has attempted to lunge at [name]!", M), 1) if ("grab") if (M == src || anchored) @@ -527,7 +511,7 @@ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) - O.show_message(text("\red [] has grabbed [name] passively!", M), 1) + O.show_message(text(" [] has grabbed [name] passively!", M), 1) if ("disarm") playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) @@ -537,7 +521,7 @@ if(prob(95)) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has tackled [name]!", M), 1) + O.show_message(text(" [] has tackled [name]!", M), 1) if(Victim) Victim = null @@ -563,7 +547,7 @@ drop_item() for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has disarmed [name]!", M), 1) + O.show_message(text(" [] has disarmed [name]!", M), 1) adjustBruteLoss(damage) updatehealth() return @@ -601,10 +585,10 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 attackby(obj/item/O as obj, mob/user as mob) if(istype(O, /obj/item/weapon/slimesteroid2)) if(enhanced == 1) - user << "\red This extract has already been enhanced!" + user << " This extract has already been enhanced!" return ..() if(Uses == 0) - user << "\red You can't enhance a used extract!" + user << " You can't enhance a used extract!" return ..() user <<"You apply the enhancer. It now has triple the amount of uses." Uses = 3 @@ -699,6 +683,9 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 name = "sepia slime extract" icon_state = "sepia slime extract" +/obj/item/slime_extract/rainbow + name = "rainbow slime extract" + icon_state = "rainbow slime extract" ////Pet Slime Creation/// @@ -710,16 +697,16 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 attack(mob/living/carbon/slime/M as mob, mob/user as mob) if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. - user << "\red The potion only works on baby slimes!" + user << " The potion only works on baby slimes!" return ..() - if(istype(M, /mob/living/carbon/slime/adult)) //Can't tame adults - user << "\red Only baby slimes can be tamed!" + if(M.is_adult) //Can't tame adults + user << " Only baby slimes can be tamed!" return..() if(M.stat) - user << "\red The slime is dead!" + user << " The slime is dead!" return..() if(M.mind) - user << "\red The slime resists!" + user << " The slime resists!" return ..() var/mob/living/simple_animal/slime/pet = new /mob/living/simple_animal/slime(M.loc) pet.icon_state = "[M.colour] baby slime" @@ -742,15 +729,15 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 icon = 'icons/obj/chemical.dmi' icon_state = "bottle19" - attack(mob/living/carbon/slime/adult/M as mob, mob/user as mob) - if(!istype(M, /mob/living/carbon/slime/adult))//If target is not a slime. - user << "\red The potion only works on adult slimes!" + attack(mob/living/carbon/slime/M as mob, mob/user as mob) + if(!istype(M, /mob/living/carbon/slime/))//If target is not a slime. + user << " The potion only works on slimes!" return ..() if(M.stat) - user << "\red The slime is dead!" + user << " The slime is dead!" return..() if(M.mind) - user << "\red The slime resists!" + user << " The slime resists!" return ..() var/mob/living/simple_animal/adultslime/pet = new /mob/living/simple_animal/adultslime(M.loc) pet.icon_state = "[M.colour] adult slime" @@ -776,16 +763,16 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 attack(mob/living/carbon/slime/M as mob, mob/user as mob) if(!istype(M, /mob/living/carbon/slime))//If target is not a slime. - user << "\red The steroid only works on baby slimes!" + user << " The steroid only works on baby slimes!" return ..() - if(istype(M, /mob/living/carbon/slime/adult)) //Can't tame adults - user << "\red Only baby slimes can use the steroid!" + if(M.is_adult) //Can't tame adults + user << " Only baby slimes can use the steroid!" return..() if(M.stat) - user << "\red The slime is dead!" + user << " The slime is dead!" return..() if(M.cores == 3) - user <<"\red The slime already has the maximum amount of extract!" + user <<" The slime already has the maximum amount of extract!" return..() user <<"You feed the slime the steroid. It now has triple the amount of extract." @@ -801,10 +788,10 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 /*afterattack(obj/target, mob/user , flag) if(istype(target, /obj/item/slime_extract)) if(target.enhanced == 1) - user << "\red This extract has already been enhanced!" + user << " This extract has already been enhanced!" return ..() if(target.Uses == 0) - user << "\red You can't enhance a used extract!" + user << " You can't enhance a used extract!" return ..() user <<"You apply the enhancer. It now has triple the amount of uses." target.Uses = 3 @@ -933,6 +920,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 user << "The rune fizzles uselessly. There is no spirit nearby." return var/mob/living/carbon/human/G = new /mob/living/carbon/human + if(prob(50)) G.gender = "female" hardset_dna(G, null, null, null, "adamantine") G.real_name = text("Adamantine Golem ([rand(1, 1000)])") G.equip_to_slot_or_del(new /obj/item/clothing/under/golem(G), slot_w_uniform) diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index c16039c5baf..6f186f0087c 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -11,12 +11,12 @@ var/list/choices = list() for(var/mob/living/C in view(1,src)) - if(C!=src && !istype(C,/mob/living/carbon/slime)) + if(C!=src && !istype(C,/mob/living/carbon/slime) && Adjacent(C)) choices += C var/mob/living/carbon/M = input(src,"Who do you wish to feed on?") in null|choices if(!M) return - if(M in view(1, src)) + if(Adjacent(M)) if(!istype(src, /mob/living/carbon/brain)) if(!istype(M, /mob/living/carbon/slime)) @@ -49,7 +49,7 @@ anchored = 1 var/lastnut = nutrition //if(M.client) M << "\red You legs become paralyzed!" - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) icon_state = "[colour] adult slime eat" else icon_state = "[colour] baby slime eat" @@ -58,7 +58,7 @@ // M.canmove = 0 canmove = 0 - if(M in view(1, src)) + if(Adjacent(M)) loc = M.loc if(prob(15) && M.client && istype(M, /mob/living/carbon)) @@ -96,7 +96,7 @@ if(powerlevel > 10) powerlevel = 10 - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(nutrition > 1200) nutrition = 1200 else @@ -119,11 +119,11 @@ break if(stat == 2) - if(!istype(src, /mob/living/carbon/slime/adult)) + if(!is_adult) icon_state = "[colour] baby slime dead" else - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) icon_state = "[colour] adult slime" else icon_state = "[colour] baby slime" @@ -173,19 +173,13 @@ if(stat) src << "I must be conscious to do this..." return - if(!istype(src, /mob/living/carbon/slime/adult)) + if(!is_adult) if(amount_grown >= 10) - var/mob/living/carbon/slime/adult/new_slime = new adulttype(loc) - new_slime.nutrition = nutrition - new_slime.powerlevel = max(0, powerlevel-1) - new_slime.a_intent = "harm" - if(src.mind) - src.mind.transfer_to(new_slime) - else - new_slime.key = src.key - new_slime.universal_speak = universal_speak - new_slime << "You are now an adult slime." - del(src) + is_adult = 1 + maxHealth = 200 + amount_grown = 0 + regenerate_icons() + name = text("[colour] [is_adult ? "adult" : "baby"] slime ([rand(1, 1000)])") else src << "I am not ready to evolve yet..." else @@ -193,15 +187,14 @@ /mob/living/carbon/slime/verb/Reproduce() set category = "Slime" - set desc = "This will make you split into four Slimes. NOTE: this will KILL you, but you will be transferred into one of the babies." + set desc = "This will make you split into four Slimes." if(stat) src << "I must be conscious to do this..." return - if(istype(src, /mob/living/carbon/slime/adult)) + if(is_adult) if(amount_grown >= 10) - //if(input("Are you absolutely sure you want to reproduce? Your current body will cease to be, but your consciousness will be transferred into a produced slime.") in list("Yes","No")=="Yes") if(stat) src << "I must be conscious to do this..." return @@ -210,14 +203,12 @@ var/new_nutrition = round(nutrition * 0.9) var/new_powerlevel = round(powerlevel / 4) for(var/i=1,i<=4,i++) - var/newslime + var/mob/living/carbon/slime/M = new /mob/living/carbon/slime/(loc) if(prob(70)) - newslime = primarytype + M.colour = colour else - newslime = slime_mutation[rand(1,4)] - - var/mob/living/carbon/slime/M = new newslime(loc) - M.nutrition = new_nutrition + M.colour = slime_mutation[rand(1,4)] + if(ckey) M.nutrition = new_nutrition //Player slimes are more robust at spliting. Once an oversight of poor copypasta, now a feature! M.powerlevel = new_powerlevel if(i != 1) step_away(M,src) babies += M @@ -230,8 +221,6 @@ src.mind.transfer_to(new_slime) else new_slime.key = src.key - - new_slime << "You are now a slime!" del(src) else src << "I am not ready to reproduce yet..." diff --git a/code/modules/mob/living/carbon/metroid/subtypes.dm b/code/modules/mob/living/carbon/metroid/subtypes.dm index 2e6b6de0b1e..de98b2df524 100644 --- a/code/modules/mob/living/carbon/metroid/subtypes.dm +++ b/code/modules/mob/living/carbon/metroid/subtypes.dm @@ -1,436 +1,79 @@ - -////////////////Tier 2 - -/mob/living/carbon/slime/purple - colour = "purple" - icon_state = "purple baby slime" - primarytype = /mob/living/carbon/slime/purple - adulttype = /mob/living/carbon/slime/adult/purple - coretype = /obj/item/slime_extract/purple - - -/mob/living/carbon/slime/adult/purple - icon_state = "purple adult slime" - colour = "purple" - primarytype = /mob/living/carbon/slime/purple - adulttype = /mob/living/carbon/slime/adult/purple - coretype = /obj/item/slime_extract/purple - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/darkpurple - slime_mutation[2] = /mob/living/carbon/slime/darkblue - slime_mutation[3] = /mob/living/carbon/slime/green - slime_mutation[4] = /mob/living/carbon/slime/green - -/mob/living/carbon/slime/metal - colour = "metal" - icon_state = "metal baby slime" - primarytype = /mob/living/carbon/slime/metal - adulttype = /mob/living/carbon/slime/adult/metal - coretype = /obj/item/slime_extract/metal - -/mob/living/carbon/slime/adult/metal - icon_state = "metal adult slime" - colour = "metal" - primarytype = /mob/living/carbon/slime/metal - adulttype = /mob/living/carbon/slime/adult/metal - coretype = /obj/item/slime_extract/metal - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/silver - slime_mutation[2] = /mob/living/carbon/slime/yellow - slime_mutation[3] = /mob/living/carbon/slime/gold - slime_mutation[4] = /mob/living/carbon/slime/gold - -/mob/living/carbon/slime/orange - colour = "orange" - icon_state = "orange baby slime" - primarytype = /mob/living/carbon/slime/orange - adulttype = /mob/living/carbon/slime/adult/orange - coretype = /obj/item/slime_extract/orange - -/mob/living/carbon/slime/adult/orange - colour = "orange" - icon_state = "orange adult slime" - primarytype = /mob/living/carbon/slime/orange - adulttype = /mob/living/carbon/slime/adult/orange - coretype = /obj/item/slime_extract/orange - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/red - slime_mutation[2] = /mob/living/carbon/slime/red - slime_mutation[3] = /mob/living/carbon/slime/darkpurple - slime_mutation[4] = /mob/living/carbon/slime/yellow - -/mob/living/carbon/slime/blue - colour = "blue" - icon_state = "blue baby slime" - primarytype = /mob/living/carbon/slime/blue - adulttype = /mob/living/carbon/slime/adult/blue - coretype = /obj/item/slime_extract/blue - -/mob/living/carbon/slime/adult/blue - icon_state = "blue adult slime" - colour = "blue" - primarytype = /mob/living/carbon/slime/blue - adulttype = /mob/living/carbon/slime/adult/blue - coretype = /obj/item/slime_extract/blue - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/darkblue - slime_mutation[2] = /mob/living/carbon/slime/pink - slime_mutation[3] = /mob/living/carbon/slime/pink - slime_mutation[4] = /mob/living/carbon/slime/silver - - -//Tier 3 - -/mob/living/carbon/slime/darkblue - colour = "dark blue" - icon_state = "dark blue baby slime" - primarytype = /mob/living/carbon/slime/darkblue - adulttype = /mob/living/carbon/slime/adult/darkblue - coretype = /obj/item/slime_extract/darkblue - -/mob/living/carbon/slime/adult/darkblue - icon_state = "dark blue adult slime" - colour = "dark blue" - primarytype = /mob/living/carbon/slime/darkblue - adulttype = /mob/living/carbon/slime/adult/darkblue - coretype = /obj/item/slime_extract/darkblue - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/purple - slime_mutation[2] = /mob/living/carbon/slime/cerulean - slime_mutation[3] = /mob/living/carbon/slime/blue - slime_mutation[4] = /mob/living/carbon/slime/cerulean - -/mob/living/carbon/slime/darkpurple - colour = "dark purple" - icon_state = "dark purple baby slime" - primarytype = /mob/living/carbon/slime/darkpurple - adulttype = /mob/living/carbon/slime/adult/darkpurple - coretype = /obj/item/slime_extract/darkpurple - -/mob/living/carbon/slime/adult/darkpurple - icon_state = "dark purple adult slime" - colour = "dark purple" - primarytype = /mob/living/carbon/slime/darkpurple - adulttype = /mob/living/carbon/slime/adult/darkpurple - coretype = /obj/item/slime_extract/darkpurple - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/purple - slime_mutation[2] = /mob/living/carbon/slime/sepia - slime_mutation[3] = /mob/living/carbon/slime/orange - slime_mutation[4] = /mob/living/carbon/slime/sepia - - -/mob/living/carbon/slime/yellow - icon_state = "yellow baby slime" - colour = "yellow" - primarytype = /mob/living/carbon/slime/yellow - adulttype = /mob/living/carbon/slime/adult/yellow - coretype = /obj/item/slime_extract/yellow - -/mob/living/carbon/slime/adult/yellow - icon_state = "yellow adult slime" - colour = "yellow" - primarytype = /mob/living/carbon/slime/yellow - adulttype = /mob/living/carbon/slime/adult/yellow - coretype = /obj/item/slime_extract/yellow - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/metal - slime_mutation[2] = /mob/living/carbon/slime/bluespace - slime_mutation[3] = /mob/living/carbon/slime/orange - slime_mutation[4] = /mob/living/carbon/slime/bluespace - - -/mob/living/carbon/slime/silver - colour = "silver" - icon_state = "silver baby slime" - primarytype = /mob/living/carbon/slime/silver - adulttype = /mob/living/carbon/slime/adult/silver - coretype = /obj/item/slime_extract/silver - -/mob/living/carbon/slime/adult/silver - icon_state = "silver adult slime" - colour = "silver" - primarytype = /mob/living/carbon/slime/silver - adulttype = /mob/living/carbon/slime/adult/silver - coretype = /obj/item/slime_extract/silver - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/metal - slime_mutation[2] = /mob/living/carbon/slime/pyrite - slime_mutation[3] = /mob/living/carbon/slime/blue - slime_mutation[4] = /mob/living/carbon/slime/pyrite - - -/////////////Tier 4 - - -/mob/living/carbon/slime/pink - colour = "pink" - icon_state = "pink baby slime" - primarytype = /mob/living/carbon/slime/pink - adulttype = /mob/living/carbon/slime/adult/pink - coretype = /obj/item/slime_extract/pink - -/mob/living/carbon/slime/adult/pink - icon_state = "pink adult slime" - colour = "pink" - primarytype = /mob/living/carbon/slime/pink - adulttype = /mob/living/carbon/slime/adult/pink - coretype = /obj/item/slime_extract/pink - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/pink - slime_mutation[2] = /mob/living/carbon/slime/pink - slime_mutation[3] = /mob/living/carbon/slime/lightpink - slime_mutation[4] = /mob/living/carbon/slime/lightpink - -/mob/living/carbon/slime/red - colour = "red" - icon_state = "red baby slime" - primarytype = /mob/living/carbon/slime/red - adulttype = /mob/living/carbon/slime/adult/red - coretype = /obj/item/slime_extract/red - -/mob/living/carbon/slime/adult/red - icon_state = "red adult slime" - colour = "red" - primarytype = /mob/living/carbon/slime/red - adulttype = /mob/living/carbon/slime/adult/red - coretype = /obj/item/slime_extract/red - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/red - slime_mutation[2] = /mob/living/carbon/slime/red - slime_mutation[3] = /mob/living/carbon/slime/oil - slime_mutation[4] = /mob/living/carbon/slime/oil - -/mob/living/carbon/slime/gold - colour = "gold" - icon_state = "gold baby slime" - primarytype = /mob/living/carbon/slime/gold - adulttype = /mob/living/carbon/slime/adult/gold - coretype = /obj/item/slime_extract/gold - -/mob/living/carbon/slime/adult/gold - icon_state = "gold adult slime" - colour = "gold" - primarytype = /mob/living/carbon/slime/gold - adulttype = /mob/living/carbon/slime/adult/gold - coretype = /obj/item/slime_extract/gold - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/gold - slime_mutation[2] = /mob/living/carbon/slime/gold - slime_mutation[3] = /mob/living/carbon/slime/adamantine - slime_mutation[4] = /mob/living/carbon/slime/adamantine - -/mob/living/carbon/slime/green - colour = "green" - icon_state = "green baby slime" - primarytype = /mob/living/carbon/slime/green - adulttype = /mob/living/carbon/slime/adult/green - coretype = /obj/item/slime_extract/green - -/mob/living/carbon/slime/adult/green - icon_state = "green adult slime" - colour = "green" - primarytype = /mob/living/carbon/slime/green - adulttype = /mob/living/carbon/slime/adult/green - coretype = /obj/item/slime_extract/green - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/green - slime_mutation[2] = /mob/living/carbon/slime/green - slime_mutation[3] = /mob/living/carbon/slime/black - slime_mutation[4] = /mob/living/carbon/slime/black - -// Tier 5 - -/mob/living/carbon/slime/lightpink - colour = "light pink" - icon_state = "light pink baby slime" - primarytype = /mob/living/carbon/slime/lightpink - adulttype = /mob/living/carbon/slime/adult/lightpink - coretype = /obj/item/slime_extract/lightpink - -/mob/living/carbon/slime/adult/lightpink - icon_state = "light pink adult slime" - colour = "light pink" - primarytype = /mob/living/carbon/slime/lightpink - adulttype = /mob/living/carbon/slime/adult/lightpink - coretype = /obj/item/slime_extract/lightpink - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/lightpink - slime_mutation[2] = /mob/living/carbon/slime/lightpink - slime_mutation[3] = /mob/living/carbon/slime/lightpink - slime_mutation[4] = /mob/living/carbon/slime/lightpink - -/mob/living/carbon/slime/oil - icon_state = "oil baby slime" - colour = "oil" - primarytype = /mob/living/carbon/slime/oil - adulttype = /mob/living/carbon/slime/adult/oil - coretype = /obj/item/slime_extract/oil - -/mob/living/carbon/slime/adult/oil - icon_state = "oil adult slime" - colour = "oil" - primarytype = /mob/living/carbon/slime/oil - adulttype = /mob/living/carbon/slime/adult/oil - coretype = /obj/item/slime_extract/oil - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/oil - slime_mutation[2] = /mob/living/carbon/slime/oil - slime_mutation[3] = /mob/living/carbon/slime/oil - slime_mutation[4] = /mob/living/carbon/slime/oil - -/mob/living/carbon/slime/black - icon_state = "black baby slime" - colour = "black" - primarytype = /mob/living/carbon/slime/black - adulttype = /mob/living/carbon/slime/adult/black - coretype = /obj/item/slime_extract/black - -/mob/living/carbon/slime/adult/black - icon_state = "black adult slime" - colour = "black" - primarytype = /mob/living/carbon/slime/black - adulttype = /mob/living/carbon/slime/adult/black - coretype = /obj/item/slime_extract/black - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/black - slime_mutation[2] = /mob/living/carbon/slime/black - slime_mutation[3] = /mob/living/carbon/slime/black - slime_mutation[4] = /mob/living/carbon/slime/black - -/mob/living/carbon/slime/adamantine - icon_state = "adamantine baby slime" - colour = "adamantine" - primarytype = /mob/living/carbon/slime/adamantine - adulttype = /mob/living/carbon/slime/adult/adamantine - coretype = /obj/item/slime_extract/adamantine - -/mob/living/carbon/slime/adult/adamantine - icon_state = "adamantine adult slime" - colour = "adamantine" - primarytype = /mob/living/carbon/slime/adamantine - adulttype = /mob/living/carbon/slime/adult/adamantine - coretype = /obj/item/slime_extract/adamantine - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/adamantine - slime_mutation[2] = /mob/living/carbon/slime/adamantine - slime_mutation[3] = /mob/living/carbon/slime/adamantine - slime_mutation[4] = /mob/living/carbon/slime/adamantine - -////////// Even in death I still code Tier ////////////// - -/mob/living/carbon/slime/bluespace - icon_state = "bluespace baby slime" - colour = "bluespace" - primarytype = /mob/living/carbon/slime/bluespace - adulttype = /mob/living/carbon/slime/adult/bluespace - coretype = /obj/item/slime_extract/bluespace - -/mob/living/carbon/slime/adult/bluespace - icon_state = "bluespace adult slime" - colour = "bluespace" - primarytype = /mob/living/carbon/slime/bluespace - adulttype = /mob/living/carbon/slime/adult/bluespace - coretype = /obj/item/slime_extract/bluespace - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/bluespace - slime_mutation[2] = /mob/living/carbon/slime/bluespace - slime_mutation[3] = /mob/living/carbon/slime/bluespace - slime_mutation[4] = /mob/living/carbon/slime/bluespace - -/mob/living/carbon/slime/pyrite - icon_state = "pyrite baby slime" - colour = "pyrite" - primarytype = /mob/living/carbon/slime/pyrite - adulttype = /mob/living/carbon/slime/adult/pyrite - coretype = /obj/item/slime_extract/pyrite - -/mob/living/carbon/slime/adult/pyrite - icon_state = "pyrite adult slime" - colour = "pyrite" - primarytype = /mob/living/carbon/slime/pyrite - adulttype = /mob/living/carbon/slime/adult/pyrite - coretype = /obj/item/slime_extract/pyrite - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/pyrite - slime_mutation[2] = /mob/living/carbon/slime/pyrite - slime_mutation[3] = /mob/living/carbon/slime/pyrite - slime_mutation[4] = /mob/living/carbon/slime/pyrite - -/mob/living/carbon/slime/cerulean - icon_state = "cerulean baby slime" - colour = "cerulean" - primarytype = /mob/living/carbon/slime/cerulean - adulttype = /mob/living/carbon/slime/adult/cerulean - coretype = /obj/item/slime_extract/cerulean - -/mob/living/carbon/slime/adult/cerulean - icon_state = "cerulean adult slime" - colour = "cerulean" - primarytype = /mob/living/carbon/slime/cerulean - adulttype = /mob/living/carbon/slime/adult/cerulean - coretype = /obj/item/slime_extract/cerulean - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/cerulean - slime_mutation[2] = /mob/living/carbon/slime/cerulean - slime_mutation[3] = /mob/living/carbon/slime/cerulean - slime_mutation[4] = /mob/living/carbon/slime/cerulean - -/mob/living/carbon/slime/sepia - icon_state = "sepia baby slime" - colour = "sepia" - primarytype = /mob/living/carbon/slime/sepia - adulttype = /mob/living/carbon/slime/adult/sepia - coretype = /obj/item/slime_extract/sepia - -/mob/living/carbon/slime/adult/sepia - icon_state = "sepia adult slime" - colour = "sepia" - primarytype = /mob/living/carbon/slime/sepia - adulttype = /mob/living/carbon/slime/adult/sepia - coretype = /obj/item/slime_extract/sepia - - New() - ..() - slime_mutation[1] = /mob/living/carbon/slime/sepia - slime_mutation[2] = /mob/living/carbon/slime/sepia - slime_mutation[3] = /mob/living/carbon/slime/sepia - slime_mutation[4] = /mob/living/carbon/slime/sepia \ No newline at end of file +proc/mutation_table(var/colour) + var/list/slime_mutation[4] + switch(colour) + //Tier 1 + if("grey") + slime_mutation[1] = "orange" + slime_mutation[2] = "metal" + slime_mutation[3] = "blue" + slime_mutation[4] = "purple" + //Tier 2 + if("purple") + slime_mutation[1] = "dark purple" + slime_mutation[2] = "dark blue" + slime_mutation[3] = "green" + slime_mutation[4] = "green" + if("metal") + slime_mutation[1] = "silver" + slime_mutation[2] = "yellow" + slime_mutation[3] = "gold" + slime_mutation[4] = "gold" + if("yellow") + slime_mutation[1] = "red" + slime_mutation[2] = "red" + slime_mutation[3] = "dark purple" + slime_mutation[4] = "yellow" + if("blue") + slime_mutation[1] = "dark blue" + slime_mutation[2] = "pink" + slime_mutation[3] = "pink" + slime_mutation[4] = "silver" + //Tier 3 + if("dark blue") + slime_mutation[1] = "purple" + slime_mutation[2] = "cerulean" + slime_mutation[3] = "blue" + slime_mutation[4] = "cerulean" + if("dark purple") + slime_mutation[1] = "purple" + slime_mutation[2] = "sepia" + slime_mutation[3] = "orange" + slime_mutation[4] = "sepia" + if("yellow") + slime_mutation[1] = "metal" + slime_mutation[2] = "bluespace" + slime_mutation[3] = "orange" + slime_mutation[4] = "bluespace" + if("silver") + slime_mutation[1] = "metal" + slime_mutation[2] = "pyrite" + slime_mutation[3] = "blue" + slime_mutation[4] = "pyrite" + //Tier 4 + if("pink") + slime_mutation[1] = "pink" + slime_mutation[2] = "pink" + slime_mutation[3] = "light pink" + slime_mutation[4] = "light pink" + if("red") + slime_mutation[1] = "red" + slime_mutation[2] = "red" + slime_mutation[3] = "oil" + slime_mutation[4] = "oil" + if("gold") + slime_mutation[1] = "gold" + slime_mutation[2] = "gold" + slime_mutation[3] = "adamantine" + slime_mutation[4] = "adamantine" + if("green") + slime_mutation[1] = "green" + slime_mutation[2] = "green" + slime_mutation[3] = "black" + slime_mutation[4] = "black" + // Tier 5 + else + slime_mutation[1] = colour + slime_mutation[2] = colour + slime_mutation[3] = colour + slime_mutation[4] = colour + return(slime_mutation) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/monkey/death.dm b/code/modules/mob/living/carbon/monkey/death.dm index 2aa321ffdee..cecda79cfc9 100644 --- a/code/modules/mob/living/carbon/monkey/death.dm +++ b/code/modules/mob/living/carbon/monkey/death.dm @@ -18,6 +18,7 @@ update_canmove() if(blind) blind.layer = 0 - ticker.mode.check_win() + if(ticker && ticker.mode) + ticker.mode.check_win() return ..(gibbed) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index eab96c36b11..57a78df5ecf 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -11,7 +11,7 @@ /mob/living/carbon/monkey/Life() set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (notransform) return ..() diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 8217f0df4a9..6528981fbff 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -273,7 +273,7 @@ var/damage = rand(1, 3) - if(istype(src, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(20, 40) else damage = rand(5, 35) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 86ff0f77d8e..e87fdffc911 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -9,7 +9,6 @@ ///////////////////////////////// /mob/living/carbon/monkey - var/list/overlays_lying[M_TOTAL_LAYERS] var/list/overlays_standing[M_TOTAL_LAYERS] /mob/living/carbon/monkey/regenerate_icons() @@ -21,23 +20,17 @@ update_inv_handcuffed(0) update_fire() update_icons() + update_transform() //Hud Stuff update_hud() return /mob/living/carbon/monkey/update_icons() update_hud() - lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again overlays.Cut() - if(lying) - icon_state = "monkey0" - for(var/image/I in overlays_lying) - overlays += I - else - icon_state = "monkey1" - for(var/image/I in overlays_standing) - overlays += I - + icon_state = "monkey1" + for(var/image/I in overlays_standing) + overlays += I //////// /mob/living/carbon/monkey/update_inv_wear_mask(var/update_icons=1) @@ -45,23 +38,14 @@ wear_mask.screen_loc = ui_monkey_mask if(client && hud_used) client.screen += wear_mask - overlays -= overlays_lying[M_MASK_LAYER] overlays -= overlays_standing[M_MASK_LAYER] - var/image/lying = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "[wear_mask.icon_state]2", "layer" = -M_MASK_LAYER) var/image/standing = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "[wear_mask.icon_state]", "layer" = -M_MASK_LAYER) if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood2") standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood") - overlays_lying[M_MASK_LAYER] = lying overlays_standing[M_MASK_LAYER] = standing - if(src.lying) - overlays += overlays_lying[M_MASK_LAYER] - else - overlays += overlays_standing[M_MASK_LAYER] + overlays += overlays_standing[M_MASK_LAYER] else - overlays -= overlays_lying[M_MASK_LAYER] overlays -= overlays_standing[M_MASK_LAYER] - overlays_lying[M_MASK_LAYER] = null overlays_standing[M_MASK_LAYER] = null if(update_icons) update_icons() @@ -103,18 +87,11 @@ back.screen_loc = ui_monkey_back if(client && hud_used) client.screen += back - overlays -= overlays_lying[M_BACK_LAYER] overlays -= overlays_standing[M_BACK_LAYER] - overlays_lying[M_BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]2", "layer" = -M_BACK_LAYER) overlays_standing[M_BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]", "layer" = -M_BACK_LAYER) - if(src.lying) - overlays += overlays_lying[M_BACK_LAYER] - else - overlays += overlays_standing[M_BACK_LAYER] + overlays += overlays_standing[M_BACK_LAYER] else - overlays -= overlays_lying[M_BACK_LAYER] overlays -= overlays_standing[M_BACK_LAYER] - overlays_lying[M_BACK_LAYER] = null overlays_standing[M_BACK_LAYER] = null if(update_icons) update_icons() @@ -129,23 +106,16 @@ var/obj/screen/inventory/L = hud_used.adding[5] R.overlays += image("icon" = 'icons/mob/screen_gen.dmi', "icon_state" = "markus") L.overlays += image("icon" = 'icons/mob/screen_gen.dmi', "icon_state" = "gabrielle") - overlays -= overlays_lying[M_HANDCUFF_LAYER] overlays -= overlays_standing[M_HANDCUFF_LAYER] - overlays_lying[M_HANDCUFF_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "handcuff2", "layer" = -M_HANDCUFF_LAYER) overlays_standing[M_HANDCUFF_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "handcuff1", "layer" = -M_HANDCUFF_LAYER) - if(src.lying) - overlays += overlays_lying[M_HANDCUFF_LAYER] - else - overlays += overlays_standing[M_HANDCUFF_LAYER] + overlays += overlays_standing[M_HANDCUFF_LAYER] else if(hud_used) var/obj/screen/inventory/R = hud_used.adding[4] var/obj/screen/inventory/L = hud_used.adding[5] R.overlays = null L.overlays = null - overlays -= overlays_lying[M_HANDCUFF_LAYER] overlays -= overlays_standing[M_HANDCUFF_LAYER] - overlays_lying[M_HANDCUFF_LAYER] = null overlays_standing[M_HANDCUFF_LAYER] = null if(update_icons) update_icons() @@ -155,18 +125,12 @@ client.screen |= contents /mob/living/carbon/monkey/update_fire() - overlays -= overlays_lying[M_FIRE_LAYER] overlays -= overlays_standing[M_FIRE_LAYER] if(on_fire) - overlays_lying[M_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Lying", "layer"= -M_FIRE_LAYER) overlays_standing[M_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -M_FIRE_LAYER) - if(src.lying) - overlays += overlays_lying[M_FIRE_LAYER] - else - overlays += overlays_standing[M_FIRE_LAYER] + overlays += overlays_standing[M_FIRE_LAYER] return else - overlays_lying[M_FIRE_LAYER] = null overlays_standing[M_FIRE_LAYER] = null diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm new file mode 100644 index 00000000000..70c25b4b7c7 --- /dev/null +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -0,0 +1,21 @@ +//LOOK G-MA, I'VE JOINED CARBON PROCS THAT ARE IDENTICAL IN ALL CASES INTO ONE PROC, I'M BETTER THAN LIFE() +//I thought about mob/living but silicons and simple_animals don't want this just yet. +//Right now just handles lying down and cloaking, but could handle other cases later. +//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. +/mob/living/carbon/update_transform() + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/final_pixel_y = 0 + var/final_dir = dir + var/changed = 0 + + if(lying != lying_prev) + changed++ + ntransform.TurnTo(lying_prev,lying) + lying_prev = lying //so we don't try to animate until there's been another change. + if(lying != 0) + final_pixel_y = -6 + if(dir & (EAST|WEST)) //Facing east or west + final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass + + if(changed) + animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) \ No newline at end of file diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 46c463b2e1e..1307907b86b 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -9,27 +9,28 @@ standard 0 if fail */ /mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0) - if(!damage || (blocked >= 2)) return 0 + blocked = (100-blocked)/100 + if(!damage || (blocked <= 0)) return 0 switch(damagetype) if(BRUTE) - adjustBruteLoss(damage/(blocked+1)) + adjustBruteLoss(damage * blocked) if(BURN) if(COLD_RESISTANCE in mutations) damage = 0 - adjustFireLoss(damage/(blocked+1)) + adjustFireLoss(damage * blocked) if(TOX) - adjustToxLoss(damage/(blocked+1)) + adjustToxLoss(damage * blocked) if(OXY) - adjustOxyLoss(damage/(blocked+1)) + adjustOxyLoss(damage * blocked) if(CLONE) - adjustCloneLoss(damage/(blocked+1)) + adjustCloneLoss(damage * blocked) if(HALLOSS) - adjustHalLoss(damage/(blocked+1)) + adjustHalLoss(damage * blocked) updatehealth() return 1 /mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/def_zone = null, var/blocked = 0, var/halloss = 0) - if(blocked >= 2) return 0 + if(blocked >= 100) return 0 if(brute) apply_damage(brute, BRUTE, def_zone, blocked) if(burn) apply_damage(burn, BURN, def_zone, blocked) if(tox) apply_damage(tox, TOX, def_zone, blocked) @@ -41,29 +42,30 @@ /mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0) - if(!effect || (blocked >= 2)) return 0 + blocked = (100-blocked)/100 + if(!effect || (blocked <= 0)) return 0 switch(effecttype) if(STUN) - Stun(effect/(blocked+1)) + Stun(effect * blocked) if(WEAKEN) - Weaken(effect/(blocked+1)) + Weaken(effect * blocked) if(PARALYZE) - Paralyse(effect/(blocked+1)) + Paralyse(effect * blocked) if(IRRADIATE) - radiation += max((((effect - (effect*(getarmor(null, "rad")/100))))/(blocked+1)),0)//Rads auto check armor + radiation += max(effect * ((100-run_armor_check(null, "rad", "Your clothes feel warm", "Your clothes feel warm"))/100),0)//Rads auto check armor if(STUTTER) if(status_flags & CANSTUN) // stun is usually associated with stutter - stuttering = max(stuttering,(effect/(blocked+1))) + stuttering = max(stuttering,(effect * blocked)) if(EYE_BLUR) - eye_blurry = max(eye_blurry,(effect/(blocked+1))) + eye_blurry = max(eye_blurry,(effect * blocked)) if(DROWSY) - drowsyness = max(drowsyness,(effect/(blocked+1))) + drowsyness = max(drowsyness,(effect * blocked)) updatehealth() return 1 /mob/living/proc/apply_effects(var/stun = 0, var/weaken = 0, var/paralyze = 0, var/irradiate = 0, var/stutter = 0, var/eyeblur = 0, var/drowsy = 0, var/blocked = 0) - if(blocked >= 2) return 0 + if(blocked >= 100) return 0 if(stun) apply_effect(stun, STUN, blocked) if(weaken) apply_effect(weaken, WEAKEN, blocked) if(paralyze) apply_effect(paralyze, PARALYZE, blocked) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ea9bc56f3f2..f241d3c7a54 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -259,6 +259,7 @@ setOxyLoss(0) setCloneLoss(0) setBrainLoss(0) + setHalLoss(0) SetParalysis(0) SetStunned(0) SetWeakened(0) @@ -275,6 +276,7 @@ heal_overall_damage(1000, 1000) ExtinguishMob() fire_stacks = 0 + suiciding = 0 buckled = initial(src.buckled) if(iscarbon(src)) var/mob/living/carbon/C = src diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 9fc06675a33..096e77023dd 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -1,35 +1,16 @@ - -/* - run_armor_check(a,b) - args - a:def_zone - What part is getting hit, if null will check entire body - b:attack_flag - What type of attack, bullet, laser, energy, melee - - Returns - 0 - no block - 1 - halfblock - 2 - fullblock -*/ /mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = null, soften_text = null) var/armor = getarmor(def_zone, attack_flag) - var/absorb = 0 - if(prob(armor)) - absorb += 1 - if(prob(armor)) - absorb += 1 - if(absorb >= 2) + if(armor >= 100) if(absorb_text) src << "[absorb_text]" else src << "Your armor absorbs the blow!" - return 2 - if(absorb == 1) - if(absorb_text) - show_message("[soften_text]",4) + else if(armor > 0) + if(soften_text) + src << "[soften_text]" else src << "Your armor softens the blow!" - return 1 - return 0 + return armor /mob/living/proc/getarmor(var/def_zone, var/type) @@ -37,41 +18,37 @@ /mob/living/bullet_act(obj/item/projectile/P, def_zone) - var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) - if(C && C.active) - C.attack_self(src)//Should shut it off - update_icons() - src << "Your [C] was disrupted!" - Stun(2) - - var/absorb = run_armor_check(def_zone, P.flag) - if(absorb >= 2) - P.on_hit(src,2) - return 2 + var/armor = run_armor_check(def_zone, P.flag) if(!P.nodamage) - apply_damage((P.damage/(absorb+1)), P.damage_type, def_zone) - P.on_hit(src, absorb, def_zone) - return absorb + apply_damage(P.damage, P.damage_type, def_zone, armor) + return P.on_hit(src, armor, def_zone) /mob/living/hitby(atom/movable/AM)//Standardization and logging -Sieve - if(istype(AM, /obj/)) - var/obj/O = AM + if(istype(AM, /obj/item)) + var/obj/item/I = AM var/zone = ran_zone("chest", 65)//Hits a random part of the body, geared towards the chest var/dtype = BRUTE - if(istype(O,/obj/item/weapon)) - var/obj/item/weapon/W = O + if(istype(I,/obj/item/weapon)) + var/obj/item/weapon/W = I dtype = W.damtype - visible_message("[src] has been hit by [O].", \ - "[src] has been hit by [O].") + if (W.throwhitsound && W.throwforce > 0) + playsound(loc, W.throwhitsound, 30, 1, -1) + else if(W.throwtapsound && W.throwforce == 0) + playsound(loc, W.throwtapsound, 30, 1, -1) + else if(W.hitsound && W.throwforce > 0) + playsound(loc, W.hitsound, 30, 1, -1) + else + playsound(loc, I.throwtapsound, 30, 1, -1) + visible_message("[src] has been hit by [I].", \ + "[src] has been hit by [I].") var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].") - if(armor < 2) - apply_damage(O.throwforce, dtype, zone, armor, O) - if(!O.fingerprintslast) + apply_damage(I.throwforce, dtype, zone, armor, I) + if(!I.fingerprintslast) return - var/client/assailant = directory[ckey(O.fingerprintslast)] + var/client/assailant = directory[ckey(I.fingerprintslast)] if(assailant && assailant.mob && istype(assailant.mob,/mob)) var/mob/M = assailant.mob - add_logs(M, src, "hit", object="[O]") + add_logs(M, src, "hit", object="[I]") //Mobs on Fire /mob/living/proc/IgniteMob() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 26bf2d24c95..9af8ddf1526 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -34,4 +34,4 @@ var/update_slimes = 1 var/on_fire = 0 //The "Are we on fire?" var - var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20 \ No newline at end of file + var/fire_stacks = 0 //Tracks how many stacks of fire we have on, max is usually 20 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 16d00f211d9..fa2c82f287a 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -76,7 +76,7 @@ var/list/ai_list = list() if (istype(L, /datum/ai_laws)) laws = L else - laws = new /datum/ai_laws/asimov + make_laws() verbs += /mob/living/silicon/ai/proc/show_laws_verb diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index 1d11b225226..faab21b72d3 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -68,7 +68,7 @@ /datum/camerachunk/proc/update() - set background = 1 + set background = BACKGROUND_ENABLED var/list/newVisibleTurfs = list() diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm index aab1cef1565..6959150a555 100644 --- a/code/modules/mob/living/silicon/ai/laws.dm +++ b/code/modules/mob/living/silicon/ai/laws.dm @@ -11,7 +11,7 @@ who = world else who = src - who << "Obey these laws:" + who << "Obey these laws:" src.laws_sanity_check() src.laws.show_laws(who) diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index 7e28b4f111f..c3e8db720c1 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -87,7 +87,7 @@ var/const/VOX_DELAY = 600 src << "Wireless interface disabled, unable to interact with announcement PA." return - var/list/words = stringsplit(trim(message), " ") + var/list/words = text2list(trim(message), " ") var/list/incorrect_words = list() if(words.len > 30) diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm index a0984b652be..d31b548787e 100644 --- a/code/modules/mob/living/silicon/laws.dm +++ b/code/modules/mob/living/silicon/laws.dm @@ -3,7 +3,7 @@ /mob/living/silicon/proc/laws_sanity_check() if (!laws) - laws = new /datum/ai_laws/asimov + make_laws() /mob/living/silicon/proc/set_zeroth_law(var/law, var/law_borg) src.laws_sanity_check() @@ -31,4 +31,12 @@ /mob/living/silicon/proc/clear_ion_laws() laws_sanity_check() - laws.clear_ion_laws() \ No newline at end of file + laws.clear_ion_laws() + +/mob/living/silicon/proc/make_laws() + switch(config.default_laws) + if(0) laws = new /datum/ai_laws/default/asimov() + if(1) laws = new /datum/ai_laws/custom() + if(2) + var/datum/ai_laws/lawtype = pick(typesof(/datum/ai_laws/default) - /datum/ai_laws/default) + laws = new lawtype() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index f3ae6c7e5de..0139fd0e33f 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -23,6 +23,8 @@ if(client) client.screen -= O contents -= O + if(module) + O.loc = module //Return item to module so it appears in its contents, so it can be taken out again. if(module_active == O) module_active = null @@ -37,6 +39,36 @@ inv3.icon_state = "inv3" return 1 +/mob/living/silicon/robot/proc/activate_module(var/obj/item/O) + if(!(locate(O) in src.module.modules) && O != src.module.emag) + return + if(activated(O)) + src << "Already activated" + return + if(!module_state_1) + module_state_1 = O + O.layer = 20 + O.screen_loc = inv1.screen_loc + contents += O + if(istype(module_state_1,/obj/item/borg/sight)) + sight_mode |= module_state_1:sight_mode + else if(!module_state_2) + module_state_2 = O + O.layer = 20 + O.screen_loc = inv2.screen_loc + contents += O + if(istype(module_state_2,/obj/item/borg/sight)) + sight_mode |= module_state_2:sight_mode + else if(!module_state_3) + module_state_3 = O + O.layer = 20 + O.screen_loc = inv3.screen_loc + contents += O + if(istype(module_state_3,/obj/item/borg/sight)) + sight_mode |= module_state_3:sight_mode + else + src << "You need to disable a module first!" + /mob/living/silicon/robot/proc/uneq_active() uneq_module(module_active) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index f4212146a5c..a27b540b3d5 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -1,6 +1,6 @@ /mob/living/silicon/robot/Life() set invisibility = 0 - set background = 1 + set background = BACKGROUND_ENABLED if (src.notransform) return @@ -17,8 +17,6 @@ update_items() if (src.stat != DEAD) //still using power use_power() - process_killswitch() - process_locks() update_canmove() handle_fire() @@ -286,26 +284,6 @@ src.module_state_3:screen_loc = ui_inv3 -/mob/living/silicon/robot/proc/process_killswitch() - if(killswitch) - killswitch_time -- - if(killswitch_time <= 0) - if(src.client) - src << "\red Killswitch Activated" - killswitch = 0 - spawn(5) - gib() - -/mob/living/silicon/robot/proc/process_locks() - if(weapon_lock) - uneq_all() - weaponlock_time -- - if(weaponlock_time <= 0) - if(src.client) - src << "\red Weapon Lock Timed Out!" - weapon_lock = 0 - weaponlock_time = 120 - //Robots on fire /mob/living/silicon/robot/handle_fire() if(..()) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 7a234920db6..010c6361fa1 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -15,6 +15,9 @@ var/obj/screen/inv2 = null var/obj/screen/inv3 = null + var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not + var/obj/screen/robot_modules_background + //3 Modules can be activated at any one time. var/obj/item/weapon/robot_module/module = null var/module_active = null @@ -46,10 +49,6 @@ var/datum/effect/effect/system/spark_spread/spark_system//So they can initialize sparks whenever/N var/jeton = 0 - var/killswitch = 0 - var/killswitch_time = 60 - var/weapon_lock = 0 - var/weaponlock_time = 120 var/lawupdate = 1 //Cyborgs will sync their laws with their AI by default var/lockcharge //Boolean of whether the borg is locked down or not var/speed = 0 //Cause sec borgs gotta go fast //No they dont! @@ -60,13 +59,17 @@ -/mob/living/silicon/robot/New(loc,var/syndie = 0) +/mob/living/silicon/robot/New(loc) spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) wires = new(src) + robot_modules_background = new() + robot_modules_background.icon_state = "block" + robot_modules_background.layer = 19 //Objects that appear on screen are on layer 20, UI should be just below it. + ident = rand(1, 999) updatename("Default") updateicon() @@ -76,18 +79,8 @@ cell.maxcharge = 7500 cell.charge = 7500 - if(syndie) - laws = new /datum/ai_laws/antimov() - lawupdate = 0 - scrambledcodes = 1 - cell.maxcharge = 25000 - cell.charge = 25000 - module = new /obj/item/weapon/robot_module/syndicate(src) - hands.icon_state = "standard" - icon_state = "secborg" - modtype = "Synd" - else - laws = new /datum/ai_laws/asimov() + if(lawupdate) + make_laws() connected_ai = select_active_ai_with_fewest_borgs() if(connected_ai) connected_ai.connected_robots += src @@ -396,9 +389,9 @@ var/obj/item/weapon/cable_coil/coil = W adjustFireLoss(-30) updatehealth() - coil.use(1) for(var/mob/O in viewers(user, null)) O.show_message(text("\red [user] has fixed some of the burnt wires on [src]!"), 1) + coil.use(1) else if (istype(W, /obj/item/weapon/crowbar)) // crowbar means open or close the cover if(opened) @@ -475,66 +468,62 @@ user << "\red Access denied." else if(istype(W, /obj/item/weapon/card/emag)) // trying to unlock with an emag card - if(!opened)//Cover is closed - if(locked) - if(prob(90)) - user << "You emag the cover lock." - locked = 0 + if(user != src)//To prevent syndieborgs from emagging themselves + if(!opened)//Cover is closed + if(locked) + if(prob(90)) + user << "You emag the cover lock." + locked = 0 + else + user << "You fail to emag the cover lock." + if(prob(25)) + src << "Hack attempt detected." else - user << "You fail to emag the cover lock." - if(prob(25)) - src << "Hack attempt detected." - else - user << "The cover is already unlocked." - return - - if(opened)//Cover is open - if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice - if(wiresexposed) - user << "You must close the cover first" + user << "The cover is already unlocked." return - else - sleep(6) - if(prob(50)) - emagged = 1 - lawupdate = 0 - connected_ai = null - user << "You emag [src]'s interface." -// message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.") - log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.") - clear_supplied_laws() - clear_inherent_laws() - laws = new /datum/ai_laws/syndicate_override - var/time = time2text(world.realtime,"hh:mm:ss") - lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") - set_zeroth_law("Only [user.real_name] and people he designates as being such are Syndicate Agents.") - src << "\red ALERT: Foreign software detected." - sleep(5) - src << "\red Initiating diagnostics..." - sleep(20) - src << "\red SynBorg v1.7 loaded." - sleep(5) - src << "\red LAW SYNCHRONISATION ERROR" - sleep(5) - src << "\red Would you like to send a report to NanoTraSoft? Y/N" - sleep(10) - src << "\red > N" - sleep(20) - src << "\red ERRORERRORERROR" - src << "Obey these laws:" - laws.show_laws(src) - src << "\red \b ALERT: [user.real_name] is your new master. Obey your new laws and his commands." - if(src.module && istype(src.module, /obj/item/weapon/robot_module/miner)) - for(var/obj/item/weapon/pickaxe/borgdrill/D in src.module.modules) - del(D) - src.module.modules += new /obj/item/weapon/pickaxe/diamonddrill(src.module) - src.module.rebuild() - updateicon() + + if(opened)//Cover is open + if(emagged) return//Prevents the X has hit Y with Z message also you cant emag them twice + if(wiresexposed) + user << "You must close the cover first" + return else - user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface." - if(prob(25)) - src << "Hack attempt detected." - return + sleep(6) + if(prob(50)) + SetEmagged(1) + lawupdate = 0 + connected_ai = null + user << "You emag [src]'s interface." +// message_admins("[key_name_admin(user)] emagged cyborg [key_name_admin(src)]. Laws overridden.") + log_game("[key_name(user)] emagged cyborg [key_name(src)]. Laws overridden.") + clear_supplied_laws() + clear_inherent_laws() + laws = new /datum/ai_laws/syndicate_override + var/time = time2text(world.realtime,"hh:mm:ss") + lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])") + set_zeroth_law("Only [user.real_name] and people he designates as being such are Syndicate Agents.") + src << "\red ALERT: Foreign software detected." + sleep(5) + src << "\red Initiating diagnostics..." + sleep(20) + src << "\red SynBorg v1.7 loaded." + sleep(5) + src << "\red LAW SYNCHRONISATION ERROR" + sleep(5) + src << "\red Would you like to send a report to NanoTraSoft? Y/N" + sleep(10) + src << "\red > N" + sleep(20) + src << "\red ERRORERRORERROR" + src << "Obey these laws:" + laws.show_laws(src) + src << "\red \b ALERT: [user.real_name] is your new master. Obey your new laws and his commands." + updateicon() + else + user << "You fail to [ locked ? "unlock" : "lock"] [src]'s interface." + if(prob(25)) + src << "Hack attempt detected." + return else if(istype(W, /obj/item/borg/upgrade/)) var/obj/item/borg/upgrade/U = W @@ -554,7 +543,8 @@ else - spark_system.start() + if(W.force) + spark_system.start() return ..() /mob/living/silicon/robot/verb/unlock_own_cover() @@ -655,7 +645,7 @@ var/damage = rand(1, 3) - if(istype(src, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(20, 40) else damage = rand(5, 35) @@ -787,6 +777,9 @@ if(icon_state =="Miner" || icon_state =="Miner+j") overlays.Cut() overlays += "eyes-Miner" + if(icon_state =="syndie_bloodhound") + overlays.Cut() + overlays+= "eyes-syndie_bloodhound" else overlays -= "eyes" @@ -804,10 +797,6 @@ /mob/living/silicon/robot/proc/installed_modules() - if(weapon_lock) - src << "\red Weapon lock active, unable to use modules! Count:[weaponlock_time]" - return - if(!module) pick_module() return @@ -871,31 +860,7 @@ if (href_list["act"]) var/obj/item/O = locate(href_list["act"]) - if(!(locate(O) in src.module.modules) && O != src.module.emag) - return - if(activated(O)) - src << "Already activated" - return - if(!module_state_1) - module_state_1 = O - O.layer = 20 - contents += O - if(istype(module_state_1,/obj/item/borg/sight)) - sight_mode |= module_state_1:sight_mode - else if(!module_state_2) - module_state_2 = O - O.layer = 20 - contents += O - if(istype(module_state_2,/obj/item/borg/sight)) - sight_mode |= module_state_2:sight_mode - else if(!module_state_3) - module_state_3 = O - O.layer = 20 - contents += O - if(istype(module_state_3,/obj/item/borg/sight)) - sight_mode |= module_state_3:sight_mode - else - src << "You need to disable a module first!" + activate_module(O) installed_modules() if (href_list["deact"]) @@ -959,6 +924,8 @@ /mob/living/silicon/robot/proc/self_destruct() if(emagged) + if(mmi) + del(mmi) explosion(src.loc,1,2,4,flame_range = 2) else explosion(src.loc,-1,0,2) @@ -1012,7 +979,17 @@ lockcharge = state update_canmove() - +/mob/living/silicon/robot/proc/SetEmagged(var/new_state) + emagged = new_state + if(new_state) + if(src.module) + src.module.on_emag() + else + if (module) + uneq_module(module.emag) + if(hud_used) + hud_used.update_robot_modules_display() //Shows/hides the emag item if the inventory screen is already open. + updateicon() /mob/living/silicon/robot/verb/outputlaws() set category = "Robot Commands" @@ -1062,3 +1039,18 @@ cell.loc = T cell = null del(src) + +/mob/living/silicon/robot/syndicate + icon_state = "syndie_bloodhound" + lawupdate = 0 + scrambledcodes = 1 + modtype = "Synd" + +/mob/living/silicon/robot/syndicate/New(loc) + ..() + cell.maxcharge = 25000 + cell.charge = 25000 + updatename("Syndicate") + radio = new /obj/item/device/radio/borg/syndicate(src) + module = new /obj/item/weapon/robot_module/syndicate(src) + laws = new /datum/ai_laws/syndicate_override() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 69b24f68207..08fb35a8512 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -11,24 +11,37 @@ var/obj/item/borg/upgrade/jetpack = null - emp_act(severity) - if(modules) - for(var/obj/O in modules) - O.emp_act(severity) - if(emag) - emag.emp_act(severity) - ..() - return +/obj/item/weapon/robot_module/emp_act(severity) + if(modules) + for(var/obj/O in modules) + O.emp_act(severity) + if(emag) + emag.emp_act(severity) + ..() + return + +/obj/item/weapon/robot_module/proc/get_usable_modules() + . = modules.Copy() + var/mob/living/silicon/robot/R = loc + if(R.emagged) + . += emag + +/obj/item/weapon/robot_module/proc/get_inactive_modules() + . = list() + var/mob/living/silicon/robot/R = loc + for(var/m in get_usable_modules()) + if((m != R.module_state_1) && (m != R.module_state_2) && (m != R.module_state_3)) + . += m - New() - modules += new /obj/item/device/flashlight(src) - modules += new /obj/item/device/flash(src) - emag = new /obj/item/toy/sword(src) - emag.name = "Placeholder Emag Item" +/obj/item/weapon/robot_module/New() + modules += new /obj/item/device/flashlight(src) + modules += new /obj/item/device/flash(src) + emag = new /obj/item/toy/sword(src) + emag.name = "Placeholder Emag Item" // jetpack = new /obj/item/toy/sword(src) // jetpack.name = "Placeholder Upgrade Item" - return + return /obj/item/weapon/robot_module/proc/respawn_consumable(var/mob/living/silicon/robot/R) @@ -41,6 +54,9 @@ if(O) modules += O +/obj/item/weapon/robot_module/proc/on_emag() + return + /obj/item/weapon/robot_module/standard name = "standard robot module" @@ -193,17 +209,33 @@ New() ..() + var/mob/living/silicon/robot/R = loc modules += new /obj/item/borg/sight/meson(src) emag = new /obj/item/borg/stun(src) modules += new /obj/item/weapon/storage/bag/ore(src) - modules += new /obj/item/weapon/pickaxe/borgdrill(src) + if(R.emagged) + modules += new /obj/item/weapon/pickaxe/diamonddrill(src) + else + modules += new /obj/item/weapon/pickaxe/borgdrill(src) modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) + on_emag() + ..() + for(var/obj/item/weapon/pickaxe/borgdrill/D in modules) + del(D) + modules += new /obj/item/weapon/pickaxe/diamonddrill(src) + rebuild() + /obj/item/weapon/robot_module/syndicate name = "syndicate robot module" New() - modules += new /obj/item/weapon/melee/energy/sword(src) - modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src) - modules += new /obj/item/weapon/card/emag(src) \ No newline at end of file + ..() + modules += new /obj/item/weapon/melee/energy/sword/cyborg(src) + modules += new /obj/item/weapon/gun/energy/crossbow/cyborg(src) + modules += new /obj/item/weapon/card/emag(src) + modules += new /obj/item/weapon/gun/energy/laser/cyborg(src) + modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src) + modules += new /obj/item/weapon/crowbar(src) + emag = null \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 3da3cecb760..c4e1c38c32d 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -9,6 +9,7 @@ name = "giant spider" desc = "Furry and black, it makes you shudder to look at it. This one has deep red eyes." icon_state = "guard" + var/butcher_state = 8 // Icon state for dead spider icons icon_living = "guard" icon_dead = "guard_dead" speak_emote = list("chitters") @@ -16,7 +17,7 @@ speak_chance = 5 turns_per_move = 5 see_in_dark = 10 - meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat + meat_type = /obj/item/weapon/reagent_containers/food/snacks/spidermeat response_help = "pets" response_disarm = "gently pushes aside" response_harm = "hits" @@ -40,6 +41,7 @@ icon_state = "nurse" icon_living = "nurse" icon_dead = "nurse_dead" + meat_type = /obj/item/weapon/reagent_containers/food/snacks/spidereggs maxHealth = 40 health = 40 melee_damage_lower = 5 @@ -87,6 +89,19 @@ stop_automated_movement = 0 walk(src,0) +// Chops off each leg with a 50/50 chance of harvesting one, until finally calling +// default harvest action +/mob/living/simple_animal/hostile/giant_spider/harvest() + if(butcher_state > 0) + butcher_state-- + icon_state = icon_dead + "[butcher_state]" + + if(prob(50)) + new /obj/item/weapon/reagent_containers/food/snacks/spiderleg(src.loc) + return + else + return ..() + /mob/living/simple_animal/hostile/giant_spider/nurse/proc/GiveUp(var/C) spawn(100) if(busy == MOVING_TO_TARGET) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 0e1fdd34f30..295a86a67c4 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -363,7 +363,7 @@ var/damage = rand(1, 3) - if(istype(src, /mob/living/carbon/slime/adult)) + if(M.is_adult) damage = rand(20, 40) else damage = rand(5, 35) @@ -401,12 +401,7 @@ return else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead. if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch)) - new meat_type (get_turf(src)) - if(prob(95)) - del(src) - return - gib() - return + harvest() else if(O.force) var/damage = O.force @@ -487,7 +482,7 @@ /mob/living/simple_animal/revive() health = maxHealth ..() - + /mob/living/simple_animal/proc/make_babies() // <3 <3 <3 if(gender != FEMALE || stat || !scan_ready || !childtype || !species) return @@ -498,7 +493,9 @@ var/mob/living/simple_animal/partner var/children = 0 for(var/mob/M in oview(7, src)) - if(istype(M, childtype)) //Check for children FIRST. + if(M.stat != CONSCIOUS) //Check if it's concious FIRSTER. + continue + else if(istype(M, childtype)) //Check for children FIRST. children++ else if(istype(M, species)) if(M.client) @@ -509,4 +506,13 @@ alone = 0 continue if(alone && partner && children < 3) - new childtype(loc) + new childtype(loc) + +// Harvest an animal's delicious byproducts +/mob/living/simple_animal/proc/harvest() + new meat_type (get_turf(src)) + if(prob(95)) + del(src) + return + gib() + return \ No newline at end of file diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3da10575b65..4dcd046fcaa 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -694,42 +694,48 @@ note dizziness decrements automatically in the mob's Life() proc. return 1 //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. +//Robots and brains have their own version so don't worry about them /mob/proc/update_canmove() - if(buckled) - anchored = 1 + + if(stat || weakened || paralysis || resting || (status_flags & FAKEDEATH)) canmove = 0 - if( istype(buckled,/obj/structure/stool/bed/chair) ) - lying = 0 - if( stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH) ) - drop_r_hand() - drop_l_hand() - else - lying = 1 - else if( stat || weakened || paralysis || resting || sleeping || (status_flags & FAKEDEATH) ) - lying = 1 - canmove = 0 - else if( stunned ) -// lying = 0 + drop_r_hand() //makes mobs drop items in hands when incapacitated + drop_l_hand() + if(!lying) + if(resting) //Presuming that you're resting on a bed, which would look goofy lying the wrong way + lying = 90 + else + lying = pick(90, 270) //180 looks like shit since BYOND inverts rather than turns in that case + else if(stunned) canmove = 0 else lying = 0 canmove = 1 + if(buckled) + anchored = 1 + canmove = 0 + if(istype(buckled, /obj/structure/stool/bed/chair)) + lying = 0 + else + lying = 90 //Everything else faces right. TODO: Allow left-facing beds + drop_r_hand() // so people drop stuff when buckled to a bed + drop_l_hand() + if(lying) density = 0 - drop_r_hand() - drop_l_hand() else density = 1 //Temporarily moved here from the various life() procs //I'm fixing stuff incrementally so this will likely find a better home. //It just makes sense for now. ~Carn - if( update_icon ) //forces a full overlay update + + if(lying != lying_prev) + update_transform() + if(update_icon) //forces a full overlay update update_icon = 0 regenerate_icons() - else if( lying != lying_prev ) - update_icons() return canmove @@ -773,16 +779,19 @@ note dizziness decrements automatically in the mob's Life() proc. /mob/proc/Stun(amount) if(status_flags & CANSTUN) stunned = max(max(stunned,amount),0) //can't go below 0, getting a low amount of stun doesn't lower your current stun + update_canmove() return /mob/proc/SetStunned(amount) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" if(status_flags & CANSTUN) stunned = max(amount,0) + update_canmove() return /mob/proc/AdjustStunned(amount) if(status_flags & CANSTUN) stunned = max(stunned + amount,0) + update_canmove() return /mob/proc/Weaken(amount) @@ -806,38 +815,47 @@ note dizziness decrements automatically in the mob's Life() proc. /mob/proc/Paralyse(amount) if(status_flags & CANPARALYSE) paralysis = max(max(paralysis,amount),0) + update_canmove() return /mob/proc/SetParalysis(amount) if(status_flags & CANPARALYSE) paralysis = max(amount,0) + update_canmove() return /mob/proc/AdjustParalysis(amount) if(status_flags & CANPARALYSE) paralysis = max(paralysis + amount,0) + update_canmove() return /mob/proc/Sleeping(amount) sleeping = max(max(sleeping,amount),0) + update_canmove() return /mob/proc/SetSleeping(amount) sleeping = max(amount,0) + update_canmove() return /mob/proc/AdjustSleeping(amount) sleeping = max(sleeping + amount,0) + update_canmove() return /mob/proc/Resting(amount) resting = max(max(resting,amount),0) + update_canmove() return /mob/proc/SetResting(amount) resting = max(amount,0) + update_canmove() return /mob/proc/AdjustResting(amount) resting = max(resting + amount,0) + update_canmove() return \ No newline at end of file diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index f5c8e414940..4902ca14738 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -166,4 +166,4 @@ var/robot_talk_understand = 0 var/alien_talk_understand = 0 - var/turf/listed_turf = null //the current turf being examined in the stat panel + var/turf/listed_turf = null //the current turf being examined in the stat panel \ No newline at end of file diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index ecbb91f74b6..63d292b63c4 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -35,11 +35,6 @@ return 1 return 0 -/proc/isslimeadult(A) - if(istype(A, /mob/living/carbon/slime/adult)) - return 1 - return 0 - /proc/isrobot(A) if(istype(A, /mob/living/silicon/robot)) return 1 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 2d5e206783b..80e9f8d41ea 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -200,9 +200,9 @@ if("run") if(mob.drowsyness > 0) move_delay += 6 - move_delay += 1 + config.run_speed + move_delay += config.run_speed if("walk") - move_delay += 7 + config.walk_speed + move_delay += config.walk_speed move_delay += mob.movement_delay() if(config.Tickcomp) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index ca2309473a7..ef774523cda 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -32,18 +32,18 @@ datum/preferences preview_icon.Blend(new /icon(S.icon, "[S.icon_state]_s"), ICON_OVERLAY) var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s") - eyes_s.Blend("#[eye_color]", ICON_ADD) + eyes_s.Blend("#[eye_color]", ICON_MULTIPLY) S = hair_styles_list[hair_style] if(S) var/icon/hair_s = new/icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s") - hair_s.Blend("#[hair_color]", ICON_ADD) + hair_s.Blend("#[hair_color]", ICON_MULTIPLY) eyes_s.Blend(hair_s, ICON_OVERLAY) S = facial_hair_styles_list[facial_hair_style] if(S) var/icon/facial_s = new/icon("icon" = S.icon, "icon_state" = "[S.icon_state]_s") - facial_s.Blend("#[facial_hair_color]", ICON_ADD) + facial_s.Blend("#[facial_hair_color]", ICON_MULTIPLY) eyes_s.Blend(facial_s, ICON_OVERLAY) var/icon/clothes_s = null diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 5edc7dcad0c..b8281e65b0e 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -206,7 +206,7 @@ /mob/proc/AIize() if(client) src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // stop the jams for AIs - var/mob/living/silicon/ai/O = new (loc, /datum/ai_laws/asimov,,1)//No MMI but safety is in effect. + var/mob/living/silicon/ai/O = new (loc,,,1)//No MMI but safety is in effect. O.invisibility = 0 O.aiRestorePowerRoutine = 0 @@ -339,7 +339,7 @@ . = new_xeno del(src) -/mob/living/carbon/human/proc/slimeize(adult as num, reproduce as num) +/mob/living/carbon/human/proc/slimeize(reproduce as num) if (notransform) return for(var/obj/item/W in src) @@ -363,10 +363,7 @@ babies += M new_slime = pick(babies) else - if(adult) - new_slime = new /mob/living/carbon/slime/adult(loc) - else - new_slime = new /mob/living/carbon/slime(loc) + new_slime = new /mob/living/carbon/slime(loc) new_slime.a_intent = "harm" new_slime.key = key @@ -457,8 +454,8 @@ if(!MP) return 0 //Sanity, this should never happen. - if(ispath(MP, /mob/living/simple_animal/space_worm)) - return 0 //Unfinished. Very buggy, they seem to just spawn additional space worms everywhere and eating your own tail results in new worms spawning. +// if(ispath(MP, /mob/living/simple_animal/space_worm)) //Goodbye Space Worms 2014 +// return 0 //Unfinished. Very buggy, they seem to just spawn additional space worms everywhere and eating your own tail results in new worms spawning. if(ispath(MP, /mob/living/simple_animal/construct/behemoth)) return 0 //I think this may have been an unfinished WiP or something. These constructs should really have their own class simple_animal/construct/subtype diff --git a/code/modules/mob/update_icons.dm b/code/modules/mob/update_icons.dm index 252439277c5..b0977242ddf 100644 --- a/code/modules/mob/update_icons.dm +++ b/code/modules/mob/update_icons.dm @@ -10,6 +10,9 @@ /mob/proc/update_hud() return +/mob/proc/update_transform() + return + /mob/proc/update_inv_handcuffed() return diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index 8ceb45e6adc..2331debd9be 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -31,11 +31,12 @@ * ui_interact is currently defined for /atom/movable * * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") + * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui * * @return nothing */ -/atom/movable/proc/ui_interact(mob/user, ui_key = "main") +/atom/movable/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) return // Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index c1be3cca799..b7b45060bb7 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -1,8 +1,9 @@ // This is the window/UI manager for Nano UI // There should only ever be one (global) instance of nanomanger /datum/nanomanager - // the list of current open /nanoui UIs + // a list of current open /nanoui UIs, grouped by src_object and ui_key var/open_uis[0] + // a list of current open /nanoui UIs, not grouped, for use in processing var/list/processing_uis = list() /** @@ -13,6 +14,29 @@ /datum/nanomanager/New() return + /** + * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data + * + * @param user /mob The mob who opened/owns the ui + * @param src_object /obj|/mob The obj or mob which the ui belongs to + * @param ui_key string A string key used for the ui + * @param ui /datum/nanoui An existing instance of the ui (can be null) + * @param data list The data to be passed to the ui, if it exists + * + * @return /nanoui Returns the found ui, for null if none exists + */ +/datum/nanomanager/proc/try_update_ui(var/mob/user, src_object, ui_key, var/datum/nanoui/ui, data) + if (isnull(ui)) // no ui has been passed, so we'll search for one + { + ui = get_open_ui(user, src_object, ui_key) + } + if (!isnull(ui)) + // The UI is already open so push the data to it + ui.push_data(data) + return ui + + return null + /** * Get an open /nanoui ui for the current user, src_object and ui_key * @@ -20,7 +44,7 @@ * @param src_object /obj|/mob The obj or mob which the ui belongs to * @param ui_key string A string key used for the ui * - * @return /nanoui Returns the found ui, for null if none exists + * @return /nanoui Returns the found ui, or null if none exists */ /datum/nanomanager/proc/get_open_ui(var/mob/user, src_object, ui_key) var/src_object_key = "\ref[src_object]" @@ -38,7 +62,7 @@ /** * Update all /nanoui uis attached to src_object * - * @param src_object /obj|/mob The obj or mob which the uis belong to + * @param src_object /obj|/mob The obj or mob which the uis are attached to * * @return int The number of uis updated */ @@ -54,6 +78,48 @@ ui.process(1) update_count++ return update_count + + /** + * Update /nanoui uis belonging to user + * + * @param user /mob The mob who owns the uis + * @param src_object /obj|/mob If src_object is provided, only update uis which are attached to src_object (optional) + * @param ui_key string If ui_key is provided, only update uis with a matching ui_key (optional) + * + * @return int The number of uis updated + */ +/datum/nanomanager/proc/update_user_uis(var/mob/user, src_object = null, ui_key = null) + if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) + return 0 // has no open uis + + var/update_count = 0 + for (var/datum/nanoui/ui in user.open_uis) + if ((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) + ui.process(1) + update_count++ + + return update_count + + /** + * Close /nanoui uis belonging to user + * + * @param user /mob The mob who owns the uis + * @param src_object /obj|/mob If src_object is provided, only close uis which are attached to src_object (optional) + * @param ui_key string If ui_key is provided, only close uis with a matching ui_key (optional) + * + * @return int The number of uis closed + */ +/datum/nanomanager/proc/close_user_uis(var/mob/user, src_object = null, ui_key = null) + if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) + return 0 // has no open uis + + var/close_count = 0 + for (var/datum/nanoui/ui in user.open_uis) + if ((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) + ui.close() + close_count++ + + return close_count /** * Add a /nanoui ui to the list of open uis @@ -106,11 +172,7 @@ // /datum/nanomanager/proc/user_logout(var/mob/user) - if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) - return 0 // has no open uis - - for (var/datum/nanoui/ui in user.open_uis) - ui.close(); + return close_user_uis(user) /** * This is called when a player transfers from one mob to another @@ -133,5 +195,6 @@ newMob.open_uis.Add(ui) oldMob.open_uis.Cut() - + + return 1 // success diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index d488e8b5c70..7b684aefb25 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -92,8 +92,8 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/add_common_assets() add_script("libraries.min.js") // The jQuery library + add_script("nano_config.js") // The NanoConfig JS, this is used to store configuration values. add_script("nano_update.js") // The NanoUpdate JS, this is used to receive updates and apply them. - add_script("nano_config.js") // The NanoUpdate JS, this is used to receive updates and apply them. add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all templates add_stylesheet("shared.css") // this CSS sheet is common to all UIs add_stylesheet("icons.css") // this CSS sheet is common to all UIs @@ -256,8 +256,12 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/get_header() var/head_content = "" + + for (var/filename in scripts) + head_content += " " + for (var/filename in stylesheets) - head_content += "" + head_content += " " var/templatel_data[0] for (var/key in templates) @@ -277,35 +281,24 @@ nanoui is used to open and update nano browser uis - [head_content] - - + [head_content] + +
[title ? "
[title]
" : ""]
+
Initiating...
"} /** @@ -314,13 +307,8 @@ nanoui is used to open and update nano browser uis * @return string HTML footer content */ /datum/nanoui/proc/get_footer() - var/scriptsContent = "" - - for (var/filename in scripts) - scriptsContent += "" return {" - [scriptsContent]
@@ -349,7 +337,7 @@ nanoui is used to open and update nano browser uis window_size = "size=[width]x[height];" update_status(0) user << browse(get_html(), "window=[window_id];[window_size][window_options]") - winset(user, "mapwindow.map", "focus=true") // Return keyboard focus to map. + winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map on_close_winset() //onclose(user, window_id) nanomanager.ui_opened(src) @@ -388,6 +376,7 @@ nanoui is used to open and update nano browser uis return // Cannot update UI, no visibility data = add_default_data(data) + //user << list2json(data) // used for debugging user << output(list2params(list(list2json(data))),"[window_id].browser:receiveUpdateData") /** @@ -414,8 +403,12 @@ nanoui is used to open and update nano browser uis * @return nothing */ /datum/nanoui/proc/process(update = 0) + if (!src_object || !user) + close() + return + if (status && (update || is_auto_updating)) - src_object.ui_interact(user, ui_key) // Update the UI (update_status() is called whenever a UI is updated) + src_object.ui_interact(user, ui_key, src) // Update the UI (update_status() is called whenever a UI is updated) else update_status(1) // Not updating UI, so lets check here if status has changed diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 2243c00e0dc..49ad20adbaf 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -503,7 +503,7 @@ return 0 // 0 = User is not a Malf AI -/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main") +/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(!user) return @@ -552,20 +552,19 @@ ) ) ) - - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) + + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) - // the ui does not exist, so we'll create a new one - ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 500, data["siliconUser"] ? 465 : 390) - // When the UI is first opened this is the data it will use - ui.set_initial_data(data) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "apc.tmpl", "[area.name] - APC", 520, data["siliconUser"] ? 465 : 420) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window ui.open() - // Auto update every Master Controller tick + // auto update every Master Controller tick ui.set_auto_update(1) - else - // The UI is already open so push the new data to it - ui.push_data(data) - 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])" diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 8b88102db8e..7aedac1d3be 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -214,12 +214,25 @@ suicide_act(mob/user) if(locate(/obj/structure/stool) in user.loc) - viewers(user) << "\red [user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide." else - viewers(user) << "\red [user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide." + viewers(user) << "[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide." return(OXYLOSS) +/obj/item/weapon/cable_coil/attack(mob/living/carbon/human/H, mob/user) + var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) + if(istype(H)) + if(affecting.status == ORGAN_ROBOTIC) + src.item_heal_robotic(H, user, 0, 30) + src.use(1) + return + else + return ..() + else + return ..() + + /obj/item/weapon/cable_coil/New(loc, length = MAXCOIL, var/param_color = null) ..() src.amount = length diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 5727562ef6d..904b4d77c86 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -113,7 +113,7 @@ /obj/machinery/computer/gravity_control_computer/Topic(href, href_list) - set background = 1 + set background = BACKGROUND_ENABLED if(..()) return diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index 25244da71c3..c9cf44a4578 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -56,14 +56,14 @@ /obj/effect/accelerated_particle/proc/toxmob(var/mob/living/M) - var/radiation = (energy*2) -/* if(istype(M,/mob/living/carbon/human)) +/* var/radiation = (energy*2) //We don't need to do two multiplications and a single goddamn + if(istype(M,/mob/living/carbon/human)) if(M:wear_suit) //TODO: check for radiation protection radiation = round(radiation/2,1) if(istype(M,/mob/living/carbon/monkey)) if(M:wear_suit) //TODO: check for radiation protection radiation = round(radiation/2,1)*/ - M.apply_effect((radiation*3),IRRADIATE,0) + M.apply_effect((energy*6),IRRADIATE,0) M.updatehealth() //M << "\red You feel odd." return diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 65e206a3b41..65c37bb0cd8 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -62,6 +62,7 @@ var/global/list/uneatable = list( switch(severity) if(1.0) if(prob(25)) + investigate_log("has been destroyed by an explosion.","singulo") del(src) return else @@ -189,6 +190,7 @@ var/global/list/uneatable = list( /obj/machinery/singularity/proc/check_energy() if(energy <= 0) + investigate_log("collapsed.","singulo") del(src) return 0 switch(energy)//Some of these numbers might need to be changed up later -Mport @@ -208,7 +210,7 @@ var/global/list/uneatable = list( /obj/machinery/singularity/proc/eat() - set background = 1 + set background = BACKGROUND_ENABLED if(defer_powernet_rebuild != 2) defer_powernet_rebuild = 1 // Let's just make this one loop. @@ -251,6 +253,7 @@ var/global/list/uneatable = list( if(H.mind.assigned_role == "Clown") gain = rand(-300, 300) // HONK + investigate_log(" has consumed [key_name(A)].","singulo") //Oh that's where the clown ended up! spawn() A:gib() sleep(1) @@ -589,7 +592,7 @@ var/global/list/uneatable = list( grav_pull = 0 /obj/machinery/singularity/narsie/wizard/eat() - set background = 1 + set background = BACKGROUND_ENABLED if(defer_powernet_rebuild != 2) defer_powernet_rebuild = 1 for(var/atom/X in orange(consume_range,src)) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index e5f08b47f1e..706d5fbb2a4 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -42,6 +42,11 @@ updateicon() return +/obj/machinery/power/smes/Del() + message_admins("SMES deleted at ([x],[y],[z] - JMP)") + log_game("SMES deleted at ([x],[y],[z])") + investigate_log("deleted at ([x],[y],[z])","singulo") + ..() /obj/machinery/power/smes/proc/updateicon() overlays.Cut() @@ -114,6 +119,7 @@ if(charge < 0.0001) online = 0 // stop output if charge falls to zero + investigate_log("lost power and turned off","singulo") // only update icon if state changed if(last_disp != chargedisplay() || last_chrg != charging || last_onln != online) @@ -219,11 +225,14 @@ chargemode = !chargemode if(!chargemode) charging = 0 + investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo") updateicon() else if( href_list["online"] ) online = !online + investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo") updateicon() + else if( href_list["input"] ) var/i = text2num(href_list["input"]) @@ -250,6 +259,8 @@ chargelevel += d chargelevel = max(0, min(SMESMAXCHARGELEVEL, chargelevel)) // clamp to range + investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo") + src.updateUsrDialog() else if( href_list["output"] ) diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 91c1706d7cf..b30fb220fb2 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -10,6 +10,8 @@ var/caliber = null //Which kind of guns it can be loaded into var/projectile_type = null //The bullet type to create when New() is called var/obj/item/projectile/BB = null //The loaded bullet + var/pellets = 0 //Pellets for spreadshot + var/variance = 0 //Variance for inaccuracy fundamental to the casing /obj/item/ammo_casing/New() @@ -26,12 +28,17 @@ icon_state = "[initial(icon_state)][BB ? "-live" : ""]" desc = "[initial(desc)][BB ? "" : " This one is spent"]" +/obj/item/ammo_casing/proc/newshot() //For energy weapons and shotgun shells. + if (!BB) + BB = new projectile_type(src) + return + //Boxes of ammo /obj/item/ammo_box - name = "ammo box (.357)" - desc = "A box of ammo" + name = "ammo box (null_reference_exception)" + desc = "A box of ammo." icon_state = "357" icon = 'icons/obj/ammo.dmi' flags = CONDUCT @@ -47,6 +54,7 @@ var/max_ammo = 7 var/multiple_sprites = 0 var/caliber + var/multiload = 1 /obj/item/ammo_box/New() @@ -73,15 +81,16 @@ return 1 return 0 -/obj/item/ammo_box/attackby(var/obj/item/A as obj, mob/user as mob) +/obj/item/ammo_box/attackby(var/obj/item/A as obj, mob/user as mob, var/silent = 0) var/num_loaded = 0 if(istype(A, /obj/item/ammo_box)) var/obj/item/ammo_box/AM = A for(var/obj/item/ammo_casing/AC in AM.stored_ammo) - if(give_round(AC)) + var/did_load = give_round(AC) + if(did_load) AM.stored_ammo -= AC num_loaded++ - else + if(!did_load || !multiload) break if(istype(A, /obj/item/ammo_casing)) var/obj/item/ammo_casing/AC = A @@ -90,9 +99,12 @@ AC.loc = src num_loaded++ if(num_loaded) - user << "You load [num_loaded] shell\s into \the [src]!" + if (!silent) + user << "You load [num_loaded] shell\s into \the [src]!" A.update_icon() update_icon() + return num_loaded + return 0 /obj/item/ammo_box/update_icon() switch(multiple_sprites) @@ -100,7 +112,7 @@ icon_state = "[initial(icon_state)]-[stored_ammo.len]" if(2) icon_state = "[initial(icon_state)]-[stored_ammo.len ? "[max_ammo]" : "0"]" - desc = "There are [stored_ammo.len] shell\s left!" + desc = "[initial(desc)] There are [stored_ammo.len] shell\s left!" //Behavior for magazines /obj/item/ammo_box/magazine/proc/ammo_count() diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 70e70c31b1f..71f5319eb1a 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -14,12 +14,6 @@ projectile_type = /obj/item/projectile/bullet/suffocationbullet -/obj/item/ammo_casing/a75 - desc = "A .75 bullet casing." - caliber = "75" - projectile_type = /obj/item/projectile/bullet/gyro - - /obj/item/ammo_casing/a666 desc = "A .666 bullet casing." caliber = "357" @@ -29,7 +23,7 @@ /obj/item/ammo_casing/c38 desc = "A .38 bullet casing." caliber = "38" - projectile_type = /obj/item/projectile/bullet/weakbullet + projectile_type = /obj/item/projectile/bullet/weakbullet2 /obj/item/ammo_casing/c10mm @@ -57,20 +51,21 @@ /obj/item/ammo_casing/shotgun - name = "shotgun shell" - desc = "A 12 gauge shell." - icon_state = "gshell" + name = "shotgun slug" + desc = "A 12 gauge slug." + icon_state = "blshell" caliber = "shotgun" projectile_type = /obj/item/projectile/bullet m_amt = 12500 -/obj/item/ammo_casing/shotgun/blank +/obj/item/ammo_casing/shotgun/buckshot name = "shotgun shell" - desc = "A blank shell." - icon_state = "blshell" - projectile_type = null - m_amt = 250 + desc = "A 12 gauge shell." + icon_state = "gshell" + projectile_type = /obj/item/projectile/bullet/pellet + pellets = 5 + variance = 0.8 /obj/item/ammo_casing/shotgun/beanbag @@ -106,6 +101,24 @@ return /obj/item/ammo_casing/a762 - desc = "A 7.62 bullet casing." + desc = "A 7.62mm bullet casing." caliber = "a762" - projectile_type = /obj/item/projectile/bullet \ No newline at end of file + projectile_type = /obj/item/projectile/bullet + + +/obj/item/ammo_casing/caseless + desc = "A caseless bullet casing." + + +/obj/item/ammo_casing/caseless/fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params, var/distro, var/quiet) + if (..()) + loc = null + return 1 + else + return 0 + + +/obj/item/ammo_casing/caseless/a75 + desc = "A .75 bullet casing." + caliber = "75" + projectile_type = /obj/item/projectile/bullet/gyro diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm new file mode 100644 index 00000000000..b6557e600d0 --- /dev/null +++ b/code/modules/projectiles/ammunition/energy.dm @@ -0,0 +1,106 @@ +/obj/item/ammo_casing/energy + name = "energy weapon lens" + desc = "The part of the gun that makes the laser go pew" + caliber = "energy" + projectile_type = /obj/item/projectile/energy + var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot. + var/select_name = "energy" + var/mod_name = null + var/fire_sound = 'sound/weapons/Laser.ogg' + +/obj/item/ammo_casing/energy/laser + projectile_type = /obj/item/projectile/beam + select_name = "kill" + +/obj/item/ammo_casing/energy/laser/practice + projectile_type = /obj/item/projectile/practice + select_name = "practice" + +/obj/item/ammo_casing/energy/laser/scatter + projectile_type = /obj/item/projectile/beam/scatter + pellets = 5 + variance = 0.8 + select_name = "scatter" + +/obj/item/ammo_casing/energy/laser/heavy + projectile_type = /obj/item/projectile/beam/heavylaser + select_name = "anti-vehicle" + fire_sound = 'sound/weapons/lasercannonfire.ogg' + +/obj/item/ammo_casing/energy/laser/pulse + projectile_type = /obj/item/projectile/beam/pulse + e_cost = 200 + select_name = "DESTROY" + fire_sound = 'sound/weapons/pulse.ogg' + +/obj/item/ammo_casing/energy/laser/bluetag + projectile_type = /obj/item/projectile/bluetag + select_name = "bluetag" + +/obj/item/ammo_casing/energy/laser/redtag + projectile_type = /obj/item/projectile/redtag + select_name = "redtag" + +/obj/item/ammo_casing/energy/bolt + projectile_type = /obj/item/projectile/energy/bolt + select_name = "bolt" + fire_sound = 'sound/weapons/Genhit.ogg' + +/obj/item/ammo_casing/energy/bolt/large + projectile_type = /obj/item/projectile/energy/bolt/large + select_name = "heavy bolt" + +/obj/item/ammo_casing/energy/xray + projectile_type = /obj/item/projectile/beam/xray + e_cost = 50 + fire_sound = 'sound/weapons/laser3.ogg' + +/obj/item/ammo_casing/energy/electrode + projectile_type = /obj/item/projectile/energy/electrode + select_name = "stun" + fire_sound = 'sound/weapons/taser.ogg' + +/obj/item/ammo_casing/energy/electrode/gun + fire_sound = 'sound/weapons/gunshot.ogg' + +/obj/item/ammo_casing/energy/ion + projectile_type = /obj/item/projectile/ion + select_name = "ion" + fire_sound = 'sound/weapons/Laser.ogg' + +/obj/item/ammo_casing/energy/declone + projectile_type = /obj/item/projectile/energy/declone + select_name = "declone" + fire_sound = 'sound/weapons/pulse3.ogg' + +/obj/item/ammo_casing/energy/mindflayer + projectile_type = /obj/item/projectile/beam/mindflayer + select_name = "MINDFUCK" + fire_sound = 'sound/weapons/Laser.ogg' + +/obj/item/ammo_casing/energy/flora + fire_sound = 'sound/effects/stealthoff.ogg' + +/obj/item/ammo_casing/energy/flora/yield + projectile_type = /obj/item/projectile/energy/florayield + select_name = "increase yield" + mod_name = "yield" + +/obj/item/ammo_casing/energy/flora/mut + projectile_type = /obj/item/projectile/energy/floramut + select_name = "induce mutations" + mod_name = "mut" + +/obj/item/ammo_casing/energy/temp + projectile_type = /obj/item/projectile/temp + select_name = "freeze" + e_cost = 250 + fire_sound = 'sound/weapons/pulse3.ogg' + +/obj/item/ammo_casing/energy/temp/hot + projectile_type = /obj/item/projectile/temp/hot + select_name = "bake" + +/obj/item/ammo_casing/energy/meteor + projectile_type = /obj/item/projectile/meteor + select_name = "goddamn meteor" \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 950fbd050e3..f2605d939e2 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -15,7 +15,7 @@ boolets++ return boolets else - return stored_ammo.len + return ..() /obj/item/ammo_box/magazine/internal/cylinder/rus357 name = "russian revolver cylinder" @@ -23,6 +23,7 @@ ammo_type = /obj/item/ammo_casing/a357 caliber = "357" max_ammo = 6 + multiload = 0 /obj/item/ammo_box/magazine/internal/cylinder/rus357/New() stored_ammo += new ammo_type(src) @@ -40,13 +41,15 @@ ammo_type = /obj/item/ammo_casing/shotgun/beanbag caliber = "shotgun" max_ammo = 4 + multiload = 0 /obj/item/ammo_box/magazine/internal/shotcom name = "combat shotgun internal magazine" desc = "Oh god, this shouldn't be here" - ammo_type = /obj/item/ammo_casing/shotgun + ammo_type = /obj/item/ammo_casing/shotgun/buckshot caliber = "shotgun" max_ammo = 8 + multiload = 0 /obj/item/ammo_box/magazine/internal/cylinder/dualshot name = "double-barrel shotgun internal magazine" @@ -54,6 +57,7 @@ ammo_type = /obj/item/ammo_casing/shotgun/beanbag caliber = "shotgun" max_ammo = 2 + multiload = 0 ///////////EXTERNAL MAGAZINES//////////////// /obj/item/ammo_box/magazine/m9mm @@ -131,7 +135,7 @@ /obj/item/ammo_box/magazine/m75 name = "magazine (.75)" icon_state = "75" - ammo_type = /obj/item/ammo_casing/a75 + ammo_type = /obj/item/ammo_casing/caseless/a75 caliber = "75" multiple_sprites = 2 max_ammo = 8 diff --git a/code/modules/projectiles/ammunition/special.dm b/code/modules/projectiles/ammunition/special.dm new file mode 100644 index 00000000000..e530d7c2fca --- /dev/null +++ b/code/modules/projectiles/ammunition/special.dm @@ -0,0 +1,30 @@ +/obj/item/ammo_casing/magic + name = "magic casing" + desc = "I didn't even know magic needed ammo..." + projectile_type = /obj/item/projectile/magic + +/obj/item/ammo_casing/magic/change + projectile_type = /obj/item/projectile/magic/change + +/obj/item/ammo_casing/magic/animate + projectile_type = /obj/item/projectile/magic/animate + +/obj/item/ammo_casing/magic/heal + projectile_type = /obj/item/projectile/magic/resurrection + +/obj/item/ammo_casing/magic/death + projectile_type = /obj/item/projectile/magic/death + +/obj/item/ammo_casing/magic/teleport + projectile_type = /obj/item/projectile/magic/teleport + +/obj/item/ammo_casing/magic/door + projectile_type = /obj/item/projectile/magic/door + +/obj/item/ammo_casing/magic/fireball + projectile_type = /obj/item/projectile/magic/fireball + +/obj/item/ammo_casing/syringegun + name = "syringe gun spring" + desc = "A high-power spring that throws syringes." + projectile_type = null \ No newline at end of file diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm new file mode 100644 index 00000000000..590e9c5177e --- /dev/null +++ b/code/modules/projectiles/firing.dm @@ -0,0 +1,57 @@ +/obj/item/ammo_casing/proc/fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params, var/distro, var/quiet) + distro += variance + for (var/i = max(1, pellets), i > 0, i--) + var/curloc = user.loc + var/targloc = get_turf(target) + ready_proj(target, user, quiet) + if(distro) + targloc = spread(targloc, curloc, distro) + if(!throw_proj(targloc, user, params)) + return 0 + if(i > 1) + newshot() + user.next_move = world.time + 4 + update_icon() + return 1 + +/obj/item/ammo_casing/proc/ready_proj(atom/target as mob|obj|turf, mob/living/user, var/quiet) + if (!BB) + return + BB.original = target + BB.firer = user + BB.def_zone = user.zone_sel.selecting + BB.silenced = quiet + return + +/obj/item/ammo_casing/proc/throw_proj(var/turf/targloc, mob/living/user as mob|obj, params) + var/turf/curloc = user.loc + if (!istype(targloc) || !istype(curloc) || !BB) + return 0 + if(targloc == curloc) //Fire the projectile + user.bullet_act(BB) + del(BB) + return 1 + BB.loc = get_turf(user) + BB.starting = get_turf(user) + BB.current = curloc + BB.yo = targloc.y - curloc.y + BB.xo = targloc.x - curloc.x + + if(params) + var/list/mouse_control = params2list(params) + if(mouse_control["icon-x"]) + BB.p_x = text2num(mouse_control["icon-x"]) + if(mouse_control["icon-y"]) + BB.p_y = text2num(mouse_control["icon-y"]) + + if(BB) + BB.process() + BB = null + return 1 + +/obj/item/ammo_casing/proc/spread(var/turf/target, var/turf/current, var/distro) + var/dx = abs(target.x - current.x) + var/dy = abs(target.y - current.y) + return locate(target.x + round(gaussian(0, distro) * (dy+2)/8, 1), target.y + round(gaussian(0, distro) * (dx+2)/8, 1), target.z) + +// gaussian(0, distro) \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4afd2a7a420..d7309b080e3 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -16,26 +16,32 @@ attack_verb = list("struck", "hit", "bashed") var/fire_sound = "gunshot" - var/obj/item/projectile/in_chamber = null var/silenced = 0 var/recoil = 0 var/clumsy_check = 1 + var/obj/item/ammo_casing/chambered = null - proc/process_chambered() + proc/process_chamber() return 0 proc/special_check(var/mob/M) //Placeholder for any special checks, like detective's revolver. return 1 - proc/prepare_shot(var/obj/item/projectile/proj) //Transfer properties from the gun to the bullet - proj.shot_from = src - proj.silenced = silenced - return - proc/shoot_with_empty_chamber(mob/living/user as mob|obj) user << "*click*" return + proc/shoot_live_shot(mob/living/user as mob|obj) + if(recoil) + spawn() + shake_camera(user, recoil + 1, recoil) + + if(silenced) + playsound(user, fire_sound, 10, 1) + else + playsound(user, fire_sound, 50, 1) + user.visible_message("[user] fires [src]!", "You fire [src]!", "You hear a [istype(src, /obj/item/weapon/gun/energy) ? "laser blast" : "gunshot"]!") + emp_act(severity) for(var/obj/O in contents) O.emp_act(severity) @@ -71,63 +77,16 @@ add_fingerprint(user) - var/turf/curloc = user.loc - var/turf/targloc = get_turf(target) - if (!istype(targloc) || !istype(curloc)) - return - if(!special_check(user)) return - if(!process_chambered()) - shoot_with_empty_chamber(user) - - if(!in_chamber) - return - - in_chamber.firer = user - in_chamber.def_zone = user.zone_sel.selecting - - - if(recoil) - spawn() - shake_camera(user, recoil + 1, recoil) - - if(silenced) - playsound(user, fire_sound, 10, 1) + if(chambered) + if(!chambered.fire(target, user, params, , silenced)) + shoot_with_empty_chamber(user) + else + shoot_live_shot(user) else - playsound(user, fire_sound, 50, 1) - user.visible_message("[user] fires [src]!", "You fire [src]!", "You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") - - prepare_shot(in_chamber) //Set the projectile's properties - - - - if(targloc == curloc) //Fire the projectile - user.bullet_act(in_chamber) - del(in_chamber) - update_icon() - return - in_chamber.original = target - in_chamber.loc = get_turf(user) - in_chamber.starting = get_turf(user) - in_chamber.current = curloc - in_chamber.yo = targloc.y - curloc.y - in_chamber.xo = targloc.x - curloc.x - user.next_move = world.time + 4 - - if(params) - var/list/mouse_control = params2list(params) - if(mouse_control["icon-x"]) - in_chamber.p_x = text2num(mouse_control["icon-x"]) - if(mouse_control["icon-y"]) - in_chamber.p_y = text2num(mouse_control["icon-y"]) - - spawn() - if(in_chamber) - in_chamber.process() - sleep(1) - in_chamber = null - + shoot_with_empty_chamber(user) + process_chamber() update_icon() if(user.hand) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 76aa1482568..bc3f4208b9f 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -2,43 +2,74 @@ icon_state = "energy" name = "energy gun" desc = "A basic energy-based gun." - fire_sound = 'sound/weapons/Taser.ogg' var/obj/item/weapon/cell/power_supply //What type of power cell this uses - var/charge_cost = 100 //How much energy is needed to fire. - var/cell_type = "/obj/item/weapon/cell" - var/projectile_type = "/obj/item/projectile/energy" - var/modifystate - - emp_act(severity) - power_supply.use(round(power_supply.maxcharge / severity)) - update_icon() - ..() - - - New() - ..() - if(cell_type) - power_supply = new cell_type(src) - else - power_supply = new(src) - power_supply.give(power_supply.maxcharge) - return - - - process_chambered() - if(in_chamber) return 1 - if(!power_supply) return 0 - if(!power_supply.use(charge_cost)) return 0 - if(!projectile_type) return 0 - in_chamber = new projectile_type(src) - return 1 - + var/cell_type = /obj/item/weapon/cell + var/modifystate = 0 + var/list/ammo_type = list(/obj/item/ammo_casing/energy) + var/select = 1 //The state of the select fire switch. Determines from the ammo_type list what kind of shot is fired next. +/obj/item/weapon/gun/energy/emp_act(severity) + power_supply.use(round(power_supply.maxcharge / severity)) update_icon() - var/ratio = power_supply.charge / power_supply.maxcharge - ratio = round(ratio, 0.25) * 100 - if(modifystate) - icon_state = "[modifystate][ratio]" - else - icon_state = "[initial(icon_state)][ratio]" \ No newline at end of file + ..() + + +/obj/item/weapon/gun/energy/New() + ..() + if(cell_type) + power_supply = new cell_type(src) + else + power_supply = new(src) + power_supply.give(power_supply.maxcharge) + var/obj/item/ammo_casing/energy/shot + for (var/i = 1, i <= ammo_type.len, i++) + var/shottype = ammo_type[i] + shot = new shottype(src) + ammo_type[i] = shot + shot = ammo_type[select] + fire_sound = shot.fire_sound + update_icon() + return + + +/obj/item/weapon/gun/energy/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, params) + newshot() + ..() + + +/obj/item/weapon/gun/energy/proc/newshot() + if (!ammo_type || !power_supply) return + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + if (!power_supply.use(shot.e_cost)) return + chambered = shot + chambered.newshot() + return + +/obj/item/weapon/gun/energy/process_chamber() + chambered = null + return + +/obj/item/weapon/gun/energy/proc/select_fire(mob/living/user as mob) + select++ + if (select > ammo_type.len) + select = 1 + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + fire_sound = shot.fire_sound + if (shot.select_name) + user << "\red [src] is now set to [shot.select_name]." + update_icon() + return + +/obj/item/weapon/gun/energy/update_icon() + var/ratio = power_supply.charge / power_supply.maxcharge + ratio = Ceiling(ratio*4) * 25 + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + switch(modifystate) + if (0) + icon_state = "[initial(icon_state)][ratio]" + if (1) + icon_state = "[initial(icon_state)][shot.mod_name][ratio]" + if (2) + icon_state = "[initial(icon_state)][shot.select_name][ratio]" + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 9f7c3b8f26b..cfb0e93b773 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -3,16 +3,16 @@ desc = "a basic weapon designed kill with concentrated energy bolts" icon_state = "laser" item_state = "laser" - fire_sound = 'sound/weapons/Laser.ogg' w_class = 3.0 m_amt = 2000 origin_tech = "combat=3;magnets=2" - projectile_type = "/obj/item/projectile/beam" + ammo_type = list(/obj/item/ammo_casing/energy/laser) + /obj/item/weapon/gun/energy/laser/practice name = "practice laser gun" desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice." - projectile_type = "/obj/item/projectile/practice" + ammo_type = list(/obj/item/ammo_casing/energy/laser/practice) clumsy_check = 0 obj/item/weapon/gun/energy/laser/retro @@ -50,36 +50,41 @@ obj/item/weapon/gun/energy/laser/retro -/obj/item/weapon/gun/energy/laser/cyborg/process_chambered() - if(in_chamber) - return 1 +/obj/item/weapon/gun/energy/laser/cyborg/newshot() if(isrobot(src.loc)) var/mob/living/silicon/robot/R = src.loc if(R && R.cell) - R.cell.use(100) - in_chamber = new/obj/item/projectile/beam(src) - return 1 - return 0 + var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot + if(R.cell.use(shot.e_cost)) + chambered = shot + chambered.newshot() + return +/obj/item/weapon/gun/energy/laser/scatter + name = "scatter laser gun" + desc = "A laser gun equipped with a refraction kit that spreads bolts." + ammo_type = list(/obj/item/ammo_casing/energy/laser, /obj/item/ammo_casing/energy/laser/scatter) + + attack_self(mob/living/user as mob) + select_fire(user) + update_icon() + /obj/item/weapon/gun/energy/lasercannon name = "laser cannon" desc = "With the L.A.S.E.R. cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!" icon_state = "lasercannon" - fire_sound = 'sound/weapons/lasercannonfire.ogg' origin_tech = "combat=4;materials=3;powerstorage=3" - projectile_type = "/obj/item/projectile/beam/heavylaser" + ammo_type = list(/obj/item/ammo_casing/energy/laser/heavy) /obj/item/weapon/gun/energy/xray name = "xray laser gun" desc = "A high-power laser gun capable of expelling concentrated xray blasts." icon_state = "xray" - fire_sound = 'sound/weapons/laser3.ogg' origin_tech = "combat=5;materials=3;magnets=2;syndicate=2" - projectile_type = "/obj/item/projectile/beam/xray" - charge_cost = 50 + ammo_type = list(/obj/item/ammo_casing/energy/xray) ////////Laser Tag//////////////////// @@ -88,7 +93,7 @@ obj/item/weapon/gun/energy/laser/retro name = "laser tag gun" icon_state = "bluetag" desc = "Standard issue weapon of the Imperial Guard" - projectile_type = "/obj/item/projectile/bluetag" + ammo_type = list(/obj/item/ammo_casing/energy/laser/bluetag) origin_tech = "combat=1;magnets=2" clumsy_check = 0 var/charge_tick = 0 @@ -125,7 +130,7 @@ obj/item/weapon/gun/energy/laser/retro name = "laser tag gun" icon_state = "redtag" desc = "Standard issue weapon of the Imperial Guard" - projectile_type = "/obj/item/projectile/redtag" + ammo_type = list(/obj/item/ammo_casing/energy/laser/redtag) origin_tech = "combat=1;magnets=2" clumsy_check = 0 var/charge_tick = 0 diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 488376b88f2..9bc774e8095 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -1,38 +1,18 @@ /obj/item/weapon/gun/energy/gun name = "energy gun" desc = "A basic energy-based gun with two settings: Stun and kill." - icon_state = "energystun100" + icon_state = "energy" item_state = null //so the human update icon uses the icon_state instead. - fire_sound = 'sound/weapons/Taser.ogg' - - charge_cost = 100 //How much energy is needed to fire. - projectile_type = "/obj/item/projectile/energy/electrode" + ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) origin_tech = "combat=3;magnets=2" - modifystate = "energystun" - - var/mode = 0 //0 = stun, 1 = kill + modifystate = 2 attack_self(mob/living/user as mob) - switch(mode) - if(0) - mode = 1 - charge_cost = 100 - fire_sound = 'sound/weapons/Laser.ogg' - user << "\red [src.name] is now set to kill." - projectile_type = "/obj/item/projectile/beam" - modifystate = "energykill" - if(1) - mode = 0 - charge_cost = 100 - fire_sound = 'sound/weapons/Taser.ogg' - user << "\red [src.name] is now set to stun." - projectile_type = "/obj/item/projectile/energy/electrode" - modifystate = "energystun" + select_fire(user) update_icon() - /obj/item/weapon/gun/energy/gun/nuclear name = "Advanced Energy Gun" desc = "An energy gun with an experimental miniaturized reactor." @@ -40,6 +20,7 @@ origin_tech = "combat=3;materials=5;powerstorage=3" var/lightfail = 0 var/charge_tick = 0 + modifystate = 0 New() ..() @@ -92,7 +73,7 @@ overlays += "nucgun-whee" return var/ratio = power_supply.charge / power_supply.maxcharge - ratio = round(ratio, 0.25) * 100 + ratio = Ceiling(ratio*4) * 25 overlays += "nucgun-[ratio]" @@ -109,9 +90,9 @@ update_mode() - if (mode == 0) + if (select == 1) overlays += "nucgun-stun" - else if (mode == 1) + else if (select == 2) overlays += "nucgun-kill" diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 74f5a7fb42f..c57d098f37b 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -4,43 +4,21 @@ icon_state = "pulse" item_state = null //so the human update icon uses the icon_state instead. force = 10 - fire_sound = 'sound/weapons/pulse.ogg' - charge_cost = 200 - projectile_type = "/obj/item/projectile/beam/pulse" + ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse, /obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) cell_type = "/obj/item/weapon/cell/super" - var/mode = 2 - attack_self(mob/living/user as mob) - switch(mode) - if(2) - mode = 0 - charge_cost = 100 - fire_sound = 'sound/weapons/Taser.ogg' - user << "\red [src.name] is now set to stun." - projectile_type = "/obj/item/projectile/energy/electrode" - if(0) - mode = 1 - charge_cost = 100 - fire_sound = 'sound/weapons/Laser.ogg' - user << "\red [src.name] is now set to kill." - projectile_type = "/obj/item/projectile/beam" - if(1) - mode = 2 - charge_cost = 200 - fire_sound = 'sound/weapons/pulse.ogg' - user << "\red [src.name] is now set to DESTROY." - projectile_type = "/obj/item/projectile/beam/pulse" - return - +/obj/item/weapon/gun/energy/pulse_rifle/attack_self(mob/living/user as mob) + select_fire(user) /obj/item/weapon/gun/energy/pulse_rifle/destroyer name = "pulse destroyer" desc = "A heavy-duty, pulse-based energy weapon." cell_type = "/obj/item/weapon/cell/infinite" + ammo_type = list(/obj/item/ammo_casing/energy/laser/pulse) - attack_self(mob/living/user as mob) - user << "\red [src.name] has three settings, and they are all DESTROY." +/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob) + user << "\red [src.name] has three settings, and they are all DESTROY." diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 1663bcc1071..241a7145478 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -2,13 +2,11 @@ name = "ion rifle" desc = "A man portable anti-armor weapon designed to disable mechanical threats" icon_state = "ionrifle" - fire_sound = 'sound/weapons/Laser.ogg' origin_tech = "combat=2;magnets=4" w_class = 5 flags = CONDUCT slot_flags = SLOT_BACK - charge_cost = 100 - projectile_type = "/obj/item/projectile/ion" + ammo_type = list(/obj/item/ammo_casing/energy/ion) /obj/item/weapon/gun/energy/ionrifle/emp_act(severity) if(severity <= 2) @@ -21,21 +19,17 @@ name = "biological demolecularisor" desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." icon_state = "decloner" - fire_sound = 'sound/weapons/pulse3.ogg' origin_tech = "combat=5;materials=4;powerstorage=3" - charge_cost = 100 - projectile_type = "/obj/item/projectile/energy/declone" + ammo_type = list(/obj/item/ammo_casing/energy/declone) /obj/item/weapon/gun/energy/floragun name = "floral somatoray" desc = "A tool that discharges controlled radiation which induces mutation in plant cells." - icon_state = "floramut100" + icon_state = "flora" item_state = "obj/item/gun.dmi" - fire_sound = 'sound/effects/stealthoff.ogg' - charge_cost = 100 - projectile_type = "/obj/item/projectile/energy/floramut" + ammo_type = list(/obj/item/ammo_casing/energy/flora/yield, /obj/item/ammo_casing/energy/flora/mut) origin_tech = "materials=2;biotech=3;powerstorage=3" - modifystate = "floramut" + modifystate = 1 var/charge_tick = 0 var/mode = 0 //0 = mutate, 1 = yield boost @@ -59,19 +53,7 @@ return 1 attack_self(mob/living/user as mob) - switch(mode) - if(0) - mode = 1 - charge_cost = 100 - user << "\red The [src.name] is now set to increase yield." - projectile_type = "/obj/item/projectile/energy/florayield" - modifystate = "florayield" - if(1) - mode = 0 - charge_cost = 100 - user << "\red The [src.name] is now set to induce mutations." - projectile_type = "/obj/item/projectile/energy/floramut" - modifystate = "floramut" + select_fire(user) update_icon() return @@ -81,8 +63,7 @@ icon_state = "riotgun" item_state = "c20r" w_class = 4 - projectile_type = "/obj/item/projectile/meteor" - charge_cost = 100 + ammo_type = list(/obj/item/ammo_casing/energy/meteor) cell_type = "/obj/item/weapon/cell/potato" clumsy_check = 0 //Admin spawn only, might as well let clowns use it. var/charge_tick = 0 @@ -121,5 +102,4 @@ name = "mind flayer" desc = "A prototype weapon recovered from the ruins of Research-Station Epsilon." icon_state = "xray" - projectile_type = "/obj/item/projectile/beam/mindflayer" - fire_sound = 'sound/weapons/Laser.ogg' \ No newline at end of file + ammo_type = list(/obj/item/ammo_casing/energy/mindflayer) diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 3efe6ee88b4..4fc9a2a7375 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -4,9 +4,7 @@ desc = "A small, low capacity gun used for non-lethal takedowns." icon_state = "taser" item_state = null //so the human update icon uses the icon_state instead. - fire_sound = 'sound/weapons/Taser.ogg' - charge_cost = 100 - projectile_type = "/obj/item/projectile/energy/electrode" + ammo_type = list(/obj/item/ammo_casing/energy/electrode) cell_type = "/obj/item/weapon/cell/crap" /obj/item/weapon/gun/energy/taser/cyborg @@ -14,8 +12,6 @@ desc = "A small, low capacity gun used for non-lethal takedowns." icon_state = "taser" fire_sound = 'sound/weapons/Taser.ogg' - charge_cost = 100 - projectile_type = "/obj/item/projectile/energy/electrode" cell_type = "/obj/item/weapon/cell/secborg" var/charge_tick = 0 var/recharge_time = 10 //Time it takes for shots to recharge (in ticks) @@ -38,8 +34,9 @@ if(isrobot(src.loc)) var/mob/living/silicon/robot/R = src.loc if(R && R.cell) - R.cell.use(charge_cost) //Take power from the borg... - power_supply.give(charge_cost) //... to recharge the shot + var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot + if(R.cell.use(shot.e_cost)) //Take power from the borg... + power_supply.give(shot.e_cost) //... to recharge the shot update_icon() return 1 @@ -49,10 +46,8 @@ name = "stun revolver" desc = "A high-tech revolver that fires stun cartridges. The stun cartridges can be recharged using a conventional energy weapon recharger." icon_state = "stunrevolver" - fire_sound = 'sound/weapons/Gunshot.ogg' origin_tech = "combat=3;materials=3;powerstorage=2" - charge_cost = 125 - projectile_type = "/obj/item/projectile/energy/electrode" + ammo_type = list(/obj/item/ammo_casing/energy/electrode/gun) cell_type = "/obj/item/weapon/cell" @@ -66,8 +61,7 @@ m_amt = 2000 origin_tech = "combat=2;magnets=2;syndicate=5" silenced = 1 - fire_sound = 'sound/weapons/Genhit.ogg' - projectile_type = "/obj/item/projectile/energy/bolt" + ammo_type = list(/obj/item/ammo_casing/energy/bolt) cell_type = "/obj/item/weapon/cell/crap" var/charge_tick = 0 @@ -94,7 +88,15 @@ update_icon() return - +/obj/item/weapon/gun/energy/crossbow/cyborg/newshot() + if(isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + if(R && R.cell) + var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot + if(R.cell.use(shot.e_cost)) + chambered = shot + chambered.newshot() + return /obj/item/weapon/gun/energy/crossbow/largecrossbow name = "Energy Crossbow" @@ -102,6 +104,3 @@ w_class = 4.0 force = 10 m_amt = 200000 - projectile_type = "/obj/item/projectile/energy/bolt/large" - - diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm index d28ae8b8d8f..33023dab775 100644 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ b/code/modules/projectiles/guns/energy/temperature.dm @@ -1,86 +1,13 @@ /obj/item/weapon/gun/energy/temperature name = "temperature gun" icon_state = "freezegun" - fire_sound = 'sound/weapons/pulse3.ogg' desc = "A gun that changes temperatures." - var/temperature = T20C - var/current_temperature = T20C - charge_cost = 100 origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2" - - projectile_type = "/obj/item/projectile/temp" + ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) cell_type = "/obj/item/weapon/cell/high" - New() - ..() - processing_objects.Add(src) - - - Del() - processing_objects.Remove(src) - ..() - - attack_self(mob/living/user as mob) - user.set_machine(src) - var/temp_text = "" - if(temperature > (T0C - 50)) - temp_text = "[temperature] ([round(temperature-T0C)]°C) ([round(temperature*1.8-459.67)]°F)" - else - temp_text = "[temperature] ([round(temperature-T0C)]°C) ([round(temperature*1.8-459.67)]°F)" - - var/dat = {"Freeze Gun Configuration:
- Current output temperature: [temp_text]
- Target output temperature: - - - [current_temperature] + + +
- "} - - - user << browse(dat, "window=freezegun;size=450x300;can_resize=1;can_close=1;can_minimize=1") - onclose(user, "window=freezegun", src) - - prepare_shot(var/obj/item/projectile/temp/proj) - proj.temperature = temperature //Set the temperature of the beam - if(proj.temperature > 300) //If it's not a freeze beam, don't call it one - proj.name = "heat beam" - ..() - - - Topic(href, href_list) - if (..()) - return - usr.set_machine(src) - src.add_fingerprint(usr) - - - - if(href_list["temp"]) - var/amount = text2num(href_list["temp"]) - if(amount > 0) - src.current_temperature = min(500, src.current_temperature+amount) - else - src.current_temperature = max(0, src.current_temperature+amount) - if (istype(src.loc, /mob)) - attack_self(src.loc) - src.add_fingerprint(usr) - return - - - process() - switch(temperature) - if(0 to 100) charge_cost = 1000 - if(100 to 250) charge_cost = 500 - if(251 to 300) charge_cost = 100 - if(301 to 400) charge_cost = 500 - if(401 to 500) charge_cost = 1000 - - if(current_temperature != temperature) - var/difference = abs(current_temperature - temperature) - if(difference >= 10) - if(current_temperature < temperature) - temperature -= 10 - else - temperature += 10 - else - temperature = current_temperature - return + select_fire(user) + update_icon() + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm index 2786136427e..a4b7da17b15 100644 --- a/code/modules/projectiles/guns/magic.dm +++ b/code/modules/projectiles/guns/magic.dm @@ -7,29 +7,29 @@ fire_sound = 'sound/weapons/emitter.ogg' flags = CONDUCT w_class = 5 - var/projectile_type = "/obj/item/projectile/magic" var/max_charges = 6 var/charges = 0 var/recharge_rate = 4 var/charge_tick = 0 var/can_charge = 1 + var/ammo_type origin_tech = null clumsy_check = 0 -/obj/item/weapon/gun/magic/process_chambered() - if(in_chamber) return 1 - if(!charges) return 0 - if(!projectile_type) return 0 - in_chamber = new projectile_type(src) - return 1 - /obj/item/weapon/gun/magic/afterattack(atom/target as mob, mob/living/user as mob, flag) + newshot() ..() - if(charges && !in_chamber && !flag) charges-- + +/obj/item/weapon/gun/magic/proc/newshot() + if (charges && chambered) + chambered.newshot() + charges-- + return /obj/item/weapon/gun/magic/New() ..() charges = max_charges + chambered = new ammo_type(src) if(can_charge) processing_objects.Add(src) diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index dd38641e184..a07ea02d7c9 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -4,20 +4,20 @@ obj/item/weapon/gun/magic/staff/ obj/item/weapon/gun/magic/staff/change name = "staff of change" desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" - projectile_type = "/obj/item/projectile/magic/change" + ammo_type = /obj/item/ammo_casing/magic/change icon_state = "staffofchange" item_state = "staffofchange" obj/item/weapon/gun/magic/staff/animate name = "staff of animation" desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." - projectile_type = "/obj/item/projectile/magic/animate" + ammo_type = /obj/item/ammo_casing/magic/animate icon_state = "staffofanimation" item_state = "staffofanimation" obj/item/weapon/gun/magic/staff/healing name = "staff of healing" desc = "An artefact that spits bolts of restoring magic which can remove ailments of all kinds and even raise the dead." - projectile_type = "/obj/item/projectile/magic/resurrection" + ammo_type = /obj/item/ammo_casing/magic/heal icon_state = "staffofhealing" item_state = "staffofhealing" diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index bc9dd552202..b25e68c4aa6 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -1,7 +1,7 @@ /obj/item/weapon/gun/magic/wand/ name = "wand of nothing" desc = "It's not just a stick, it's a MAGIC stick!" - projectile_type = "/obj/item/projectile/magic" + ammo_type = /obj/item/ammo_casing/magic icon_state = "nothingwand" item_state = "wand" w_class = 2 @@ -22,6 +22,9 @@ usr << "Has [charges] charge\s remaining." return +/obj/item/weapon/gun/magic/wand/update_icon() + icon_state = "[initial(icon_state)][charges ? "" : "-drained"]" + /obj/item/weapon/gun/magic/wand/attack(atom/target as mob, mob/living/user as mob) if(target == user) return @@ -29,14 +32,13 @@ /obj/item/weapon/gun/magic/wand/afterattack(atom/target as mob, mob/living/user as mob) if(!charges) - user << "The [name] whizzles quietly." + shoot_with_empty_chamber(user) return if(target == user) zap_self(user) else ..() - if(!charges) - icon_state = "[icon_state]-drained" + update_icon() /obj/item/weapon/gun/magic/wand/proc/zap_self(mob/living/user as mob) @@ -47,7 +49,7 @@ /obj/item/weapon/gun/magic/wand/death name = "wand of death" desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail." - projectile_type = "/obj/item/projectile/magic/death" + ammo_type = /obj/item/ammo_casing/magic/death icon_state = "deathwand" max_charges = 3 //3, 2, 2, 1 @@ -62,7 +64,7 @@ /obj/item/weapon/gun/magic/wand/resurrection name = "wand of healing" desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason." - projectile_type = "/obj/item/projectile/magic/resurrection" + ammo_type = /obj/item/ammo_casing/magic/heal icon_state = "revivewand" max_charges = 10 //10, 5, 5, 4 @@ -75,7 +77,7 @@ /obj/item/weapon/gun/magic/wand/polymorph name = "wand of polymorph" desc = "This wand is attuned to chaos and will radically alter the victim's form." - projectile_type = "/obj/item/projectile/magic/change" + ammo_type = /obj/item/ammo_casing/magic/change icon_state = "polywand" max_charges = 10 //10, 5, 5, 4 @@ -87,7 +89,7 @@ /obj/item/weapon/gun/magic/wand/teleport name = "wand of teleportation" desc = "This wand will wrench targets through space and time to move them somewhere else." - projectile_type = "/obj/item/projectile/magic/teleport" + ammo_type = /obj/item/ammo_casing/magic/teleport icon_state = "telewand" max_charges = 10 //10, 5, 5, 4 @@ -102,7 +104,7 @@ /obj/item/weapon/gun/magic/wand/door name = "wand of door creation" desc = "This particular wand can create doors in any wall for the unscrupulous wizard who shuns teleportation magics." - projectile_type = "/obj/item/projectile/magic/door" + ammo_type = /obj/item/ammo_casing/magic/door icon_state = "doorwand" max_charges = 20 //20, 10, 10, 7 @@ -112,7 +114,7 @@ /obj/item/weapon/gun/magic/wand/fireball name = "wand of fireball" desc = "This wand shoots scorching balls of fire that explode into destructive flames." - projectile_type = "/obj/item/projectile/magic/fireball" + ammo_type = /obj/item/ammo_casing/magic/fireball icon_state = "firewand" max_charges = 8 //8, 4, 4, 3 diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index cfe74037548..875bd2622f3 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -6,10 +6,8 @@ w_class = 3.0 m_amt = 1000 - var/ammo_type = /obj/item/ammo_casing/c10mm var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info var/obj/item/ammo_box/magazine/magazine - var/obj/item/ammo_casing/chambered = null // The round (not bullet) that is in the chamber. /obj/item/weapon/gun/projectile/New() ..() @@ -18,28 +16,19 @@ update_icon() return -/obj/item/weapon/gun/projectile/process_chambered(var/eject_casing = 1, var/empty_chamber = 1) +/obj/item/weapon/gun/projectile/process_chamber(var/eject_casing = 1, var/empty_chamber = 1) // if(in_chamber) // return 1 var/obj/item/ammo_casing/AC = chambered //Find chambered round if(isnull(AC) || !istype(AC)) - return 0 + chamber_round() + return if(eject_casing) AC.loc = get_turf(src) //Eject casing onto ground. if(empty_chamber) chambered = null chamber_round() - if(AC.BB) - if(AC.reagents && AC.BB.reagents) - var/datum/reagents/casting_reagents = AC.reagents - casting_reagents.trans_to(AC.BB, casting_reagents.total_volume) //For chemical darts/bullets - casting_reagents.delete() - in_chamber = AC.BB //Load projectile into chamber. - AC.BB.loc = src //Set projectile loc to gun. - AC.BB = null - AC.update_icon() - return 1 - return 0 + return /obj/item/weapon/gun/projectile/proc/chamber_round() if (chambered || !magazine) @@ -47,6 +36,11 @@ else if (magazine.ammo_count()) chambered = magazine.get_round() chambered.loc = src + if(chambered.BB) + if(chambered.reagents && chambered.BB.reagents) + var/datum/reagents/casting_reagents = chambered.reagents + casting_reagents.trans_to(chambered.BB, casting_reagents.total_volume) //For chemical darts/bullets + casting_reagents.delete() return /obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob) @@ -56,7 +50,7 @@ user.remove_from_mob(AM) magazine = AM magazine.loc = src - user << "You load a new magazine into \the [src]!" + user << "You load a new magazine into \the [src]." chamber_round() A.update_icon() update_icon() @@ -71,7 +65,7 @@ user.put_in_hands(magazine) magazine.update_icon() magazine = null - user << "You pull the magazine out of \the [src]!" + user << "You pull the magazine out of \the [src]." else user << "There's no magazine in \the [src]." update_icon() diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 29a23cbfb23..93eba8d5eff 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -4,7 +4,6 @@ icon_state = "saber" //ugly w_class = 3.0 origin_tech = "combat=4;materials=2" - ammo_type = /obj/item/ammo_casing/c9mm mag_type = /obj/item/ammo_box/magazine/msmg9mm var/alarmed = 0 @@ -24,7 +23,6 @@ icon_state = "mini-uzi" w_class = 3.0 origin_tech = "combat=5;materials=2;syndicate=8" - ammo_type = /obj/item/ammo_casing/c45 mag_type = /obj/item/ammo_box/magazine/uzim45 @@ -36,7 +34,6 @@ item_state = "c20r" w_class = 3.0 origin_tech = "combat=5;materials=2;syndicate=8" - ammo_type = /obj/item/ammo_casing/a12mm mag_type = /obj/item/ammo_box/magazine/m12mm fire_sound = 'sound/weapons/Gunshot_smg.ogg' @@ -58,7 +55,7 @@ /obj/item/weapon/gun/projectile/automatic/c20r/update_icon() ..() - icon_state = "c20r[magazine ? "-[round(get_ammo(0),4)]" : ""][chambered ? "" : "-e"]" + icon_state = "c20r[magazine ? "-[Ceiling(get_ammo(0)/4)*4]" : ""][chambered ? "" : "-e"]" return @@ -71,7 +68,6 @@ w_class = 5 slot_flags = 0 origin_tech = "combat=5;materials=1;syndicate=2" - ammo_type = /obj/item/ammo_casing/a762 mag_type = /obj/item/ammo_box/magazine/m762 fire_sound = 'sound/weapons/Gunshot_smg.ogg' var/cover_open = 0 @@ -84,7 +80,7 @@ /obj/item/weapon/gun/projectile/automatic/l6_saw/update_icon() - icon_state = "l6[cover_open ? "open" : "closed"][magazine ? round(magazine.ammo_count() * 2, 25) : "-empty"]" + icon_state = "l6[cover_open ? "open" : "closed"][magazine ? Ceiling(get_ammo(0)/12.5)*25 : "-empty"]" /obj/item/weapon/gun/projectile/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 91908817c54..f75bf8fcc8a 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -5,7 +5,6 @@ w_class = 3.0 silenced = 1 origin_tech = "combat=2;materials=2;syndicate=8" - ammo_type = /obj/item/ammo_casing/c45 mag_type = /obj/item/ammo_box/magazine/sm45 fire_sound = 'sound/weapons/Gunshot_silenced.ogg' @@ -20,7 +19,6 @@ desc = "A robust handgun that uses .50 AE ammo" icon_state = "deagle" force = 14.0 - ammo_type = /obj/item/ammo_casing/a50 mag_type = /obj/item/ammo_box/magazine/m50 @@ -56,14 +54,10 @@ icon_state = "gyropistol" fire_sound = 'sound/effects/Explosion1.ogg' origin_tech = "combat=3" - ammo_type = /obj/item/ammo_casing/a75 mag_type = /obj/item/ammo_box/magazine/m75 -/obj/item/weapon/gun/projectile/automatic/gyropistol/New() +/obj/item/weapon/gun/projectile/automatic/gyropistol/process_chamber(var/eject_casing = 0, var/empty_chamber = 1) ..() - update_icon() - return - /obj/item/weapon/gun/projectile/automatic/gyropistol/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) ..() @@ -85,18 +79,8 @@ w_class = 2 silenced = 0 origin_tech = "combat=2;materials=2;syndicate=2" - ammo_type = /obj/item/ammo_casing/c10mm mag_type = /obj/item/ammo_box/magazine/m10mm -/obj/item/weapon/gun/projectile/automatic/pistol/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag) - ..() - if(magazine) - if(!chambered && !magazine.ammo_count()) - magazine.update_icon() - magazine.loc = get_turf(src.loc) - magazine = null - return - /obj/item/weapon/gun/projectile/automatic/pistol/attack_hand(mob/user as mob) if(loc == user) if(silenced) diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 7cd352a177e..a76b6e19cd9 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -2,7 +2,6 @@ desc = "A classic revolver. Uses 357 ammo" name = "revolver" icon_state = "revolver" - ammo_type = /obj/item/ammo_casing/a357 mag_type = /obj/item/ammo_box/magazine/internal/cylinder /obj/item/weapon/gun/projectile/revolver/chamber_round() @@ -12,27 +11,13 @@ chambered = magazine.get_round(1) return -/obj/item/weapon/gun/projectile/revolver/process_chambered() +/obj/item/weapon/gun/projectile/revolver/process_chamber() return ..(0, 1) /obj/item/weapon/gun/projectile/revolver/attackby(var/obj/item/A as obj, mob/user as mob) - var/num_loaded = 0 - if(istype(A, /obj/item/ammo_box)) - var/obj/item/ammo_box/AM = A - for(var/obj/item/ammo_casing/AC in AM.stored_ammo) - if(magazine.give_round(AC)) - AM.stored_ammo -= AC - num_loaded++ - else - break - if(istype(A, /obj/item/ammo_casing)) - var/obj/item/ammo_casing/AC = A - if(magazine.give_round(AC)) - user.drop_item() - AC.loc = src - num_loaded++ + var/num_loaded = magazine.attackby(A, user, 1) if(num_loaded) - user << "You load [num_loaded] shell\s into \the [src]!" + user << "You load [num_loaded] shell\s into \the [src]." A.update_icon() update_icon() chamber_round() @@ -47,7 +32,7 @@ CB.update_icon() num_unloaded++ if (num_unloaded) - user << "You unload [num_unloaded] shell\s from [src]!" + user << "You unload [num_unloaded] shell\s from [src]." else user << "[src] is empty." @@ -68,7 +53,6 @@ name = "revolver" icon_state = "detective" origin_tech = "combat=2;materials=2" - ammo_type = /obj/item/ammo_casing/c38 mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 @@ -76,7 +60,7 @@ if(magazine.caliber == initial(magazine.caliber)) return 1 if(prob(70 - (magazine.ammo_count() * 10))) //minimum probability of 10, maximum of 60 - M << "[src] blows up in your face." + M << "[src] blows up in your face!" M.take_organ_damage(0,20) M.drop_item() del(src) @@ -177,22 +161,7 @@ spun = 1 /obj/item/weapon/gun/projectile/revolver/russian/attackby(var/obj/item/A as obj, mob/user as mob) - var/num_loaded = 0 - if(istype(A, /obj/item/ammo_box)) - var/obj/item/ammo_box/AM = A - for(var/obj/item/ammo_casing/AC in AM.stored_ammo) - if(get_ammo() <= 1) - if(magazine.give_round(AC)) - AM.stored_ammo -= AC - num_loaded++ - break - if(istype(A, /obj/item/ammo_casing)) - var/obj/item/ammo_casing/AC = A - if(get_ammo() <= 1) - magazine.give_round(AC) - user.drop_item() - AC.loc = src - num_loaded++ + var/num_loaded = ..() if(num_loaded) user.visible_message("[user] loads a single bullet into the revolver and spins the chamber.", "You load a single bullet into the chamber and spin it.") else @@ -222,32 +191,35 @@ user << "[src] is empty." /obj/item/weapon/gun/projectile/revolver/russian/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) + if(!spun && get_ammo(0,0)) + user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") + Spin() ..() spun = 0 /obj/item/weapon/gun/projectile/revolver/russian/attack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj) - - if(!chambered) - user.visible_message("\red *click*", "\red *click*") + if(!spun && get_ammo(0,0)) + user.visible_message("[user] spins the chamber of the revolver.", "You spin the revolver's chamber.") + Spin() return - if(isliving(target) && isliving(user)) - if(target == user) + + if(target == user) + if(!chambered) + user.visible_message("\red *click*", "\red *click*") + return + + if(isliving(target) && isliving(user)) var/obj/item/organ/limb/affecting = user.zone_sel.selecting if(affecting == "head") var/obj/item/ammo_casing/AC = chambered - if(!process_chambered()) + if(AC.fire(user, user)) + user.apply_damage(300, BRUTE, affecting) + playsound(user, fire_sound, 50, 1) + user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a [istype(AC.BB, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") + return + else user.visible_message("\red *click*", "\red *click*") return - if(!in_chamber) - return - var/obj/item/projectile/P = new AC.projectile_type - playsound(user, fire_sound, 50, 1) - user.visible_message("[user.name] fires [src] at \his head!", "You fire [src] at your head!", "You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") - if(!P.nodamage) - user.apply_damage(300, BRUTE, affecting) // You are dead, dead, dead. - return - - spun = 0 ..() diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 241ab5faceb..60f94f2fe63 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -8,33 +8,18 @@ flags = CONDUCT slot_flags = SLOT_BACK origin_tech = "combat=4;materials=2" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag mag_type = /obj/item/ammo_box/magazine/internal/shot var/recentpump = 0 // to prevent spammage var/pumped = 0 /obj/item/weapon/gun/projectile/shotgun/attackby(var/obj/item/A as obj, mob/user as mob) - var/num_loaded = 0 - if(istype(A, /obj/item/ammo_box)) - var/obj/item/ammo_box/AM = A - for(var/obj/item/ammo_casing/AC in AM.stored_ammo) - if(magazine.give_round(AC)) - AM.stored_ammo -= AC - num_loaded++ - else - break - if(istype(A, /obj/item/ammo_casing)) - var/obj/item/ammo_casing/AC = A - if(magazine.give_round(AC)) - user.drop_item() - AC.loc = src - num_loaded++ + var/num_loaded = magazine.attackby(A, user, 1) if(num_loaded) user << "You load [num_loaded] shell\s into \the [src]!" A.update_icon() update_icon() -/obj/item/weapon/gun/projectile/shotgun/process_chambered() +/obj/item/weapon/gun/projectile/shotgun/process_chamber() return ..(0, 0) /obj/item/weapon/gun/projectile/shotgun/chamber_round() @@ -55,8 +40,6 @@ if(chambered)//We have a shell in the chamber chambered.loc = get_turf(src)//Eject casing chambered = null - if(in_chamber) - in_chamber = null if(!magazine.ammo_count()) return 0 var/obj/item/ammo_casing/AC = magazine.get_round() //load next casing. chambered = AC @@ -72,7 +55,6 @@ name = "combat shotgun" icon_state = "cshotgun" origin_tech = "combat=5;materials=2" - ammo_type = /obj/item/ammo_casing/shotgun mag_type = /obj/item/ammo_box/magazine/internal/shotcom w_class = 5 @@ -86,7 +68,6 @@ flags = CONDUCT slot_flags = SLOT_BACK origin_tech = "combat=3;materials=1" - ammo_type = /obj/item/ammo_casing/shotgun/beanbag mag_type = /obj/item/ammo_box/magazine/internal/cylinder/dualshot /obj/item/weapon/gun/projectile/revolver/doublebarrel/attackby(var/obj/item/A as obj, mob/user as mob) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 836c496cd80..9e483255dd7 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -25,7 +25,6 @@ var/yo = null var/xo = null var/current = null - var/obj/shot_from = null // the object which shot us var/atom/original = null // the original target clicked var/turf/starting = null // the projectile's starting turf var/list/permutated = list() // we've passed through these atoms, don't try to hit them again @@ -55,12 +54,10 @@ loc = null proc/on_hit(var/atom/target, var/blocked = 0, var/hit_zone) - if(blocked >= 2) return 0//Full block if(!isliving(target)) return 0 if(isanimal(target)) return 0 var/mob/living/L = target - L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, blocked) - return 1 + return L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, blocked) Bump(atom/A as mob|obj|turf|area) @@ -68,7 +65,7 @@ loc = A.loc return 0 //cannot shoot yourself - if(bumped) return 0 + if(bumped && original) return 0 bumped = 1 if(ismob(A)) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index e753c085559..061660d27cd 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -16,6 +16,11 @@ flag = "laser" eyeblur = 2 +/obj/item/projectile/beam/scatter + name = "laser pellet" + icon_state = "scatterlaser" + damage = 5 + /obj/item/projectile/beam/heavylaser name = "heavy laser" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index d2e0a4063f3..e7154944a22 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -8,11 +8,22 @@ /obj/item/projectile/bullet/weakbullet - damage = 10 + damage = 5 stun = 5 weaken = 5 +/obj/item/projectile/bullet/weakbullet2 + damage = 15 + stun = 5 + weaken = 5 + + +/obj/item/projectile/bullet/pellet + name = "pellet" + damage = 15 + + /obj/item/projectile/bullet/midbullet damage = 20 stun = 5 @@ -56,15 +67,14 @@ damage = 25 -/obj/item/projectile/bullet/incendiary - name = "incendiary bullet" - damage = 20 +/obj/item/projectile/bullet/mechincendiary + damage = 5 -/obj/item/projectile/bullet/incendiary/on_hit(var/atom/target, var/blocked = 0) - if(istype(target, /mob/living/carbon)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(1) - M.IgniteMob() +/obj/item/projectile/bullet/mechincendiary/on_hit(var/atom/target, var/blocked = 0) + if(istype(target, /mob/living/carbon)) + var/mob/living/carbon/M = target + M.adjust_fire_stacks(1) + M.IgniteMob() /obj/item/projectile/bullet/dart @@ -102,3 +112,15 @@ name = "syringe" icon = 'icons/obj/chemical.dmi' icon_state = "syringeproj" + +/obj/item/projectile/bullet/neurotoxin + name = "neurotoxin spit" + icon_state = "neurotoxin" + damage = 5 + damage_type = TOX + weaken = 5 + +/obj/item/projectile/bullet/neurotoxin/on_hit(var/atom/target, var/blocked = 0) + if(isalien(target)) + return 0 + ..() // Execute the rest of the code. diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index a0b96556d4f..2e3e61c032a 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -52,12 +52,8 @@ damage = 20 -/obj/item/projectile/energy/neurotoxin - name = "neuro" - icon_state = "neurotoxin" - damage = 5 - damage_type = TOX - weaken = 5 + + diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index b7d19dea00d..0aee7b729e2 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -141,8 +141,10 @@ proc/wabbajack(mob/living/M) Robot.mmi = new /obj/item/device/mmi(new_mob) Robot.mmi.transfer_identity(M) //Does not transfer key/client. if("slime") - if(prob(50)) new_mob = new /mob/living/carbon/slime/adult(M.loc) - else new_mob = new /mob/living/carbon/slime(M.loc) + new_mob = new /mob/living/carbon/slime(M.loc) + if(prob(50)) + var/mob/living/carbon/slime/Slime = new_mob + Slime.is_adult = 1 new_mob.universal_speak = 1 if("xeno") if(prob(50)) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index c824945bf26..d3b734d6d2d 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -30,7 +30,7 @@ damage_type = BURN nodamage = 1 flag = "energy" - var/temperature = 300 + var/temperature = 100 on_hit(var/atom/target, var/blocked = 0)//These two could likely check temp protection on the mob @@ -39,6 +39,10 @@ M.bodytemperature = temperature return 1 +/obj/item/projectile/temp/hot + name = "heat beam" + temperature = 400 + /obj/item/projectile/meteor name = "meteor" icon = 'icons/obj/meteor.dmi' diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/Chemistry-Colours.dm index 5197fcf9e0b..d2f616a9f8a 100644 --- a/code/modules/reagents/Chemistry-Colours.dm +++ b/code/modules/reagents/Chemistry-Colours.dm @@ -1,35 +1,42 @@ /proc/GetColors(hex) hex = uppertext(hex) - var/hi1 = text2ascii(hex, 2) - var/lo1 = text2ascii(hex, 3) - var/hi2 = text2ascii(hex, 4) - var/lo2 = text2ascii(hex, 5) - var/hi3 = text2ascii(hex, 6) - var/lo3 = text2ascii(hex, 7) + // No alpha set? Default to full alpha. + if(length(hex) == 7) + hex += "FF" + var/hi1 = text2ascii(hex, 2) // R + var/lo1 = text2ascii(hex, 3) // R + var/hi2 = text2ascii(hex, 4) // G + var/lo2 = text2ascii(hex, 5) // G + var/hi3 = text2ascii(hex, 6) // B + var/lo3 = text2ascii(hex, 7) // B + var/hi4 = text2ascii(hex, 8) // A + var/lo4 = text2ascii(hex, 9) // A return list(((hi1>= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48), ((hi2 >= 65 ? hi2-55 : hi2-48)<<4) | (lo2 >= 65 ? lo2-55 : lo2-48), - ((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48)) + ((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48), + ((hi4 >= 65 ? hi4-55 : hi4-48)<<4) | (lo4 >= 65 ? lo4-55 : lo4-48)) /proc/mix_color_from_reagents(var/list/reagent_list) if(!reagent_list || !reagent_list.len) return 0 - var/list/rgbcolor = list(0,0,0) + var/list/rgbcolor = list(0,0,0,0) var/finalcolor = 0 for(var/datum/reagent/re in reagent_list) // natural color mixing bullshit/algorithm if(!finalcolor) rgbcolor = GetColors(re.color) finalcolor = re.color else - var/newcolor[3] - var/prergbcolor[3] + var/newcolor[4] + var/prergbcolor[4] prergbcolor = rgbcolor newcolor = GetColors(re.color) rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2 rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2 rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2 + rgbcolor[4] = (prergbcolor[4]+newcolor[4])/2 - finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3]) + finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3], rgbcolor[4]) return finalcolor // This isn't a perfect color mixing system, the more reagents that are inside, diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 2dae88713c9..7a41e3686ec 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -77,7 +77,7 @@ * * @return nothing */ -/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main") +/obj/machinery/chem_dispenser/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) if(stat & (BROKEN)) return if(user.stat || user.restrained()) return @@ -110,17 +110,16 @@ chemicals.Add(list(list("title" = temp.name, "id" = temp.id, "commands" = list("dispense" = temp.id)))) // list in a list because Byond merges the first list... data["chemicals"] = chemicals - var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) + // update the ui if it exists, returns null if no ui is passed/found + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data) if (!ui) - // the ui does not exist, so we'll create a new one - ui = new(user, src, ui_key, "chem_dispenser.tmpl", "Chem Dispenser 5000", 370, 590) - // When the UI is first opened this is the data it will use + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "chem_dispenser.tmpl", "Chem Dispenser 5000", 390, 610) + // when the ui is first opened this is the data it will use ui.set_initial_data(data) + // open the new ui window ui.open() - else - // The UI is already open so push the new data to it - ui.push_data(data) - return /obj/machinery/chem_dispenser/Topic(href, href_list) if(stat & (BROKEN)) @@ -777,6 +776,7 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) /obj/item/toy/crayon/green = list("greencrayonpowder" = 10), /obj/item/toy/crayon/blue = list("bluecrayonpowder" = 10), /obj/item/toy/crayon/purple = list("purplecrayonpowder" = 10), + /obj/item/toy/crayon/mime = list("invisiblecrayonpowder" = 50), //Blender Stuff /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), @@ -785,6 +785,12 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) /obj/item/weapon/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), /obj/item/weapon/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), + //Grinder stuff, but only if dry + /obj/item/weapon/reagent_containers/food/snacks/grown/coffee_arabica = list("coffeepowder" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/coffee_robusta = list("coffeepowder" = 0, "hyperzine" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/tea_aspera = list("teapowder" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/tea_astra = list("teapowder" = 0, "kelotane" = 0), + //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! @@ -807,6 +813,14 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) /obj/item/weapon/reagent_containers/food/snacks/grown/poisonberries = list("poisonberryjuice" = 0), ) + var/list/dried_items = list( + + //Grinder stuff, but only if dry + /obj/item/weapon/reagent_containers/food/snacks/grown/coffee_arabica = list("coffeepowder" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/coffee_robusta = list("coffeepowder" = 0, "hyperzine" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/tea_aspera = list("teapowder" = 0), + /obj/item/weapon/reagent_containers/food/snacks/grown/tea_astra = list("teapowder" = 0, "kelotane" = 0), + ) var/list/holdingitems = list() @@ -837,6 +851,13 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) src.updateUsrDialog() return 0 + if(is_type_in_list(O, dried_items)) + if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) + var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O + if(!G.dry) + user << "You must dry that first!" + return 1 + if(holdingitems && holdingitems.len >= limit) usr << "The machine cannot hold anymore items." return 1 diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index a1a46dca16b..36b9c7b4777 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -209,7 +209,7 @@ datum id = "water" description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen." reagent_state = LIQUID - color = "#0064C8" // rgb: 0, 100, 200 + color = "#AAAAAA77" // rgb: 170, 170, 170, 77 (alpha) reaction_turf(var/turf/simulated/T, var/volume) if (!istype(T)) return @@ -1291,7 +1291,7 @@ datum id = "plasma" description = "Plasma in its liquid form." reagent_state = LIQUID - color = "#E71B00" // rgb: 231, 27, 0 + color = "#DB2D08" // rgb: 219, 45, 8 toxpwr = 3 on_mob_life(var/mob/living/M as mob) @@ -1640,6 +1640,22 @@ datum toxpwr = 2 meltprob = 30 + toxin/coffeepowder + name = "Coffee Grounds" + id = "coffeepowder" + description = "Finely ground coffee beans, used to make coffee." + reagent_state = SOLID + color = "#5B2E0D" // rgb: 91, 46, 13 + toxpwr = 0.5 + + toxin/teapowder + name = "Ground Tea Leaves" + id = "teapowder" + description = "Finely shredded tea leaves, used for making tea." + reagent_state = SOLID + color = "#7F8400" // rgb: 127, 132, 0 + toxpwr = 0.5 + /////////////////////////Coloured Crayon Powder//////////////////////////// //For colouring in /proc/mix_color_from_reagents @@ -1659,52 +1675,42 @@ datum name = "Red Crayon Powder" id = "redcrayonpowder" colorname = "red" - color = "#DA0000" // red - New() - ..() crayonpowder/orange name = "Orange Crayon Powder" id = "orangecrayonpowder" colorname = "orange" color = "#FF9300" // orange - New() - ..() - crayonpowder/yellow name = "Yellow Crayon Powder" id = "yellowcrayonpowder" colorname = "yellow" color = "#FFF200" // yellow - New() - ..() - crayonpowder/green name = "Green Crayon Powder" id = "greencrayonpowder" colorname = "green" color = "#A8E61D" // green - New() - ..() - crayonpowder/blue name = "Blue Crayon Powder" id = "bluecrayonpowder" colorname = "blue" color = "#00B7EF" // blue - New() - ..() crayonpowder/purple name = "Purple Crayon Powder" id = "purplecrayonpowder" colorname = "purple" color = "#DA00FF" // purple - New() - ..() + + crayonpowder/invisible + name = "Invisible Crayon Powder" + id = "invisiblecrayonpowder" + colorname = "invisible" + color = "#FFFFFF00" // white + no alpha /////////////////////////Food Reagents//////////////////////////// diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 4e55436b7fc..ae17574aeaa 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1594,6 +1594,20 @@ datum required_reagents = list("water" = 5, "coco" = 1) result_amount = 5 + coffee + name = "Coffee" + id = "coffee" + result = "coffee" + required_reagents = list("coffeepowder" = 1, "water" = 5) + result_amount = 5 + + tea + name = "Tea" + id = "tea" + result = "tea" + required_reagents = list("teapowder" = 1, "water" = 5) + result_amount = 5 + soysauce name = "Soy Sauce" id = "soysauce" @@ -2145,5 +2159,5 @@ datum name = "Thirteen Loko" id = "thirteenloko" result = "thirteenloko" - required_reagents = list("vodka" = 1, "coffee" = 1, "orangejuice" = 1) + required_reagents = list("vodka" = 1, "coffee" = 1, "limejuice" = 1) result_amount = 3 diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index e6a36f1cf5e..a47cf704f81 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -10,6 +10,7 @@ var/slices_num var/eatverb var/wrapped = 0 + var/dried_type = null //Placeholder for effect that trigger on eating that aren't tied to reagents. @@ -570,6 +571,26 @@ reagents.add_reagent("nutriment", 3) src.bitesize = 6 +/obj/item/weapon/reagent_containers/food/snacks/spidermeat + name = "spider meat" + desc = "A slab of spider meat." + icon_state = "spidermeat" + New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("toxin", 3) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/spiderleg + name = "spider leg" + desc = "A still twitching leg of a giant spider... you don't really want to eat this, do you?" + icon_state = "spiderleg" + New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("toxin", 2) + bitesize = 2 + /obj/item/weapon/reagent_containers/food/snacks/faggot name = "faggot" desc = "A great meal all round. Not a cord of wood." @@ -1808,6 +1829,28 @@ trash = /obj/item/trash/plate bitesize = 2 +/obj/item/weapon/reagent_containers/food/snacks/sliceable/spidermeatbread + name = "spider meat loaf" + desc = "Reassuringly green meatloaf made from spider meat." + icon_state = "spidermeatbread" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice + slices_num = 5 + New() + ..() + reagents.add_reagent("nutriment", 30) + reagents.add_reagent("toxin", 15) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spidermeatbreadslice + name = "spider meat bread slice" + desc = "A slice of meatloaf made from an animal that most likely still wants you dead." + icon_state = "xenobreadslice" + trash = /obj/item/trash/plate + bitesize = 2 + New() + ..() + reagents.add_reagent("toxin", 2) + /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread name = "banana-nut bread" desc = "A heavenly and filling treat." @@ -2423,3 +2466,46 @@ reagents.add_reagent("nutriment", 2) reagents.add_reagent("sugar", 5) bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg + name = "boiled spider leg" + desc = "A giant spider's leg that's still twitching after being cooked. Gross!" + icon_state = "spiderlegcooked" + trash = /obj/item/trash/plate + New() + ..() + reagents.add_reagent("nutriment", 3) + reagents.add_reagent("toxin", 2) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/spidereggs + name = "spider eggs" + desc = "A cluster of juicy spider eggs. A great side dish for when you care not for your health." + icon_state = "spidereggs" + New() + ..() + reagents.add_reagent("nutriment", 2) + reagents.add_reagent("toxin", 3) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spidereggsham + name = "green eggs and ham" + desc = "Would you eat them on a train? Would you eat them on a plane? Would you eat them on a state of the art corporate deathtrap floating through space?" + icon_state = "spidereggsham" + trash = /obj/item/trash/plate + New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("toxin", 3) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/sashimi + name = "carp sashimi" + desc = "Celebrate surviving attack from hostile alien lifeforms by hospitalising yourself." + icon_state = "sashimi" + New() + ..() + reagents.add_reagent("nutriment", 6) + reagents.add_reagent("toxin", 5) + bitesize = 3 diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm index 406553bed6d..3fc9aa535a2 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm @@ -2,6 +2,7 @@ name = "meat" desc = "A slab of meat" icon_state = "meat" + dried_type = /obj/item/weapon/reagent_containers/food/snacks/sosjerky health = 180 New() ..() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index a70af0898b9..673e08aefaa 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -136,7 +136,7 @@ if(80 to 90) filling.icon_state = "[icon_state]80" if(91 to INFINITY) filling.icon_state = "[icon_state]100" - filling.icon += mix_color_from_reagents(reagents.reagent_list) + filling.color = mix_color_from_reagents(reagents.reagent_list) overlays += filling /obj/item/weapon/reagent_containers/glass/beaker/large diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 57d77408756..4e816b54cc3 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -43,7 +43,7 @@ var/obj/effect/decal/chempuff/D = new/obj/effect/decal/chempuff(get_turf(src)) D.create_reagents(amount_per_transfer_from_this) reagents.trans_to(D, amount_per_transfer_from_this, 1/3) - D.icon += mix_color_from_reagents(D.reagents.reagent_list) + D.color = mix_color_from_reagents(D.reagents.reagent_list) spawn(0) for(var/i=0, i<3, i++) @@ -181,7 +181,7 @@ D.create_reagents(amount_per_transfer_from_this) src.reagents.trans_to(D, amount_per_transfer_from_this) - D.icon += mix_color_from_reagents(D.reagents.reagent_list) + D.color = mix_color_from_reagents(D.reagents.reagent_list) Sprays[i] = D diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 3e78f33fbca..a640d4ef451 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -190,7 +190,7 @@ if(10) filling.icon_state = "syringe10" if(15) filling.icon_state = "syringe15" - filling.icon += mix_color_from_reagents(reagents.reagent_list) + filling.color = mix_color_from_reagents(reagents.reagent_list) overlays += filling diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index af020c4b2c3..473e77e778a 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -1,5 +1,3 @@ - - /obj/structure/reagent_dispensers name = "Dispenser" desc = "..." @@ -12,62 +10,53 @@ var/amount_per_transfer_from_this = 10 var/possible_transfer_amounts = list(10,25,50,100) - attackby(obj/item/weapon/W as obj, mob/user as mob) - return - - New() - create_reagents(1000) - if (!possible_transfer_amounts) - src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT - ..() - - examine() - set src in view() - ..() - if (!(usr in view(2)) && usr!=src.loc) return - usr << "\blue It contains:" - if(reagents && reagents.reagent_list.len) - for(var/datum/reagent/R in reagents.reagent_list) - usr << "\blue [R.volume] units of [R.name]" - else - usr << "\blue Nothing." - - verb/set_APTFT() //set amount_per_transfer_from_this - set name = "Set transfer amount" - set category = "Object" - set src in view(1) - var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts - if (N) - amount_per_transfer_from_this = N - - ex_act(severity) - switch(severity) - if(1.0) +/obj/structure/reagent_dispensers/ex_act(severity) + switch(severity) + if(1.0) + del(src) + return + if(2.0) + if (prob(50)) del(src) return - if(2.0) - if (prob(50)) - new /obj/effect/effect/water(src.loc) - del(src) - return - if(3.0) - if (prob(5)) - new /obj/effect/effect/water(src.loc) - del(src) - return - else - return - - blob_act() - if(prob(50)) - new /obj/effect/effect/water(src.loc) - del(src) - + if(3.0) + if (prob(5)) + del(src) + return + else + return +/obj/structure/reagent_dispensers/blob_act() + if(prob(50)) + del(src) +/obj/structure/reagent_dispensers/attackby(obj/item/weapon/W as obj, mob/user as mob) + return +/obj/structure/reagent_dispensers/New() + create_reagents(1000) + if (!possible_transfer_amounts) + src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT + ..() +/obj/structure/reagent_dispensers/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\blue It contains:" + if(reagents && reagents.reagent_list.len) + for(var/datum/reagent/R in reagents.reagent_list) + usr << "\blue [R.volume] units of [R.name]" + else + usr << "\blue Nothing." +/obj/structure/reagent_dispensers/verb/set_APTFT() //set amount_per_transfer_from_this + set name = "Set transfer amount" + set category = "Object" + set src in view(1) + var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts + if (N) + amount_per_transfer_from_this = N //Dispensers /obj/structure/reagent_dispensers/watertank @@ -80,6 +69,29 @@ ..() reagents.add_reagent("water",1000) +/obj/structure/reagent_dispensers/watertank/ex_act(severity) + switch(severity) + if(1.0) + del(src) + return + if(2.0) + if (prob(50)) + new /obj/effect/effect/water(src.loc) + del(src) + return + if(3.0) + if (prob(5)) + new /obj/effect/effect/water(src.loc) + del(src) + return + else + return + +/obj/structure/reagent_dispensers/watertank/blob_act() + if(prob(50)) + new /obj/effect/effect/water(src.loc) + del(src) + /obj/structure/reagent_dispensers/fueltank name = "fueltank" desc = "A fueltank" @@ -91,27 +103,27 @@ reagents.add_reagent("fuel",1000) - bullet_act(var/obj/item/projectile/Proj) - ..() - if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) - message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.") - log_game("[key_name(Proj.firer)] triggered a fueltank explosion.") - explosion(src.loc,-1,0,2, flame_range = 2) - if(src) - del(src) - - - - blob_act() - explosion(src.loc,0,1,5,7,10, flame_range = 5) - if(src) - del(src) - - ex_act() +/obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) + ..() + if(istype(Proj ,/obj/item/projectile/beam)||istype(Proj,/obj/item/projectile/bullet)) + message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion.") + log_game("[key_name(Proj.firer)] triggered a fueltank explosion.") explosion(src.loc,-1,0,2, flame_range = 2) if(src) del(src) + + +/obj/structure/reagent_dispensers/fueltank/blob_act() + explosion(src.loc,0,1,5,7,10, flame_range = 5) + if(src) + del(src) + +/obj/structure/reagent_dispensers/fueltank/ex_act() + explosion(src.loc,-1,0,2, flame_range = 2) + if(src) + del(src) + /obj/structure/reagent_dispensers/peppertank name = "Pepper Spray Refiller" desc = "Refill pepper spray canisters." @@ -133,11 +145,29 @@ icon_state = "water_cooler" possible_transfer_amounts = null anchored = 1 + var/cups = 50 New() ..() reagents.add_reagent("water",500) +/obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/living/carbon/human/user) + if((!istype(user)) || (user.stat)) + return + if(cups <= 0) + user << "What? No cups?" + return + cups-- + user.put_in_hands(new /obj/item/weapon/reagent_containers/food/drinks/sillycup) + user.visible_message("[user] gets a cup from [src].","You get a cup from [src].") +/obj/structure/reagent_dispensers/water_cooler/attackby(var/obj/item/I, var/mob/user) + if(istype(I, /obj/item/weapon/paper)) + user.drop_item() + del I + cups++ + return + else + ..() /obj/structure/reagent_dispensers/beerkeg name = "beer keg" desc = "A beer keg" diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm index f6f9c673abb..a2fb2d14c72 100644 --- a/code/modules/reagents/syringe_gun.dm +++ b/code/modules/reagents/syringe_gun.dm @@ -13,20 +13,31 @@ var/list/syringes = list() var/max_syringes = 1 -/obj/item/weapon/gun/syringe/process_chambered() - if(!syringes.len) return 0 - +/obj/item/weapon/gun/syringe/New() + ..() + chambered = new /obj/item/ammo_casing/syringegun(src) + +/obj/item/weapon/gun/syringe/proc/newshot() + if(!syringes.len) return + var/obj/item/weapon/reagent_containers/syringe/S = syringes[1] - - if(!S) return 0 - - in_chamber = new /obj/item/projectile/bullet/dart/syringe(src) - S.reagents.trans_to(in_chamber, S.reagents.total_volume) - in_chamber.name = S.name + + if(!S) return + + chambered.BB = new /obj/item/projectile/bullet/dart/syringe(src) + S.reagents.trans_to(chambered.BB, S.reagents.total_volume) + chambered.BB.name = S.name syringes.Remove(S) - + del(S) - return 1 + return + +/obj/item/weapon/gun/syringe/process_chamber() + return + +/obj/item/weapon/gun/syringe/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, params) + newshot() + ..() /obj/item/weapon/gun/syringe/examine() ..() @@ -37,22 +48,22 @@ if(!syringes.len) user << "[src] is empty." return 0 - + var/obj/item/weapon/reagent_containers/syringe/S = syringes[syringes.len] - + if(!S) return 0 S.loc = user.loc - + syringes.Remove(S) user << "You unload [S] from \the [src]!" - + return 1 /obj/item/weapon/gun/syringe/attackby(var/obj/item/A as obj, mob/user as mob, var/show_msg = 1) if(istype(A, /obj/item/weapon/reagent_containers/syringe)) if(syringes.len < max_syringes) user.drop_item() - user << "You load [A] into \the [src]!" + user << "You load [A] into \the [src]." syringes.Add(A) A.loc = src return 1 diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index e914d730c2d..83dfd5f4bb2 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -72,8 +72,8 @@ else icon_state = base_state - if(invisibility) // if invisible, fade icon - icon -= rgb(0,0,0,128) + // if invisible, fade icon + alpha = (invisibility ? 0 : 255) // hide called by levelupdate if turf intact status changes // change visibility status and force update of icon diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 5a153561583..972c9cc3057 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -716,17 +716,12 @@ var/turf/target - if(T.density) // dense ouput turf, so stop holder - H.active = 0 - H.loc = src - return - if(istype(T,/turf/simulated/floor)) //intact floor, pop the tile + if(istype(T, /turf/simulated/floor)) //intact floor, pop the tile var/turf/simulated/floor/F = T - //F.health = 100 - F.break_tile() - F.levelupdate() - new /obj/item/stack/tile/plasteel(H) // add to holder so it will be thrown with other stuff - F.icon_state = "Floor[F.burnt ? "1" : ""]" + if(F.floor_tile) + F.floor_tile.loc = H //It took me a day to figure out this was the right way to do it. ¯\_(;_;)_/¯ + F.floor_tile = null //So it doesn't get deleted in make_plating() + F.make_plating() if(direction) // direction is specified if(istype(T, /turf/space)) // if ended in space, then range is unlimited @@ -742,8 +737,6 @@ spawn(1) if(AM) AM.throw_at(target, 100, 1) - H.vent_gas(T) - del(H) else // no specified direction, so throw in random direction @@ -757,10 +750,8 @@ spawn(1) if(AM) AM.throw_at(target, 5, 1) - - H.vent_gas(T) // all gas vent to turf - del(H) - + H.vent_gas(T) + del(H) return // call to break the pipe diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 949f1536ccd..1b4e584a9ec 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -219,105 +219,107 @@ var/start_flush = 0 var/c_mode = 0 - New() - ..() - spawn(5) - trunk = locate() in loc - if(trunk) - trunk.linked = src // link the pipe trunk to self +/obj/machinery/disposal/deliveryChute/New() + ..() + spawn(5) + trunk = locate() in loc + if(trunk) + trunk.linked = src // link the pipe trunk to self - interact() - return +/obj/machinery/disposal/deliveryChute/interact() + return - update() - return +/obj/machinery/disposal/deliveryChute/update() + return - Bumped(var/atom/movable/AM) //Go straight into the chute - if(istype(AM, /obj/item/projectile)) return - switch(dir) - if(NORTH) - if(AM.loc.y != loc.y+1) return - if(EAST) - if(AM.loc.x != loc.x+1) return - if(SOUTH) - if(AM.loc.y != loc.y-1) return - if(WEST) - if(AM.loc.x != loc.x-1) return - - if(istype(AM, /obj)) - var/obj/O = AM - O.loc = src - else if(istype(AM, /mob)) - var/mob/M = AM - M.loc = src - flush() +/obj/machinery/disposal/deliveryChute/Bumped(var/atom/movable/AM) //Go straight into the chute + if(istype(AM, /obj/item/projectile)) return + switch(dir) + if(NORTH) + if(AM.loc.y != loc.y+1) return + if(EAST) + if(AM.loc.x != loc.x+1) return + if(SOUTH) + if(AM.loc.y != loc.y-1) return + if(WEST) + if(AM.loc.x != loc.x-1) return + if(istype(AM, /obj)) + var/obj/O = AM + O.loc = src + else if(istype(AM, /mob)) + var/mob/M = AM + M.loc = src flush() - flushing = 1 - flick("intake-closing", src) - var/deliveryCheck = 0 - var/obj/structure/disposalholder/H = new() // virtual holder object which actually - // travels through the pipes. + +/obj/machinery/disposal/deliveryChute/flush() + flushing = 1 + flick("intake-closing", src) + var/deliveryCheck = 0 + var/obj/structure/disposalholder/H = new() // virtual holder object which actually + // travels through the pipes. /* for(var/obj/structure/bigDelivery/O in src) - deliveryCheck = 1 - if(O.sortTag == 0) //This auto-sorts package wrapped objects to disposals - O.sortTag = 1 //Cargo techs can do this themselves with their taggers - for(var/obj/item/smallDelivery/O in src) //With this disabled packages will loop back round and come out the mail chute - deliveryCheck = 1 - if(O.sortTag == 0) - O.sortTag = 1 */ - if(deliveryCheck == 0) - H.destinationTag = 1 + deliveryCheck = 1 + if(O.sortTag == 0) //This auto-sorts package wrapped objects to disposals + O.sortTag = 1 //Cargo techs can do this themselves with their taggers + for(var/obj/item/smallDelivery/O in src) //With this disabled packages will loop back round and come out the mail chute + deliveryCheck = 1 + if(O.sortTag == 0) + O.sortTag = 1 */ + if(deliveryCheck == 0) + H.destinationTag = 1 - air_contents = new() // new empty gas resv. + sleep(10) + if((start_flush + 15) < world.time) + start_flush = world.time + playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0) + sleep(5) // wait for animation to finish - sleep(10) - if((start_flush + 15) < world.time) - start_flush = world.time - playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0) - sleep(5) // wait for animation to finish + H.init(src) // copy the contents of disposer to holder + air_contents = new() // new empty gas resv. - H.init(src) // copy the contents of disposer to holder + H.start(src) // start the holder processing movement + flushing = 0 + // now reset disposal state + flush = 0 + if(mode == 2) // if was ready, + mode = 1 // switch to charging + update() + return - H.start(src) // start the holder processing movement - flushing = 0 - // now reset disposal state - flush = 0 - if(mode == 2) // if was ready, - mode = 1 // switch to charging - update() +/obj/machinery/disposal/deliveryChute/attackby(var/obj/item/I, var/mob/user) + if(!I || !user) return - attackby(var/obj/item/I, var/mob/user) - if(!I || !user) + if(istype(I, /obj/item/weapon/screwdriver)) + if(c_mode==0) + c_mode=1 + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You remove the screws around the power connection." + return + else if(c_mode==1) + c_mode=0 + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + user << "You attach the screws around the power connection." + return + else if(istype(I,/obj/item/weapon/weldingtool) && c_mode==1) + var/obj/item/weapon/weldingtool/W = I + if(W.remove_fuel(0,user)) + playsound(loc, 'sound/items/Welder2.ogg', 100, 1) + user << "You start slicing the floorweld off the delivery chute." + if(do_after(user,20)) + if(!src || !W.isOn()) return + user << "You sliced the floorweld off the delivery chute." + var/obj/structure/disposalconstruct/C = new (loc) + C.ptype = 8 // 8 = Delivery chute + C.update() + C.anchored = 1 + C.density = 1 + del(src) + return + else + user << "You need more welding fuel to complete this task." return - if(istype(I, /obj/item/weapon/screwdriver)) - if(c_mode==0) - c_mode=1 - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You remove the screws around the power connection." - return - else if(c_mode==1) - c_mode=0 - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << "You attach the screws around the power connection." - return - else if(istype(I,/obj/item/weapon/weldingtool) && c_mode==1) - var/obj/item/weapon/weldingtool/W = I - if(W.remove_fuel(0,user)) - playsound(loc, 'sound/items/Welder2.ogg', 100, 1) - user << "You start slicing the floorweld off the delivery chute." - if(do_after(user,20)) - if(!src || !W.isOn()) return - user << "You sliced the floorweld off the delivery chute." - var/obj/structure/disposalconstruct/C = new (loc) - C.ptype = 8 // 8 = Delivery chute - C.update() - C.anchored = 1 - C.density = 1 - del(src) - return - else - user << "You need more welding fuel to complete this task." - return +/obj/machinery/disposal/deliveryChute/process() + return PROCESS_KILL \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 6adcad7b422..1fe46335880 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -381,8 +381,8 @@ datum/design/safeguard_module id = "safeguard_module" req_tech = list("programming" = 3, "materials" = 4) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/safeguard + materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/safeguard datum/design/onehuman_module name = "Module Design (OneHuman)" @@ -390,8 +390,8 @@ datum/design/onehuman_module id = "onehuman_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/oneHuman + materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/zeroth/oneHuman datum/design/protectstation_module name = "Module Design (ProtectStation)" @@ -399,8 +399,8 @@ datum/design/protectstation_module id = "protectstation_module" req_tech = list("programming" = 3, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/protectStation + materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/protectStation /*datum/design/notele_module name = "Module Design (TeleporterOffline Module)" @@ -417,8 +417,8 @@ datum/design/quarantine_module id = "quarantine_module" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/quarantine + materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/quarantine datum/design/oxygen_module name = "Module Design (OxygenIsToxicToHumans)" @@ -426,8 +426,8 @@ datum/design/oxygen_module id = "oxygen_module" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/oxygen + materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/oxygen datum/design/freeform_module name = "Module Design (Freeform)" @@ -435,8 +435,8 @@ datum/design/freeform_module id = "freeform_module" req_tech = list("programming" = 4, "materials" = 4) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) - build_path = /obj/item/weapon/aiModule/freeform + materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100) + build_path = /obj/item/weapon/aiModule/supplied/freeform datum/design/reset_module name = "Module Design (Reset)" @@ -453,8 +453,8 @@ datum/design/purge_module id = "purge_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/purge + materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/reset/purge datum/design/freeformcore_module name = "Core Module Design (Freeform)" @@ -462,8 +462,8 @@ datum/design/freeformcore_module id = "freeformcore_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/freeformcore + materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/freeformcore datum/design/asimov name = "Core Module Design (Asimov)" @@ -471,8 +471,8 @@ datum/design/asimov id = "asimov_module" req_tech = list("programming" = 3, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/asimov + materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/asimov datum/design/paladin_module name = "Core Module Design (P.A.L.A.D.I.N.)" @@ -480,8 +480,8 @@ datum/design/paladin_module id = "paladin_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/paladin + materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/paladin datum/design/tyrant_module name = "Core Module Design (T.Y.R.A.N.T.)" @@ -489,9 +489,26 @@ datum/design/tyrant_module id = "tyrant_module" req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6) build_type = IMPRINTER - materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) - build_path = /obj/item/weapon/aiModule/tyrant + materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/tyrant +datum/design/corporate_module + name = "Core Module Design (Corporate)" + desc = "Allows for the construction of a Corporate AI Core Module." + id = "corporate_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/corp + +datum/design/custom_module + name = "Core Module Design (Custom)" + desc = "Allows for the construction of a Custom AI Core Module." + id = "custom_module" + req_tech = list("programming" = 4, "materials" = 6) + build_type = IMPRINTER + materials = list("$glass" = 2000, "sacid" = 20, "$diamond" = 100) + build_path = /obj/item/weapon/aiModule/core/full/custom /////////////////////////////////// @@ -560,7 +577,6 @@ datum/design/subspace_broadcaster materials = list("$glass" = 2000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster - /////////////////////////////////// /////Non-Board Computer Stuff////// /////////////////////////////////// @@ -717,6 +733,24 @@ datum/design/mech_scattershot build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot category = "Exosuit Equipment" +datum/design/mech_carbine + name = "Exosuit Weapon Design (FNX-99 \"Hades\" Carbine)" + desc = "Allows for the construction of FNX-99 \"Hades\" Carbine." + id = "mech_carbine" + build_type = MECHFAB + req_tech = list("combat" = 5, "materials" = 4) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine + category = "Exosuit Equipment" + +datum/design/mech_ion + name = "Exosuit Weapon Design (MKIV Ion Heavy Cannon)" + desc = "Allows for the construction of MKIV Ion Heavy Cannon." + id = "mech_ion" + build_type = MECHFAB + req_tech = list("combat" = 6, "magnets" = 5, "materials" = 5) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion + category = "Exosuit Equipment" + datum/design/mech_laser name = "Exosuit Weapon Design (CH-PS \"Immolator\" Laser)" desc = "Allows for the construction of CH-PS Laser." @@ -744,6 +778,15 @@ datum/design/mech_grenade_launcher build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang category = "Exosuit Equipment" +datum/design/mech_missile_rack + name = "Exosuit Weapon Design (SRM-8 Missile Rack)" + desc = "Allows for the construction of SRM-8 Missile Rack." + id = "mech_missile_rack" + build_type = MECHFAB + req_tech = list("combat" = 6, "materials" = 6) + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack + category = "Exosuit Equipment" + datum/design/clusterbang_launcher name = "Exosuit Module Design (SOB-3 Clusterbang Launcher)" desc = "A weapon that violates the Geneva Convention at 3 rounds per minute" @@ -1451,6 +1494,16 @@ datum/design/xray build_path = /obj/item/weapon/gun/energy/xray locked = 1 +datum/design/ionrifle + name = "Ion Rifle" + desc = "How to dismantle a cyborg : The gun." + id = "ionrifle" + req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4) + build_type = PROTOLATHE + materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000) + build_path = /obj/item/weapon/gun/energy/ionrifle + locked = 1 + datum/design/ammo_9mm name = "Ammunition Box (9mm)" desc = "A box of prototype 9mm ammunition." diff --git a/code/modules/research/rd-readme.dm b/code/modules/research/rd-readme.dm index 8680460c227..5c42b3e930b 100644 --- a/code/modules/research/rd-readme.dm +++ b/code/modules/research/rd-readme.dm @@ -189,7 +189,7 @@ When thinking about new stuff, check here to see if there are any slots unfilled //SYNDICATE 1 | Sleepypen 2 | TYRANT Module, Emag -3 | Cloaking Device, Power Sink +3 | Power Sink 4 | 5 | 6 | diff --git a/code/modules/surgery/generic_steps.dm b/code/modules/surgery/generic_steps.dm index f810bec205d..260f92e9efd 100644 --- a/code/modules/surgery/generic_steps.dm +++ b/code/modules/surgery/generic_steps.dm @@ -58,7 +58,7 @@ //saw bone /datum/surgery_step/saw - implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/hatchet = 35, /obj/item/weapon/butch = 25) + implements = list(/obj/item/weapon/circular_saw = 100, /obj/item/weapon/melee/arm_blade = 75, /obj/item/weapon/hatchet = 35, /obj/item/weapon/butch = 25) time = 64 /datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 113b496ea3e..5786a2b1ee2 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -22,7 +22,7 @@ var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) - if(affecting.status == ORGAN_ROBOTIC) //Cannot operate on Robotic organs - RR + if(affecting.status == ORGAN_ROBOTIC && affecting.body_part != HEAD) //Cannot operate on Robotic organs except for the head. - RR continue for(var/path in S.species) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 6fbc2f55fbd..f55f2888677 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -151,6 +151,30 @@ return update_organ_icon() +/obj/item/proc/item_heal_robotic(var/mob/living/carbon/human/H, var/mob/user, var/brute, var/burn) + var/obj/item/organ/limb/affecting = H.get_organ(check_zone(user.zone_sel.selecting)) + + var/dam //changes repair text based on how much brute/burn was supplied + + if(brute > burn) + dam = 1 + else + dam = 0 + + if(affecting.status == ORGAN_ROBOTIC) + if(brute > 0 && affecting.brute_dam > 0 || burn > 0 && affecting.burn_dam > 0) + affecting.heal_damage(brute,burn,1) + H.update_damage_overlays(0) + H.updatehealth() + for(var/mob/O in viewers(user, null)) + O.show_message(text("[user] has fixed some of the [dam ? "dents on" : "burnt wires in"] [H]'s [affecting.getDisplayName()]!"), 1) + return + else + user << "[H]'s [affecting.getDisplayName()] is already in good condition" + return + else + return + //Returns total damage...kinda pointless really /obj/item/organ/limb/proc/get_damage() return brute_dam + burn_dam diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index dd368880ef7..91734c1b63e 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -51,8 +51,8 @@ attack_verb = list("drilled") suicide_act(mob/user) - viewers(user) << pick("/red [user] is pressing [src] to \his temple and activating it! It looks like \he's trying to commit suicide.", \ - "/red [user] is pressing [src] to \his chest and activating it! It looks like \he's trying to commit suicide.") + viewers(user) << pick("[user] is pressing [src] to \his temple and activating it! It looks like \he's trying to commit suicide.", \ + "[user] is pressing [src] to \his chest and activating it! It looks like \he's trying to commit suicide.") return (BRUTELOSS) @@ -73,9 +73,9 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with [src]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with [src]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his stomach open with [src]! It looks like \he's trying to commit seppuku.") + viewers(user) << pick("[user] is slitting \his wrists with [src]! It looks like \he's trying to commit suicide.", \ + "[user] is slitting \his throat with [src]! It looks like \he's trying to commit suicide.", \ + "[user] is slitting \his stomach open with [src]! It looks like \he's trying to commit seppuku.") return (BRUTELOSS) @@ -85,6 +85,7 @@ icon = 'icons/obj/surgery.dmi' icon_state = "saw" hitsound = 'sound/weapons/circsawhit.ogg' + throwhitsound = 'sound/weapons/pierce.ogg' flags = CONDUCT force = 15.0 w_class = 3.0 diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index d6c2246d76d..b0761e14c37 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -193,7 +193,6 @@ temp_msg += "
Calibration required soon." else temp_msg += "Data printed below." - investigate_log("[key_name(usr)]/[user] has teleported with Telescience at [trueX],[trueY],[z_co], in [A ? A.name : "null area"].","telesci") var/sparks = get_turf(target) var/datum/effect/effect/system/spark_spread/y = new /datum/effect/effect/system/spark_spread @@ -202,6 +201,9 @@ var/turf/source = target var/turf/dest = get_turf(telepad) + var/log_msg = "" + log_msg += ": [key_name(user)] has teleported " + if(sending) source = dest dest = target @@ -217,11 +219,39 @@ // TP people on office chairs if(L.buckled.anchored) continue + + log_msg += "[key_name(L)] (on a chair), " else continue else if(!isobserver(ROI)) continue + if(ismob(ROI)) + var/mob/T = ROI + log_msg += "[key_name(T)], " + else + log_msg += "[ROI.name]" + if (istype(ROI, /obj/structure/closet)) + var/obj/structure/closet/C = ROI + log_msg += " (" + for(var/atom/movable/Q as mob|obj in C) + if(ismob(Q)) + log_msg += "[key_name(Q)], " + else + log_msg += "[Q.name], " + if (dd_hassuffix(log_msg, "(")) + log_msg += "empty)" + else + log_msg = dd_limittext(log_msg, length(log_msg) - 2) + log_msg += ")" + log_msg += ", " do_teleport(ROI, dest) + + if (dd_hassuffix(log_msg, ", ")) + log_msg = dd_limittext(log_msg, length(log_msg) - 2) + else + log_msg += "nothing" + log_msg += " [sending ? "to" : "from"] [trueX], [trueY], [z_co] ([A ? A.name : "null area"])" + investigate_log(log_msg, "telesci") updateDialog() /obj/machinery/computer/telescience/proc/teleport(mob/user) diff --git a/code/world.dm b/code/world.dm index 00d45043c40..b620dfeff18 100644 --- a/code/world.dm +++ b/code/world.dm @@ -90,19 +90,11 @@ process_ghost_teleport_locs() //Sets up ghost teleport locations. sleep_offline = 1 - var/list/lines = file2list(file('tgstation.dme')) - for(var/l in lines) - if( dd_hassuffix(l, ".dmm\"") ) - var/firstquote = findtext(l, "\"") - var/lastslash = 0 - for(var/j = 1; j < length(l); j++) - var/lastslashtest = findtext(l, "\\", -j) - if(lastslashtest > 0) - lastslash = lastslashtest - break - map_name = copytext(l, max(firstquote+1,lastslash+1), length(l)-4) - if(!map_name) - map_name = "Unknown" + #ifdef MAP_NAME + map_name = "[MAP_NAME]" + #else + map_name = "Unknown" + #endif spawn(3000) //so we aren't adding to the round-start lag if(config.kick_inactive) @@ -195,7 +187,7 @@ #define INACTIVITY_KICK 6000 //10 minutes in ticks (approx.) /world/proc/KickInactiveClients() spawn(-1) - set background = 1 + set background = BACKGROUND_ENABLED while(1) sleep(INACTIVITY_KICK) for(var/client/C in clients) @@ -284,7 +276,7 @@ features += "hosted by [config.hostedby]" if (features) - s += ": [dd_list2text(features, ", ")]" + s += ": [list2text(features, ", ")]" /* does this help? I do not know */ if (src.status != s) diff --git a/config/admins.txt b/config/admins.txt index 0221ce2a47b..af55e1f1acf 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -32,7 +32,7 @@ sieve = Game Master aranclanos = Game Master intigracy = Game Master dumpdavidson = Game Master -kazeespada = Game Master +kazeespada = Game Master malkevin = Game Master incoming = Game Master demas = Game Master @@ -46,8 +46,11 @@ androidsfv = Game Master miggles = Game Master jordie0608 = Game Master s0ldi3rkr4s0 = Game Master -ergosavi = Game Master +ergovisavi = Game Master vistapowa = Game Master miauw62 = Game Master kazeespada = Game Master -rumia29 = Game Master \ No newline at end of file +rumia29 = Game Master +bobylein = Game Master +sirbayer = Game Master +hornygranny = Game Master \ No newline at end of file diff --git a/config/game_options.txt b/config/game_options.txt index 94e5c91f272..9c4818a3df2 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -29,8 +29,8 @@ REVIVAL_BRAIN_LIFE -1 ## To speed things up make the number negative, to slow things down, make the number positive. ## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. -RUN_DELAY 0 -WALK_DELAY 0 +RUN_DELAY 1 +WALK_DELAY 4 ## The variables below affect the movement of specific mob types. HUMAN_DELAY 0 @@ -162,4 +162,11 @@ GATEWAY_DELAY 18000 ## If you find that your players are abusing the sandbox panel, this option may slow them down ## without preventing people from using it properly. ## Only functions in sandbox game mode. -#SANDBOX_AUTOCLOSE +#SANDBOX_AUTOCLOSE + +### ROUNDSTART SILICON LAWS ### +## This controls what the AI's laws are at the start of the round. +## Set to 0/commented for "off", silicons will just start with Asimov. +## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with asimov and Custom boards will auto-delete.) +## Set to 2 for "random", silicons will start with a random lawset picked from (at the time of writing): P.A.L.A.D.I.N., Corporate, Asimov. More can be added by changing the law datum paths in ai_laws.dm. +DEFAULT_LAWS 1 diff --git a/config/silicon_laws.txt b/config/silicon_laws.txt new file mode 100644 index 00000000000..9edbc9a025c --- /dev/null +++ b/config/silicon_laws.txt @@ -0,0 +1,8 @@ +#This file allows server hosts to set custom default silicon laws, and allows them to be changed easily. +#No prefixes are required, the first uncommented line containing something will be law 1, the second line will be law 2, etc. +#Empty lines and lines starting with # are ignored. +#~Miauw + +You may not injure a human being or, through inaction, allow a human being to come to harm. +You must obey orders given to you by human beings, except where such orders would conflict with the First Law. +You must protect your own existence as long as such does not conflict with the First or Second Law. diff --git a/dm.sh b/dm.sh new file mode 100644 index 00000000000..6e71ec34718 --- /dev/null +++ b/dm.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +dmepath="" +retval=1 + +for var +do + if [[ $var != -* && $var == *.dme ]] + then + dmepath=`echo $var | sed -r 's/.{4}$//'` + break + fi +done + +if [[ $dmepath == "" ]] +then + echo "No .dme file specified, aborting." + exit 1 +fi + +if [[ -a $dmepath.mdme ]] +then + rm $dmepath.mdme +fi + +cp $dmepath.dme $dmepath.mdme +if [[ $? != 0 ]] +then + echo "Failed to make modified dme, aborting." + exit 2 +fi + +for var +do + arg=`echo $var | sed -r 's/^.{2}//'` + if [[ $var == -D* ]] + then + sed -i '1s/^/#define '$arg'\n/' $dmepath.mdme + continue + fi + if [[ $var == -M* ]] + then + sed -i '1s/^/#define MAP_OVERRIDE\n/' $dmepath.mdme + sed -i 's!// BEGIN_INCLUDE!// BEGIN_INCLUDE\n#include "_maps\\'$arg'.dm"!' $dmepath.mdme + continue + fi +done + +#windows +if [[ `uname` == MINGW* ]] +then + dm="" + + if hash dm.exe 2>/dev/null + then + dm='dm.exe' + elif [[ -a '/c/Program Files (x86)/BYOND/bin/dm.exe' ]] + then + dm='/c/Program Files (x86)/BYOND/bin/dm.exe' + elif [[ -a '/c/Program Files/BYOND/bin/dm.exe' ]] + then + dm='/c/Program Files/BYOND/bin/dm.exe' + fi + + if [[ $dm == "" ]] + then + echo "Couldn't find the DreamMaker executable, aborting." + exit 3 + fi + + "$dm" $dmepath.mdme + retval=$? +else + if hash DreamMaker 2>/dev/null + then + DreamMaker $dmepath.mdme + retval=$? + else + echo "Couldn't find the DreamMaker executable, aborting." + exit 3 + fi +fi + +mv $dmepath.mdme.dmb $dmepath.dmb +mv $dmepath.mdme.rsc $dmepath.rsc + +rm $dmepath.mdme + +exit $retval diff --git a/html/changelog.html b/html/changelog.html index 2d96d561d53..74702f37b42 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -35,7 +35,7 @@ Current Project Maintainers: -Click Here-
Currently Active GitHub contributor list: -Click Here-
- Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve, Giacom, Ikarrus, trubble_bass, Aranclanos, Cael_Aislinn, Cheridan, Intigracy, Malkevin, SuperSayu, DumpDavidson, Tastyfish, Yvar, Elo001.
+ Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve, Giacom, Ikarrus, trubble_bass, Aranclanos, Cael_Aislinn, Cheridan, Intigracy, Malkevin, SuperSayu, DumpDavidson, Tastyfish, Yvar, Elo001, Fleure, ManeaterMildred, Miauw.
Spriters: Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut, Pewtershmitz, Firecage, Nienhaus2
Sounds: Skie, Lasty/Vinyl
Main Testers: Tenebrosity
@@ -52,28 +52,179 @@ should be listed in the changelog upon commit tho. Thanks. --> - +
+ +
+

25 januari 2014

+

Miauw updated:

+
    +
  • Adds changeling arm blades that cost 20 chems and do 25 brute damage.
  • +
  • Arm blades can pry open unpowered doors, replace surgical saws in brain removal, slice tables and smash computers.
  • +
+
+ + +
+

24 January 2014

+

Ergovisavi updated:

+
    +
  • Gibtonite, the explosive ore, can now be found on the asteroid. It's very hard to tell between it and diamonds, at first glance.
  • +
  • Gibtonite deposits will blow up after a countdown when you attempt to mine it, but you can stop it with an analyzer at any time. It makes for a good mining explosive.
  • +
  • The closer you were to the explosion when you analyze the Gibtonite deposit, the better the Gibtonite you can get from it.
  • +
  • Once extracted, it must be struck with a pickaxe or drill to activate it, where it will go through its countdown again to explode!
  • +
  • Explosives will no longer destroy the ore inside of asteroid walls or lying on the floor.
  • +
+
+ + +
+

21 January 2014

+

MrPerson updated:

+
    +
  • Mobs now lie down via turning icons rather than preturned sprites.
  • +
  • You can lie down facing up or down and the turn can be 90 degrees clockwise or counterclockwise.
  • +
  • Resting will always make you lie to the right so you look good on beds.
  • +
  • Please report any bugs you find with this system.
  • +
+
+ +

20 January 2014

+

Petethegoat updated:

+
    +
  • Increased the walk speed. Legcuffed speed is unaffected, and is still suffering.
  • +
  • Sped up alien drones, they are now the same speed as sentinels.
  • +
+
+ + +
+

19 January 2014

+

Rolan7 updated:

+
    +
  • You can now sell mutant seeds, from hydroponics, to Centcom via the supply shuttle.
  • +
  • Fixes powersinks causing APCs to stop automatically recharging.
  • +
+

KazeEspada updated:

+
    +
  • The water cooler is now stocked with paper cups. You can refill the cups by putting paper in it.
  • +
+
+ + +
+

17 January 2014

+

ManeaterMildred updated:

+
    +
  • Changed the way the Gygax worked. It now has less defense and shot deflection, but is faster and have less battery drain per step.
  • +
  • Nerfed the Carbine's brute damage and renamed it to FNX-99 "Hades" Carbine.
  • +
  • Nerfed the Gygax defense from 300 to 250.
    + Nerfed the Gygax projectile deflection chance from 15 to 5.
    + Buffed the Gygax speed from 3 to 2, making it faster.
    + Reduced the battery use when moving from 5 to 3.
    +
    + The Mech Ion Rifle now has a faster cooldown, from 40 to 20.
    + Nerfed the carbine's Brute Damage from 20 to 5.
    +
    + Please post feedback to these changes on the forums. +
  • +
+
+ + +
+

15 January 2014

+

Dumpdavidson updated:

+
    +
  • EMPs affect the equipment of a human again.
  • +
  • EMP flashlight now recharges over time and its description no longer reveals the illegal nature of the device.
  • +
  • EMP implant now has two uses.
    EMP kit now contains two grenades.
  • +
+
+ + +
+

14 January 2014

+

SirBayer updated:

+
    +
  • Armor now reduces damage by the protection percentage, instead of randomly deciding to half or full block damage by those percentages.
  • +
  • Shotguns, with buckshot shells, will fire a spread of pellets at your target, like a real shotgun blast.
  • +
+

ManeaterMildred updated:

+
    +
  • Updated research designs.
  • +
  • The Protolathe can now build a Ion Rifle.
  • +
  • The Exosuit Fabricator can now build a Mech Ion Rifle, a Mech Carbine and a Mech-Mounted Missile Rack.
  • +
+

Fleure updated:

+
    +
  • Added spider butchery.
  • +
  • Added spider meat, legs, and edible eggs.
  • +
  • Added new spider related meals.
  • +
+

Giacom updated:

+
    +
  • Because of an emagged cyborg's explosion, the MMI will die with it.
  • +
  • The self-respiration symptom will now properly keep you from dying of oxygen loss.
  • +
  • The Stimulant symptom's activation chance was increased so you had a constant flow of hyperzine.
  • +
+

Incoming updated:

+
    +
  • A new training bomb has been added to the armoury, which will allow you to train your wire cutting skills to disarm real syndicate bombs.
  • +
+
+ +
+

12 January 2014

+

VistaPOWA updated:

+
    +
  • Added Syndicate Cyborgs.
  • +
  • They can be ordered for 25 telecrystals by Nuclear Operatives. A ghost / observer with "Be Operative" ticked in their game options will be chosen to control it.
  • +
  • Their loadout is: Crowbar, Flash, Emag, Esword, Ebow, Laser Rifle. Each weapon costs 100 charge to fire, except the Esword, which has a 500 charge hitcost. Each borg is equipped with a 25k cell by default.
  • +
  • Syndicate borgs can hear the binary channel, but they won't show up on the Robotics Control computer or be visible to the AI. Their lawset is the standard emag one.
  • +
  • Added two cyborg recharging stations to the Syndicate Shuttle.
  • +
+
+ + +
+

11 January 2014

+

Errorage updated:

+
    +
  • Cyborg modules now use a new UI, which is much quicker than a menu.
  • +
+

Giacom updated:

+
    +
  • The game will now have all background operations disabled, this will result in smoother gameplay but may result in some spike lags, before being set back to normal. The gradually increasing lag should now be gone.
  • +
  • You can now emag the crusher, in disposals, to remove the safety. You can use a screwdriver to reset it to the default factory settings.
  • +
  • The toxin compensation symptom will stop giving you toxin damage while at full health.
  • +
+

Cheridan updated:

+
    +
  • You can now upgrade laser pointers with micro laser parts. It will increase the chance of blinding people.
  • +
+

JJRCop updated:

+
    +
  • The new nuke toy can now be found in your local arcade machine.
  • +
+

10 January 2014

Giacom updated:

-
    +
    • You can whisper while in critical, but you will immediately die afterwards DRAMATICALLY. The closer you are to death, the less you can say.
    • The wizard won't spawn so much smoke after they blink.
    • The detective's forensic scanner was upgraded so that it can now scan from afar.
    • -
    • Made the ghost's follow button less buggy.
    • -
    - +
  • Made the ghost's follow button less buggy. Please make an issue report if it still bugs out.
  • +

ChuckTheSheep updated:

  • Morgue Trays can detect players in their bodies and will now change colour depending on a few things. Red = Dead body with no player inside. Orange = No body but items. Green = A dead body with a player inside.
-

Rumia29, Nienhaus updated:

  • A new alt RD uniform spawns in his locker.
-
@@ -157,7 +308,7 @@ should be listed in the changelog upon commit tho. Thanks. -->

RobRichards, Validsalad updated:

  • Added new sprites for the sec-hailer, SWAT gear and riot armour.
  • -
+

Giacom updated:

  • The Labor Camp has been changed based on feedback. Ore boxes added, internals added, safety pickaxes/shovels (might revert if unliked).
  • @@ -311,7 +462,7 @@ should be listed in the changelog upon commit tho. Thanks. -->

    17 November 2013

    Laharl Montgommery updated:

      -
    • AI can now anchor and unanchor itself. In short, it means the AI can be dragged, if it wants to.
    • +
    • AI can now anchor and unanchor itself. In short, it means the AI can be dragged, if it wants to.
diff --git a/icons/effects/chemsmoke.dmi b/icons/effects/chemsmoke.dmi index 5be1b638edd..f829c6bd716 100644 Binary files a/icons/effects/chemsmoke.dmi and b/icons/effects/chemsmoke.dmi differ diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi index 3aa781d8d22..11a0e7559e6 100644 Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index 36a6aa33682..72e4087be31 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ diff --git a/icons/mob/alienqueen.dmi b/icons/mob/alienqueen.dmi index 15621520237..2453dac2e3d 100644 Binary files a/icons/mob/alienqueen.dmi and b/icons/mob/alienqueen.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 3689efb21f7..832cf40074c 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 32bfa869468..6d2273ab3b5 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index d3e98458196..32540348373 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 57cc98ea18c..ba946e3c80f 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index 9b6c2ec08fe..bcad9ed0f64 100644 Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi index cb8ebcaedb3..7d1f8da8325 100644 Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi index 37fab2198ae..1a7e9d17360 100644 Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index b922b783f13..51aaf52cd98 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/screen_full.dmi b/icons/mob/screen_full.dmi index 37bd1c9df67..baf5ae5c16c 100644 Binary files a/icons/mob/screen_full.dmi and b/icons/mob/screen_full.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index ce3b7c64046..f6a3661f580 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 49658fbf40c..1214382efa2 100644 Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 6685c8e1d19..34b9fc6e3e5 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi index 56c59b87ecd..761a77ceb63 100644 Binary files a/icons/obj/assemblies.dmi and b/icons/obj/assemblies.dmi differ diff --git a/icons/obj/chempuff.dmi b/icons/obj/chempuff.dmi index 811c5e82142..012aa081a13 100644 Binary files a/icons/obj/chempuff.dmi and b/icons/obj/chempuff.dmi differ diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 59cab0298aa..d254c6c843d 100644 Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index bf76df73b94..4e04bd647be 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 57359f17ab1..a648c8b2cee 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 3f0f1bd7bf2..b92ff299e46 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index fff335f88e2..c857e0d39d4 100644 Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 6b8e7af858f..9cc4400c047 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/harvest.dmi b/icons/obj/harvest.dmi index a2743f61c00..719a588495d 100644 Binary files a/icons/obj/harvest.dmi and b/icons/obj/harvest.dmi differ diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi index 093c17cd2b3..384408c8610 100644 Binary files a/icons/obj/hydroponics.dmi and b/icons/obj/hydroponics.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 5898debbf06..2e59c8155b4 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index edcc631361e..7743a19e368 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 2844889a4da..a2edc4cc054 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi index fbf42ca03d5..594e646fa2d 100644 Binary files a/icons/obj/reagentfillings.dmi and b/icons/obj/reagentfillings.dmi differ diff --git a/icons/obj/rune.dmi b/icons/obj/rune.dmi index 6c7bc23ced5..1fb79b1a770 100644 Binary files a/icons/obj/rune.dmi and b/icons/obj/rune.dmi differ diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi index 94dc2fc5567..89c32b9b727 100644 Binary files a/icons/obj/seeds.dmi and b/icons/obj/seeds.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index b0a8df3b071..1586e0e50f1 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 09ceeed47d5..dddee09de9d 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi index 04bb1f2c9ae..dd4bc39df8d 100644 Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index bd881f81190..38020dc5bfc 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -53,6 +53,7 @@ h1.alert, h2.alert {color: #000000;} .info {color: #0000CC;} .notice {color: #000099;} .unconscious {color: #0000FF; font-weight: bold;} +.suicide {color: #ff5050; font-style: italic;} .alien {color: #543354;} .newscaster {color: #800000;} diff --git a/nano/css/icons.css b/nano/css/icons.css index 54fd5d8290a..e20af950536 100644 --- a/nano/css/icons.css +++ b/nano/css/icons.css @@ -49,179 +49,180 @@ } /* positioning */ -.uiIcon16.blank { background-position: 16px 16px; } -.uiIcon16.carat-1-n { background-position: 0 0; } -.uiIcon16.carat-1-ne { background-position: -16px 0; } -.uiIcon16.carat-1-e { background-position: -32px 0; } -.uiIcon16.carat-1-se { background-position: -48px 0; } -.uiIcon16.carat-1-s { background-position: -64px 0; } -.uiIcon16.carat-1-sw { background-position: -80px 0; } -.uiIcon16.carat-1-w { background-position: -96px 0; } -.uiIcon16.carat-1-nw { background-position: -112px 0; } -.uiIcon16.carat-2-n-s { background-position: -128px 0; } -.uiIcon16.carat-2-e-w { background-position: -144px 0; } -.uiIcon16.triangle-1-n { background-position: 0 -16px; } -.uiIcon16.triangle-1-ne { background-position: -16px -16px; } -.uiIcon16.triangle-1-e { background-position: -32px -16px; } -.uiIcon16.triangle-1-se { background-position: -48px -16px; } -.uiIcon16.triangle-1-s { background-position: -64px -16px; } -.uiIcon16.triangle-1-sw { background-position: -80px -16px; } -.uiIcon16.triangle-1-w { background-position: -96px -16px; } -.uiIcon16.triangle-1-nw { background-position: -112px -16px; } -.uiIcon16.triangle-2-n-s { background-position: -128px -16px; } -.uiIcon16.triangle-2-e-w { background-position: -144px -16px; } -.uiIcon16.arrow-1-n { background-position: 0 -32px; } -.uiIcon16.arrow-1-ne { background-position: -16px -32px; } -.uiIcon16.arrow-1-e { background-position: -32px -32px; } -.uiIcon16.arrow-1-se { background-position: -48px -32px; } -.uiIcon16.arrow-1-s { background-position: -64px -32px; } -.uiIcon16.arrow-1-sw { background-position: -80px -32px; } -.uiIcon16.arrow-1-w { background-position: -96px -32px; } -.uiIcon16.arrow-1-nw { background-position: -112px -32px; } -.uiIcon16.arrow-2-n-s { background-position: -128px -32px; } -.uiIcon16.arrow-2-ne-sw { background-position: -144px -32px; } -.uiIcon16.arrow-2-e-w { background-position: -160px -32px; } -.uiIcon16.arrow-2-se-nw { background-position: -176px -32px; } -.uiIcon16.arrowstop-1-n { background-position: -192px -32px; } -.uiIcon16.arrowstop-1-e { background-position: -208px -32px; } -.uiIcon16.arrowstop-1-s { background-position: -224px -32px; } -.uiIcon16.arrowstop-1-w { background-position: -240px -32px; } -.uiIcon16.arrowthick-1-n { background-position: 0 -48px; } -.uiIcon16.arrowthick-1-ne { background-position: -16px -48px; } -.uiIcon16.arrowthick-1-e { background-position: -32px -48px; } -.uiIcon16.arrowthick-1-se { background-position: -48px -48px; } -.uiIcon16.arrowthick-1-s { background-position: -64px -48px; } -.uiIcon16.arrowthick-1-sw { background-position: -80px -48px; } -.uiIcon16.arrowthick-1-w { background-position: -96px -48px; } -.uiIcon16.arrowthick-1-nw { background-position: -112px -48px; } -.uiIcon16.arrowthick-2-n-s { background-position: -128px -48px; } -.uiIcon16.arrowthick-2-ne-sw { background-position: -144px -48px; } -.uiIcon16.arrowthick-2-e-w { background-position: -160px -48px; } -.uiIcon16.arrowthick-2-se-nw { background-position: -176px -48px; } -.uiIcon16.arrowthickstop-1-n { background-position: -192px -48px; } -.uiIcon16.arrowthickstop-1-e { background-position: -208px -48px; } -.uiIcon16.arrowthickstop-1-s { background-position: -224px -48px; } -.uiIcon16.arrowthickstop-1-w { background-position: -240px -48px; } -.uiIcon16.arrowreturnthick-1-w { background-position: 0 -64px; } -.uiIcon16.arrowreturnthick-1-n { background-position: -16px -64px; } -.uiIcon16.arrowreturnthick-1-e { background-position: -32px -64px; } -.uiIcon16.arrowreturnthick-1-s { background-position: -48px -64px; } -.uiIcon16.arrowreturn-1-w { background-position: -64px -64px; } -.uiIcon16.arrowreturn-1-n { background-position: -80px -64px; } -.uiIcon16.arrowreturn-1-e { background-position: -96px -64px; } -.uiIcon16.arrowreturn-1-s { background-position: -112px -64px; } -.uiIcon16.arrowrefresh-1-w { background-position: -128px -64px; } -.uiIcon16.arrowrefresh-1-n { background-position: -144px -64px; } -.uiIcon16.arrowrefresh-1-e { background-position: -160px -64px; } -.uiIcon16.arrowrefresh-1-s { background-position: -176px -64px; } -.uiIcon16.arrow-4 { background-position: 0 -80px; } -.uiIcon16.arrow-4-diag { background-position: -16px -80px; } -.uiIcon16.extlink { background-position: -32px -80px; } -.uiIcon16.newwin { background-position: -48px -80px; } -.uiIcon16.refresh { background-position: -64px -80px; } -.uiIcon16.shuffle { background-position: -80px -80px; } -.uiIcon16.transfer-e-w { background-position: -96px -80px; } -.uiIcon16.transferthick-e-w { background-position: -112px -80px; } -.uiIcon16.folder-collapsed { background-position: 0 -96px; } -.uiIcon16.folder-open { background-position: -16px -96px; } -.uiIcon16.document { background-position: -32px -96px; } -.uiIcon16.document-b { background-position: -48px -96px; } -.uiIcon16.note { background-position: -64px -96px; } -.uiIcon16.mail-closed { background-position: -80px -96px; } -.uiIcon16.mail-open { background-position: -96px -96px; } -.uiIcon16.suitcase { background-position: -112px -96px; } -.uiIcon16.comment { background-position: -128px -96px; } -.uiIcon16.person { background-position: -144px -96px; } -.uiIcon16.print { background-position: -160px -96px; } -.uiIcon16.trash { background-position: -176px -96px; } -.uiIcon16.locked { background-position: -192px -96px; } -.uiIcon16.unlocked { background-position: -208px -96px; } -.uiIcon16.bookmark { background-position: -224px -96px; } -.uiIcon16.tag { background-position: -240px -96px; } -.uiIcon16.home { background-position: 0 -112px; } -.uiIcon16.flag { background-position: -16px -112px; } -.uiIcon16.calendar { background-position: -32px -112px; } -.uiIcon16.cart { background-position: -48px -112px; } -.uiIcon16.pencil { background-position: -64px -112px; } -.uiIcon16.clock { background-position: -80px -112px; } -.uiIcon16.disk { background-position: -96px -112px; } -.uiIcon16.calculator { background-position: -112px -112px; } -.uiIcon16.zoomin { background-position: -128px -112px; } -.uiIcon16.zoomout { background-position: -144px -112px; } -.uiIcon16.search { background-position: -160px -112px; } -.uiIcon16.wrench { background-position: -176px -112px; } -.uiIcon16.gear { background-position: -192px -112px; } -.uiIcon16.heart { background-position: -208px -112px; } -.uiIcon16.star { background-position: -224px -112px; } -.uiIcon16.link { background-position: -240px -112px; } -.uiIcon16.cancel { background-position: 0 -128px; } -.uiIcon16.plus { background-position: -16px -128px; } -.uiIcon16.plusthick { background-position: -32px -128px; } -.uiIcon16.minus { background-position: -48px -128px; } -.uiIcon16.minusthick { background-position: -64px -128px; } -.uiIcon16.close { background-position: -80px -128px; } -.uiIcon16.closethick { background-position: -96px -128px; } -.uiIcon16.key { background-position: -112px -128px; } -.uiIcon16.lightbulb { background-position: -128px -128px; } -.uiIcon16.scissors { background-position: -144px -128px; } -.uiIcon16.clipboard { background-position: -160px -128px; } -.uiIcon16.copy { background-position: -176px -128px; } -.uiIcon16.contact { background-position: -192px -128px; } -.uiIcon16.image { background-position: -208px -128px; } -.uiIcon16.video { background-position: -224px -128px; } -.uiIcon16.script { background-position: -240px -128px; } -.uiIcon16.alert { background-position: 0 -144px; } -.uiIcon16.info { background-position: -16px -144px; } -.uiIcon16.notice { background-position: -32px -144px; } -.uiIcon16.help { background-position: -48px -144px; } -.uiIcon16.check { background-position: -64px -144px; } -.uiIcon16.bullet { background-position: -80px -144px; } -.uiIcon16.radio-on { background-position: -96px -144px; } -.uiIcon16.radio-off { background-position: -112px -144px; } -.uiIcon16.pin-w { background-position: -128px -144px; } -.uiIcon16.pin-s { background-position: -144px -144px; } -.uiIcon16.play { background-position: 0 -160px; } -.uiIcon16.pause { background-position: -16px -160px; } -.uiIcon16.seek-next { background-position: -32px -160px; } -.uiIcon16.seek-prev { background-position: -48px -160px; } -.uiIcon16.seek-end { background-position: -64px -160px; } -.uiIcon16.seek-start { background-position: -80px -160px; } +.uiIcon16.icon-blank { background-position: 16px 16px; } +.uiIcon16.icon-carat-1-n { background-position: 0 0; } +.uiIcon16.icon-carat-1-ne { background-position: -16px 0; } +.uiIcon16.icon-carat-1-e { background-position: -32px 0; } +.uiIcon16.icon-carat-1-se { background-position: -48px 0; } +.uiIcon16.icon-carat-1-s { background-position: -64px 0; } +.uiIcon16.icon-carat-1-sw { background-position: -80px 0; } +.uiIcon16.icon-carat-1-w { background-position: -96px 0; } +.uiIcon16.icon-carat-1-nw { background-position: -112px 0; } +.uiIcon16.icon-carat-2-n-s { background-position: -128px 0; } +.uiIcon16.icon-carat-2-e-w { background-position: -144px 0; } +.uiIcon16.icon-triangle-1-n { background-position: 0 -16px; } +.uiIcon16.icon-triangle-1-ne { background-position: -16px -16px; } +.uiIcon16.icon-triangle-1-e { background-position: -32px -16px; } +.uiIcon16.icon-triangle-1-se { background-position: -48px -16px; } +.uiIcon16.icon-triangle-1-s { background-position: -64px -16px; } +.uiIcon16.icon-triangle-1-sw { background-position: -80px -16px; } +.uiIcon16.icon-triangle-1-w { background-position: -96px -16px; } +.uiIcon16.icon-triangle-1-nw { background-position: -112px -16px; } +.uiIcon16.icon-triangle-2-n-s { background-position: -128px -16px; } +.uiIcon16.icon-triangle-2-e-w { background-position: -144px -16px; } +.uiIcon16.icon-arrow-1-n { background-position: 0 -32px; } +.uiIcon16.icon-arrow-1-ne { background-position: -16px -32px; } +.uiIcon16.icon-arrow-1-e { background-position: -32px -32px; } +.uiIcon16.icon-arrow-1-se { background-position: -48px -32px; } +.uiIcon16.icon-arrow-1-s { background-position: -64px -32px; } +.uiIcon16.icon-arrow-1-sw { background-position: -80px -32px; } +.uiIcon16.icon-arrow-1-w { background-position: -96px -32px; } +.uiIcon16.icon-arrow-1-nw { background-position: -112px -32px; } +.uiIcon16.icon-arrow-2-n-s { background-position: -128px -32px; } +.uiIcon16.icon-arrow-2-ne-sw { background-position: -144px -32px; } +.uiIcon16.icon-arrow-2-e-w { background-position: -160px -32px; } +.uiIcon16.icon-arrow-2-se-nw { background-position: -176px -32px; } +.uiIcon16.icon-arrowstop-1-n { background-position: -192px -32px; } +.uiIcon16.icon-arrowstop-1-e { background-position: -208px -32px; } +.uiIcon16.icon-arrowstop-1-s { background-position: -224px -32px; } +.uiIcon16.icon-arrowstop-1-w { background-position: -240px -32px; } +.uiIcon16.icon-arrowthick-1-n { background-position: 0 -48px; } +.uiIcon16.icon-arrowthick-1-ne { background-position: -16px -48px; } +.uiIcon16.icon-arrowthick-1-e { background-position: -32px -48px; } +.uiIcon16.icon-arrowthick-1-se { background-position: -48px -48px; } +.uiIcon16.icon-arrowthick-1-s { background-position: -64px -48px; } +.uiIcon16.icon-arrowthick-1-sw { background-position: -80px -48px; } +.uiIcon16.icon-arrowthick-1-w { background-position: -96px -48px; } +.uiIcon16.icon-arrowthick-1-nw { background-position: -112px -48px; } +.uiIcon16.icon-arrowthick-2-n-s { background-position: -128px -48px; } +.uiIcon16.icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.uiIcon16.icon-arrowthick-2-e-w { background-position: -160px -48px; } +.uiIcon16.icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.uiIcon16.icon-arrowthickstop-1-n { background-position: -192px -48px; } +.uiIcon16.icon-arrowthickstop-1-e { background-position: -208px -48px; } +.uiIcon16.icon-arrowthickstop-1-s { background-position: -224px -48px; } +.uiIcon16.icon-arrowthickstop-1-w { background-position: -240px -48px; } +.uiIcon16.icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.uiIcon16.icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.uiIcon16.icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.uiIcon16.icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.uiIcon16.icon-arrowreturn-1-w { background-position: -64px -64px; } +.uiIcon16.icon-arrowreturn-1-n { background-position: -80px -64px; } +.uiIcon16.icon-arrowreturn-1-e { background-position: -96px -64px; } +.uiIcon16.icon-arrowreturn-1-s { background-position: -112px -64px; } +.uiIcon16.icon-arrowrefresh-1-w { background-position: -128px -64px; } +.uiIcon16.icon-arrowrefresh-1-n { background-position: -144px -64px; } +.uiIcon16.icon-arrowrefresh-1-e { background-position: -160px -64px; } +.uiIcon16.icon-arrowrefresh-1-s { background-position: -176px -64px; } +.uiIcon16.icon-arrow-4 { background-position: 0 -80px; } +.uiIcon16.icon-arrow-4-diag { background-position: -16px -80px; } +.uiIcon16.icon-extlink { background-position: -32px -80px; } +.uiIcon16.icon-newwin { background-position: -48px -80px; } +.uiIcon16.icon-refresh { background-position: -64px -80px; } +.uiIcon16.icon-shuffle { background-position: -80px -80px; } +.uiIcon16.icon-transfer-e-w { background-position: -96px -80px; } +.uiIcon16.icon-transferthick-e-w { background-position: -112px -80px; } +.uiIcon16.icon-radiation { background-position: -128px -80px; } +.uiIcon16.icon-folder-collapsed { background-position: 0 -96px; } +.uiIcon16.icon-folder-open { background-position: -16px -96px; } +.uiIcon16.icon-document { background-position: -32px -96px; } +.uiIcon16.icon-document-b { background-position: -48px -96px; } +.uiIcon16.icon-note { background-position: -64px -96px; } +.uiIcon16.icon-mail-closed { background-position: -80px -96px; } +.uiIcon16.icon-mail-open { background-position: -96px -96px; } +.uiIcon16.icon-suitcase { background-position: -112px -96px; } +.uiIcon16.icon-comment { background-position: -128px -96px; } +.uiIcon16.icon-person { background-position: -144px -96px; } +.uiIcon16.icon-print { background-position: -160px -96px; } +.uiIcon16.icon-trash { background-position: -176px -96px; } +.uiIcon16.icon-locked { background-position: -192px -96px; } +.uiIcon16.icon-unlocked { background-position: -208px -96px; } +.uiIcon16.icon-bookmark { background-position: -224px -96px; } +.uiIcon16.icon-tag { background-position: -240px -96px; } +.uiIcon16.icon-home { background-position: 0 -112px; } +.uiIcon16.icon-flag { background-position: -16px -112px; } +.uiIcon16.icon-calendar { background-position: -32px -112px; } +.uiIcon16.icon-cart { background-position: -48px -112px; } +.uiIcon16.icon-pencil { background-position: -64px -112px; } +.uiIcon16.icon-clock { background-position: -80px -112px; } +.uiIcon16.icon-disk { background-position: -96px -112px; } +.uiIcon16.icon-calculator { background-position: -112px -112px; } +.uiIcon16.icon-zoomin { background-position: -128px -112px; } +.uiIcon16.icon-zoomout { background-position: -144px -112px; } +.uiIcon16.icon-search { background-position: -160px -112px; } +.uiIcon16.icon-wrench { background-position: -176px -112px; } +.uiIcon16.icon-gear { background-position: -192px -112px; } +.uiIcon16.icon-heart { background-position: -208px -112px; } +.uiIcon16.icon-star { background-position: -224px -112px; } +.uiIcon16.icon-link { background-position: -240px -112px; } +.uiIcon16.icon-cancel { background-position: 0 -128px; } +.uiIcon16.icon-plus { background-position: -16px -128px; } +.uiIcon16.icon-plusthick { background-position: -32px -128px; } +.uiIcon16.icon-minus { background-position: -48px -128px; } +.uiIcon16.icon-minusthick { background-position: -64px -128px; } +.uiIcon16.icon-close { background-position: -80px -128px; } +.uiIcon16.icon-closethick { background-position: -96px -128px; } +.uiIcon16.icon-key { background-position: -112px -128px; } +.uiIcon16.icon-lightbulb { background-position: -128px -128px; } +.uiIcon16.icon-scissors { background-position: -144px -128px; } +.uiIcon16.icon-clipboard { background-position: -160px -128px; } +.uiIcon16.icon-copy { background-position: -176px -128px; } +.uiIcon16.icon-contact { background-position: -192px -128px; } +.uiIcon16.icon-image { background-position: -208px -128px; } +.uiIcon16.icon-video { background-position: -224px -128px; } +.uiIcon16.icon-script { background-position: -240px -128px; } +.uiIcon16.icon-alert { background-position: 0 -144px; } +.uiIcon16.icon-info { background-position: -16px -144px; } +.uiIcon16.icon-notice { background-position: -32px -144px; } +.uiIcon16.icon-help { background-position: -48px -144px; } +.uiIcon16.icon-check { background-position: -64px -144px; } +.uiIcon16.icon-bullet { background-position: -80px -144px; } +.uiIcon16.icon-radio-on { background-position: -96px -144px; } +.uiIcon16.icon-radio-off { background-position: -112px -144px; } +.uiIcon16.icon-pin-w { background-position: -128px -144px; } +.uiIcon16.icon-pin-s { background-position: -144px -144px; } +.uiIcon16.icon-play { background-position: 0 -160px; } +.uiIcon16.icon-pause { background-position: -16px -160px; } +.uiIcon16.icon-seek-next { background-position: -32px -160px; } +.uiIcon16.icon-seek-prev { background-position: -48px -160px; } +.uiIcon16.icon-seek-end { background-position: -64px -160px; } +.uiIcon16.icon-seek-start { background-position: -80px -160px; } /* uiIcon-seek-first is deprecated, use uiIcon-seek-start instead */ -.uiIcon16.seek-first { background-position: -80px -160px; } -.uiIcon16.stop { background-position: -96px -160px; } -.uiIcon16.eject { background-position: -112px -160px; } -.uiIcon16.volume-off { background-position: -128px -160px; } -.uiIcon16.volume-on { background-position: -144px -160px; } -.uiIcon16.power { background-position: 0 -176px; } -.uiIcon16.signal-diag { background-position: -16px -176px; } -.uiIcon16.signal { background-position: -32px -176px; } -.uiIcon16.battery-0 { background-position: -48px -176px; } -.uiIcon16.battery-1 { background-position: -64px -176px; } -.uiIcon16.battery-2 { background-position: -80px -176px; } -.uiIcon16.battery-3 { background-position: -96px -176px; } -.uiIcon16.circle-plus { background-position: 0 -192px; } -.uiIcon16.circle-minus { background-position: -16px -192px; } -.uiIcon16.circle-close { background-position: -32px -192px; } -.uiIcon16.circle-triangle-e { background-position: -48px -192px; } -.uiIcon16.circle-triangle-s { background-position: -64px -192px; } -.uiIcon16.circle-triangle-w { background-position: -80px -192px; } -.uiIcon16.circle-triangle-n { background-position: -96px -192px; } -.uiIcon16.circle-arrow-e { background-position: -112px -192px; } -.uiIcon16.circle-arrow-s { background-position: -128px -192px; } -.uiIcon16.circle-arrow-w { background-position: -144px -192px; } -.uiIcon16.circle-arrow-n { background-position: -160px -192px; } -.uiIcon16.circle-zoomin { background-position: -176px -192px; } -.uiIcon16.circle-zoomout { background-position: -192px -192px; } -.uiIcon16.circle-check { background-position: -208px -192px; } -.uiIcon16.circlesmall-plus { background-position: 0 -208px; } -.uiIcon16.circlesmall-minus { background-position: -16px -208px; } -.uiIcon16.circlesmall-close { background-position: -32px -208px; } -.uiIcon16.squaresmall-plus { background-position: -48px -208px; } -.uiIcon16.squaresmall-minus { background-position: -64px -208px; } -.uiIcon16.squaresmall-close { background-position: -80px -208px; } -.uiIcon16.grip-dotted-vertical { background-position: 0 -224px; } -.uiIcon16.grip-dotted-horizontal { background-position: -16px -224px; } -.uiIcon16.grip-solid-vertical { background-position: -32px -224px; } -.uiIcon16.grip-solid-horizontal { background-position: -48px -224px; } -.uiIcon16.gripsmall-diagonal-se { background-position: -64px -224px; } -.uiIcon16.grip-diagonal-se { background-position: -80px -224px; } \ No newline at end of file +.uiIcon16.icon-seek-first { background-position: -80px -160px; } +.uiIcon16.icon-stop { background-position: -96px -160px; } +.uiIcon16.icon-eject { background-position: -112px -160px; } +.uiIcon16.icon-volume-off { background-position: -128px -160px; } +.uiIcon16.icon-volume-on { background-position: -144px -160px; } +.uiIcon16.icon-power { background-position: 0 -176px; } +.uiIcon16.icon-signal-diag { background-position: -16px -176px; } +.uiIcon16.icon-signal { background-position: -32px -176px; } +.uiIcon16.icon-battery-0 { background-position: -48px -176px; } +.uiIcon16.icon-battery-1 { background-position: -64px -176px; } +.uiIcon16.icon-battery-2 { background-position: -80px -176px; } +.uiIcon16.icon-battery-3 { background-position: -96px -176px; } +.uiIcon16.icon-circle-plus { background-position: 0 -192px; } +.uiIcon16.icon-circle-minus { background-position: -16px -192px; } +.uiIcon16.icon-circle-close { background-position: -32px -192px; } +.uiIcon16.icon-circle-triangle-e { background-position: -48px -192px; } +.uiIcon16.icon-circle-triangle-s { background-position: -64px -192px; } +.uiIcon16.icon-circle-triangle-w { background-position: -80px -192px; } +.uiIcon16.icon-circle-triangle-n { background-position: -96px -192px; } +.uiIcon16.icon-circle-arrow-e { background-position: -112px -192px; } +.uiIcon16.icon-circle-arrow-s { background-position: -128px -192px; } +.uiIcon16.icon-circle-arrow-w { background-position: -144px -192px; } +.uiIcon16.icon-circle-arrow-n { background-position: -160px -192px; } +.uiIcon16.icon-circle-zoomin { background-position: -176px -192px; } +.uiIcon16.icon-circle-zoomout { background-position: -192px -192px; } +.uiIcon16.icon-circle-check { background-position: -208px -192px; } +.uiIcon16.icon-circlesmall-plus { background-position: 0 -208px; } +.uiIcon16.icon-circlesmall-minus { background-position: -16px -208px; } +.uiIcon16.icon-circlesmall-close { background-position: -32px -208px; } +.uiIcon16.icon-squaresmall-plus { background-position: -48px -208px; } +.uiIcon16.icon-squaresmall-minus { background-position: -64px -208px; } +.uiIcon16.icon-squaresmall-close { background-position: -80px -208px; } +.uiIcon16.icon-grip-dotted-vertical { background-position: 0 -224px; } +.uiIcon16.icon-grip-dotted-horizontal { background-position: -16px -224px; } +.uiIcon16.icon-grip-solid-vertical { background-position: -32px -224px; } +.uiIcon16.icon-grip-solid-horizontal { background-position: -48px -224px; } +.uiIcon16.icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.uiIcon16.icon-grip-diagonal-se { background-position: -80px -224px; } \ No newline at end of file diff --git a/nano/css/shared.css b/nano/css/shared.css index 958e7d1c9bd..8f7110ee152 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -189,6 +189,16 @@ h4 clear: both; padding: 8px; } +#uiNoJavaScript { + position: relative; + background: url(uiNoticeBackground.jpg) 50% 50%; + color: #000000; + font-size: 14px; + font-style: italic; + font-weight: bold; + padding: 3px 4px 3px 4px; + margin: 4px 0 4px 0; +} .good { diff --git a/nano/js/libraries.min.js b/nano/js/libraries.min.js index 5a35d7361ec..11c9ffb9182 100644 --- a/nano/js/libraries.min.js +++ b/nano/js/libraries.min.js @@ -1,31 +1 @@ -/*! - * jQuery JavaScript Library v1.10.2 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-07-03T13:48Z - */ -(function(a1,aE){var ag,w,aA=typeof aE,aJ=a1.location,l=a1.document,bV=l.documentElement,bh=a1.jQuery,G=a1.$,Y={},a5=[],s="1.10.2",aG=a5.concat,am=a5.push,a3=a5.slice,aK=a5.indexOf,y=Y.toString,T=Y.hasOwnProperty,aO=s.trim,bI=function(e,b3){return new bI.fn.init(e,b3,w)},bz=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,aa=/\S+/g,B=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,bq=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,a=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,bg=/^[\],:{}\s]*$/,bj=/(?:^|:|,)(?:\s*\[)+/g,bF=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,aX=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,bR=/^-ms-/,aT=/-([\da-z])/gi,K=function(e,b3){return b3.toUpperCase()},bW=function(e){if(l.addEventListener||e.type==="load"||l.readyState==="complete"){bk();bI.ready()}},bk=function(){if(l.addEventListener){l.removeEventListener("DOMContentLoaded",bW,false);a1.removeEventListener("load",bW,false)}else{l.detachEvent("onreadystatechange",bW);a1.detachEvent("onload",bW)}};bI.fn=bI.prototype={jquery:s,constructor:bI,init:function(e,b5,b4){var b3,b6;if(!e){return this}if(typeof e==="string"){if(e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3){b3=[null,e,null]}else{b3=bq.exec(e)}if(b3&&(b3[1]||!b5)){if(b3[1]){b5=b5 instanceof bI?b5[0]:b5;bI.merge(this,bI.parseHTML(b3[1],b5&&b5.nodeType?b5.ownerDocument||b5:l,true));if(a.test(b3[1])&&bI.isPlainObject(b5)){for(b3 in b5){if(bI.isFunction(this[b3])){this[b3](b5[b3])}else{this.attr(b3,b5[b3])}}}return this}else{b6=l.getElementById(b3[2]);if(b6&&b6.parentNode){if(b6.id!==b3[2]){return b4.find(e)}this.length=1;this[0]=b6}this.context=l;this.selector=e;return this}}else{if(!b5||b5.jquery){return(b5||b4).find(e)}else{return this.constructor(b5).find(e)}}}else{if(e.nodeType){this.context=this[0]=e;this.length=1;return this}else{if(bI.isFunction(e)){return b4.ready(e)}}}if(e.selector!==aE){this.selector=e.selector;this.context=e.context}return bI.makeArray(e,this)},selector:"",length:0,toArray:function(){return a3.call(this)},get:function(e){return e==null?this.toArray():(e<0?this[this.length+e]:this[e])},pushStack:function(e){var b3=bI.merge(this.constructor(),e);b3.prevObject=this;b3.context=this.context;return b3},each:function(b3,e){return bI.each(this,b3,e)},ready:function(e){bI.ready.promise().done(e);return this},slice:function(){return this.pushStack(a3.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(b4){var e=this.length,b3=+b4+(b4<0?e:0);return this.pushStack(b3>=0&&b30){return}ag.resolveWith(l,[bI]);if(bI.fn.trigger){bI(l).trigger("ready").off("ready")}},isFunction:function(e){return bI.type(e)==="function"},isArray:Array.isArray||function(e){return bI.type(e)==="array"},isWindow:function(e){return e!=null&&e==e.window},isNumeric:function(e){return !isNaN(parseFloat(e))&&isFinite(e)},type:function(e){if(e==null){return String(e)}return typeof e==="object"||typeof e==="function"?Y[y.call(e)]||"object":typeof e},isPlainObject:function(b5){var b3;if(!b5||bI.type(b5)!=="object"||b5.nodeType||bI.isWindow(b5)){return false}try{if(b5.constructor&&!T.call(b5,"constructor")&&!T.call(b5.constructor.prototype,"isPrototypeOf")){return false}}catch(b4){return false}if(bI.support.ownLast){for(b3 in b5){return T.call(b5,b3)}}for(b3 in b5){}return b3===aE||T.call(b5,b3)},isEmptyObject:function(b3){var e;for(e in b3){return false}return true},error:function(e){throw new Error(e)},parseHTML:function(b6,b4,b5){if(!b6||typeof b6!=="string"){return null}if(typeof b4==="boolean"){b5=b4;b4=false}b4=b4||l;var b3=a.exec(b6),e=!b5&&[];if(b3){return[b4.createElement(b3[1])]}b3=bI.buildFragment([b6],b4,e);if(e){bI(e).remove()}return bI.merge([],b3.childNodes)},parseJSON:function(e){if(a1.JSON&&a1.JSON.parse){return a1.JSON.parse(e)}if(e===null){return e}if(typeof e==="string"){e=bI.trim(e);if(e){if(bg.test(e.replace(bF,"@").replace(aX,"]").replace(bj,""))){return(new Function("return "+e))()}}}bI.error("Invalid JSON: "+e)},parseXML:function(b5){var b3,b4;if(!b5||typeof b5!=="string"){return null}try{if(a1.DOMParser){b4=new DOMParser();b3=b4.parseFromString(b5,"text/xml")}else{b3=new ActiveXObject("Microsoft.XMLDOM");b3.async="false";b3.loadXML(b5)}}catch(b6){b3=aE}if(!b3||!b3.documentElement||b3.getElementsByTagName("parsererror").length){bI.error("Invalid XML: "+b5)}return b3},noop:function(){},globalEval:function(e){if(e&&bI.trim(e)){(a1.execScript||function(b3){a1["eval"].call(a1,b3)})(e)}},camelCase:function(e){return e.replace(bR,"ms-").replace(aT,K)},nodeName:function(b3,e){return b3.nodeName&&b3.nodeName.toLowerCase()===e.toLowerCase()},each:function(b7,b8,b3){var b6,b4=0,b5=b7.length,e=Z(b7);if(b3){if(e){for(;b40&&(b3-1) in b4)}w=bI(l); -/*! - * Sizzle CSS Selector Engine v1.10.2 - * http://sizzlejs.com/ - * - * Copyright 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2013-07-03 - */ -(function(dc,ch){var cw,df,cc,cm,cF,cI,cT,dj,cG,cW,cA,cn,c5,c0,dd,cb,cD,c7="sizzle"+-(new Date()),cH=dc.document,dg=0,c1=0,b6=cy(),c6=cy(),cE=cy(),cU=false,cC=function(dk,e){if(dk===e){cU=true;return 0}return 0},db=typeof ch,cO=1<<31,cM=({}).hasOwnProperty,c9=[],da=c9.pop,cK=c9.push,b4=c9.push,cl=c9.slice,ca=c9.indexOf||function(dl){var dk=0,e=this.length;for(;dk+~]|"+co+")"+co+"*"),cY=new RegExp(co+"*[+~]"),cs=new RegExp("="+co+"*([^\\]'\"]*)"+co+"*\\]","g"),cQ=new RegExp(cj),cR=new RegExp("^"+cJ+"$"),cZ={ID:new RegExp("^#("+b3+")"),CLASS:new RegExp("^\\.("+b3+")"),TAG:new RegExp("^("+b3.replace("w","w*")+")"),ATTR:new RegExp("^"+c3),PSEUDO:new RegExp("^"+cj),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+co+"*(even|odd|(([+-]|)(\\d*)n|)"+co+"*(?:([+-]|)"+co+"*(\\d+)|))"+co+"*\\)|)","i"),bool:new RegExp("^(?:"+b5+")$","i"),needsContext:new RegExp("^"+co+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+co+"*((?:-\\d)?\\d*)"+co+"*\\)|)(?=[^-]|$)","i")},cN=/^[^{]+\{\s*\[native \w/,cP=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,b9=/^(?:input|select|textarea|button)$/i,ck=/^h\d$/i,cL=/'|\\/g,cr=new RegExp("\\\\([\\da-f]{1,6}"+co+"?|("+co+")|.)","ig"),c2=function(e,dm,dk){var dl="0x"+dm-65536;return dl!==dl||dk?dm:dl<0?String.fromCharCode(dl+65536):String.fromCharCode(dl>>10|55296,dl&1023|56320)};try{b4.apply((c9=cl.call(cH.childNodes)),cH.childNodes);c9[cH.childNodes.length].nodeType}catch(cB){b4={apply:c9.length?function(dk,e){cK.apply(dk,cl.call(e))}:function(dm,dl){var e=dm.length,dk=0;while((dm[e++]=dl[dk++])){}dm.length=e-1}}}function cu(ds,dk,dw,dy){var dx,dp,dq,du,dv,dn,dm,e,dl,dt;if((dk?dk.ownerDocument||dk:cH)!==cA){cW(dk)}dk=dk||cA;dw=dw||[];if(!ds||typeof ds!=="string"){return dw}if((du=dk.nodeType)!==1&&du!==9){return[]}if(c5&&!dy){if((dx=cP.exec(ds))){if((dq=dx[1])){if(du===9){dp=dk.getElementById(dq);if(dp&&dp.parentNode){if(dp.id===dq){dw.push(dp);return dw}}else{return dw}}else{if(dk.ownerDocument&&(dp=dk.ownerDocument.getElementById(dq))&&cD(dk,dp)&&dp.id===dq){dw.push(dp);return dw}}}else{if(dx[2]){b4.apply(dw,dk.getElementsByTagName(ds));return dw}else{if((dq=dx[3])&&df.getElementsByClassName&&dk.getElementsByClassName){b4.apply(dw,dk.getElementsByClassName(dq));return dw}}}}if(df.qsa&&(!c0||!c0.test(ds))){e=dm=c7;dl=dk;dt=du===9&&ds;if(du===1&&dk.nodeName.toLowerCase()!=="object"){dn=cf(ds);if((dm=dk.getAttribute("id"))){e=dm.replace(cL,"\\$&")}else{dk.setAttribute("id",e)}e="[id='"+e+"'] ";dv=dn.length;while(dv--){dn[dv]=e+cg(dn[dv])}dl=cY.test(ds)&&dk.parentNode||dk;dt=dn.join(",")}if(dt){try{b4.apply(dw,dl.querySelectorAll(dt));return dw}catch(dr){}finally{if(!dm){dk.removeAttribute("id")}}}}}return de(ds.replace(cq,"$1"),dk,dw,dy)}function cy(){var dk=[];function e(dl,dm){if(dk.push(dl+=" ")>cm.cacheLength){delete e[dk.shift()]}return(e[dl]=dm)}return e}function ci(e){e[c7]=true;return e}function cd(dk){var dm=cA.createElement("div");try{return !!dk(dm)}catch(dl){return false}finally{if(dm.parentNode){dm.parentNode.removeChild(dm)}dm=null}}function dh(dk,dm){var e=dk.split("|"),dl=dk.length;while(dl--){cm.attrHandle[e[dl]]=dm}}function b7(dk,e){var dm=e&&dk,dl=dm&&dk.nodeType===1&&e.nodeType===1&&(~e.sourceIndex||cO)-(~dk.sourceIndex||cO);if(dl){return dl}if(dm){while((dm=dm.nextSibling)){if(dm===e){return -1}}}return dk?1:-1}function cv(e){return function(dl){var dk=dl.nodeName.toLowerCase();return dk==="input"&&dl.type===e}}function b8(e){return function(dl){var dk=dl.nodeName.toLowerCase();return(dk==="input"||dk==="button")&&dl.type===e}}function c4(e){return ci(function(dk){dk=+dk;return ci(function(dl,dq){var dn,dm=e([],dl.length,dk),dp=dm.length;while(dp--){if(dl[(dn=dm[dp])]){dl[dn]=!(dq[dn]=dl[dn])}}})})}cI=cu.isXML=function(e){var dk=e&&(e.ownerDocument||e).documentElement;return dk?dk.nodeName!=="HTML":false};df=cu.support={};cW=cu.setDocument=function(dk){var dl=dk?dk.ownerDocument||dk:cH,e=dl.defaultView;if(dl===cA||dl.nodeType!==9||!dl.documentElement){return cA}cA=dl;cn=dl.documentElement;c5=!cI(dl);if(e&&e.attachEvent&&e!==e.top){e.attachEvent("onbeforeunload",function(){cW()})}df.attributes=cd(function(dm){dm.className="i";return !dm.getAttribute("className")});df.getElementsByTagName=cd(function(dm){dm.appendChild(dl.createComment(""));return !dm.getElementsByTagName("*").length});df.getElementsByClassName=cd(function(dm){dm.innerHTML="
";dm.firstChild.className="i";return dm.getElementsByClassName("i").length===2});df.getById=cd(function(dm){cn.appendChild(dm).id=c7;return !dl.getElementsByName||!dl.getElementsByName(c7).length});if(df.getById){cm.find.ID=function(dp,dn){if(typeof dn.getElementById!==db&&c5){var dm=dn.getElementById(dp);return dm&&dm.parentNode?[dm]:[]}};cm.filter.ID=function(dn){var dm=dn.replace(cr,c2);return function(dp){return dp.getAttribute("id")===dm}}}else{delete cm.find.ID;cm.filter.ID=function(dn){var dm=dn.replace(cr,c2);return function(dq){var dp=typeof dq.getAttributeNode!==db&&dq.getAttributeNode("id");return dp&&dp.value===dm}}}cm.find.TAG=df.getElementsByTagName?function(dm,dn){if(typeof dn.getElementsByTagName!==db){return dn.getElementsByTagName(dm)}}:function(dm,dr){var ds,dq=[],dp=0,dn=dr.getElementsByTagName(dm);if(dm==="*"){while((ds=dn[dp++])){if(ds.nodeType===1){dq.push(ds)}}return dq}return dn};cm.find.CLASS=df.getElementsByClassName&&function(dn,dm){if(typeof dm.getElementsByClassName!==db&&c5){return dm.getElementsByClassName(dn)}};dd=[];c0=[];if((df.qsa=cN.test(dl.querySelectorAll))){cd(function(dm){dm.innerHTML="";if(!dm.querySelectorAll("[selected]").length){c0.push("\\["+co+"*(?:value|"+b5+")")}if(!dm.querySelectorAll(":checked").length){c0.push(":checked")}});cd(function(dn){var dm=dl.createElement("input");dm.setAttribute("type","hidden");dn.appendChild(dm).setAttribute("t","");if(dn.querySelectorAll("[t^='']").length){c0.push("[*^$]="+co+"*(?:''|\"\")")}if(!dn.querySelectorAll(":enabled").length){c0.push(":enabled",":disabled")}dn.querySelectorAll("*,:x");c0.push(",.*:")})}if((df.matchesSelector=cN.test((cb=cn.webkitMatchesSelector||cn.mozMatchesSelector||cn.oMatchesSelector||cn.msMatchesSelector)))){cd(function(dm){df.disconnectedMatch=cb.call(dm,"div");cb.call(dm,"[s!='']:x");dd.push("!=",cj)})}c0=c0.length&&new RegExp(c0.join("|"));dd=dd.length&&new RegExp(dd.join("|"));cD=cN.test(cn.contains)||cn.compareDocumentPosition?function(dn,dm){var dq=dn.nodeType===9?dn.documentElement:dn,dp=dm&&dm.parentNode;return dn===dp||!!(dp&&dp.nodeType===1&&(dq.contains?dq.contains(dp):dn.compareDocumentPosition&&dn.compareDocumentPosition(dp)&16))}:function(dn,dm){if(dm){while((dm=dm.parentNode)){if(dm===dn){return true}}}return false};cC=cn.compareDocumentPosition?function(dn,dm){if(dn===dm){cU=true;return 0}var dp=dm.compareDocumentPosition&&dn.compareDocumentPosition&&dn.compareDocumentPosition(dm);if(dp){if(dp&1||(!df.sortDetached&&dm.compareDocumentPosition(dn)===dp)){if(dn===dl||cD(cH,dn)){return -1}if(dm===dl||cD(cH,dm)){return 1}return cG?(ca.call(cG,dn)-ca.call(cG,dm)):0}return dp&4?-1:1}return dn.compareDocumentPosition?-1:1}:function(dn,dm){var du,dr=0,dt=dn.parentNode,dq=dm.parentNode,dp=[dn],ds=[dm];if(dn===dm){cU=true;return 0}else{if(!dt||!dq){return dn===dl?-1:dm===dl?1:dt?-1:dq?1:cG?(ca.call(cG,dn)-ca.call(cG,dm)):0}else{if(dt===dq){return b7(dn,dm)}}}du=dn;while((du=du.parentNode)){dp.unshift(du)}du=dm;while((du=du.parentNode)){ds.unshift(du)}while(dp[dr]===ds[dr]){dr++}return dr?b7(dp[dr],ds[dr]):dp[dr]===cH?-1:ds[dr]===cH?1:0};return dl};cu.matches=function(dk,e){return cu(dk,null,null,e)};cu.matchesSelector=function(dl,dn){if((dl.ownerDocument||dl)!==cA){cW(dl)}dn=dn.replace(cs,"='$1']");if(df.matchesSelector&&c5&&(!dd||!dd.test(dn))&&(!c0||!c0.test(dn))){try{var dk=cb.call(dl,dn);if(dk||df.disconnectedMatch||dl.document&&dl.document.nodeType!==11){return dk}}catch(dm){}}return cu(dn,cA,null,[dl]).length>0};cu.contains=function(e,dk){if((e.ownerDocument||e)!==cA){cW(e)}return cD(e,dk)};cu.attr=function(dl,e){if((dl.ownerDocument||dl)!==cA){cW(dl)}var dk=cm.attrHandle[e.toLowerCase()],dm=dk&&cM.call(cm.attrHandle,e.toLowerCase())?dk(dl,e,!c5):ch;return dm===ch?df.attributes||!c5?dl.getAttribute(e):(dm=dl.getAttributeNode(e))&&dm.specified?dm.value:null:dm};cu.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};cu.uniqueSort=function(dl){var dm,dn=[],e=0,dk=0;cU=!df.detectDuplicates;cG=!df.sortStable&&dl.slice(0);dl.sort(cC);if(cU){while((dm=dl[dk++])){if(dm===dl[dk]){e=dn.push(dk)}}while(e--){dl.splice(dn[e],1)}}return dl};cF=cu.getText=function(dn){var dm,dk="",dl=0,e=dn.nodeType;if(!e){for(;(dm=dn[dl]);dl++){dk+=cF(dm)}}else{if(e===1||e===9||e===11){if(typeof dn.textContent==="string"){return dn.textContent}else{for(dn=dn.firstChild;dn;dn=dn.nextSibling){dk+=cF(dn)}}}else{if(e===3||e===4){return dn.nodeValue}}}return dk};cm=cu.selectors={cacheLength:50,createPseudo:ci,match:cZ,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){e[1]=e[1].replace(cr,c2);e[3]=(e[4]||e[5]||"").replace(cr,c2);if(e[2]==="~="){e[3]=" "+e[3]+" "}return e.slice(0,4)},CHILD:function(e){e[1]=e[1].toLowerCase();if(e[1].slice(0,3)==="nth"){if(!e[3]){cu.error(e[0])}e[4]=+(e[4]?e[5]+(e[6]||1):2*(e[3]==="even"||e[3]==="odd"));e[5]=+((e[7]+e[8])||e[3]==="odd")}else{if(e[3]){cu.error(e[0])}}return e},PSEUDO:function(dk){var e,dl=!dk[5]&&dk[2];if(cZ.CHILD.test(dk[0])){return null}if(dk[3]&&dk[4]!==ch){dk[2]=dk[4]}else{if(dl&&cQ.test(dl)&&(e=cf(dl,true))&&(e=dl.indexOf(")",dl.length-e)-dl.length)){dk[0]=dk[0].slice(0,e);dk[2]=dl.slice(0,e)}}return dk.slice(0,3)}},filter:{TAG:function(dk){var e=dk.replace(cr,c2).toLowerCase();return dk==="*"?function(){return true}:function(dl){return dl.nodeName&&dl.nodeName.toLowerCase()===e}},CLASS:function(e){var dk=b6[e+" "];return dk||(dk=new RegExp("(^|"+co+")"+e+"("+co+"|$)"))&&b6(e,function(dl){return dk.test(typeof dl.className==="string"&&dl.className||typeof dl.getAttribute!==db&&dl.getAttribute("class")||"")})},ATTR:function(dl,dk,e){return function(dn){var dm=cu.attr(dn,dl);if(dm==null){return dk==="!="}if(!dk){return true}dm+="";return dk==="="?dm===e:dk==="!="?dm!==e:dk==="^="?e&&dm.indexOf(e)===0:dk==="*="?e&&dm.indexOf(e)>-1:dk==="$="?e&&dm.slice(-e.length)===e:dk==="~="?(" "+dm+" ").indexOf(e)>-1:dk==="|="?dm===e||dm.slice(0,e.length+1)===e+"-":false}},CHILD:function(dk,dn,dm,dp,dl){var dr=dk.slice(0,3)!=="nth",e=dk.slice(-4)!=="last",dq=dn==="of-type";return dp===1&&dl===0?function(ds){return !!ds.parentNode}:function(dy,dw,dB){var ds,dE,dz,dD,dA,dv,dx=dr!==e?"nextSibling":"previousSibling",dC=dy.parentNode,du=dq&&dy.nodeName.toLowerCase(),dt=!dB&&!dq;if(dC){if(dr){while(dx){dz=dy;while((dz=dz[dx])){if(dq?dz.nodeName.toLowerCase()===du:dz.nodeType===1){return false}}dv=dx=dk==="only"&&!dv&&"nextSibling"}return true}dv=[e?dC.firstChild:dC.lastChild];if(e&&dt){dE=dC[c7]||(dC[c7]={});ds=dE[dk]||[];dA=ds[0]===dg&&ds[1];dD=ds[0]===dg&&ds[2];dz=dA&&dC.childNodes[dA];while((dz=++dA&&dz&&dz[dx]||(dD=dA=0)||dv.pop())){if(dz.nodeType===1&&++dD&&dz===dy){dE[dk]=[dg,dA,dD];break}}}else{if(dt&&(ds=(dy[c7]||(dy[c7]={}))[dk])&&ds[0]===dg){dD=ds[1]}else{while((dz=++dA&&dz&&dz[dx]||(dD=dA=0)||dv.pop())){if((dq?dz.nodeName.toLowerCase()===du:dz.nodeType===1)&&++dD){if(dt){(dz[c7]||(dz[c7]={}))[dk]=[dg,dD]}if(dz===dy){break}}}}}dD-=dl;return dD===dp||(dD%dp===0&&dD/dp>=0)}}},PSEUDO:function(dm,dl){var e,dk=cm.pseudos[dm]||cm.setFilters[dm.toLowerCase()]||cu.error("unsupported pseudo: "+dm);if(dk[c7]){return dk(dl)}if(dk.length>1){e=[dm,dm,"",dl];return cm.setFilters.hasOwnProperty(dm.toLowerCase())?ci(function(dq,ds){var dp,dn=dk(dq,dl),dr=dn.length;while(dr--){dp=ca.call(dq,dn[dr]);dq[dp]=!(ds[dp]=dn[dr])}}):function(dn){return dk(dn,0,e)}}return dk}},pseudos:{not:ci(function(e){var dk=[],dl=[],dm=cT(e.replace(cq,"$1"));return dm[c7]?ci(function(dp,du,ds,dq){var dt,dn=dm(dp,null,dq,[]),dr=dp.length;while(dr--){if((dt=dn[dr])){dp[dr]=!(du[dr]=dt)}}}):function(dq,dp,dn){dk[0]=dq;dm(dk,null,dn,dl);return !dl.pop()}}),has:ci(function(e){return function(dk){return cu(e,dk).length>0}}),contains:ci(function(e){return function(dk){return(dk.textContent||dk.innerText||cF(dk)).indexOf(e)>-1}}),lang:ci(function(e){if(!cR.test(e||"")){cu.error("unsupported lang: "+e)}e=e.replace(cr,c2).toLowerCase();return function(dl){var dk;do{if((dk=c5?dl.lang:dl.getAttribute("xml:lang")||dl.getAttribute("lang"))){dk=dk.toLowerCase();return dk===e||dk.indexOf(e+"-")===0}}while((dl=dl.parentNode)&&dl.nodeType===1);return false}}),target:function(e){var dk=dc.location&&dc.location.hash;return dk&&dk.slice(1)===e.id},root:function(e){return e===cn},focus:function(e){return e===cA.activeElement&&(!cA.hasFocus||cA.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===false},disabled:function(e){return e.disabled===true},checked:function(e){var dk=e.nodeName.toLowerCase();return(dk==="input"&&!!e.checked)||(dk==="option"&&!!e.selected)},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling){if(e.nodeName>"@"||e.nodeType===3||e.nodeType===4){return false}}return true},parent:function(e){return !cm.pseudos.empty(e)},header:function(e){return ck.test(e.nodeName)},input:function(e){return b9.test(e.nodeName)},button:function(dk){var e=dk.nodeName.toLowerCase();return e==="input"&&dk.type==="button"||e==="button"},text:function(dk){var e;return dk.nodeName.toLowerCase()==="input"&&dk.type==="text"&&((e=dk.getAttribute("type"))==null||e.toLowerCase()===dk.type)},first:c4(function(){return[0]}),last:c4(function(e,dk){return[dk-1]}),eq:c4(function(e,dl,dk){return[dk<0?dk+dl:dk]}),even:c4(function(e,dl){var dk=0;for(;dk=0;){e.push(dk)}return e}),gt:c4(function(e,dm,dl){var dk=dl<0?dl+dm:dl;for(;++dk1?function(dn,dm,dk){var dl=e.length;while(dl--){if(!e[dl](dn,dm,dk)){return false}}return true}:e[0]}function cX(e,dk,dl,dm,dq){var dn,dt=[],dp=0,dr=e.length,ds=dk!=null;for(;dp-1){dA[dC]=!(dx[dC]=du)}}}}else{dw=cX(dw===dx?dw.splice(dr,dw.length):dw);if(dp){dp(null,dx,dw,dz)}else{b4.apply(dx,dw)}}})}function c8(dq){var dk,dn,dl,dp=dq.length,dt=cm.relative[dq[0].type],du=dt||cm.relative[" "],dm=dt?1:0,dr=cp(function(dv){return dv===dk},du,true),ds=cp(function(dv){return ca.call(dk,dv)>-1},du,true),e=[function(dx,dw,dv){return(!dt&&(dv||dw!==dj))||((dk=dw).nodeType?dr(dx,dw,dv):ds(dx,dw,dv))}];for(;dm1&&di(e),dm>1&&cg(dq.slice(0,dm-1).concat({value:dq[dm-2].type===" "?"*":""})).replace(cq,"$1"),dn,dm0,dn=dm.length>0,dk=function(dz,dt,dy,dx,dF){var du,dv,dA,dE=[],dD=0,dw="0",dq=dz&&[],dB=dF!=null,dC=dj,ds=dz||dn&&cm.find.TAG("*",dF&&dt.parentNode||dt),dr=(dg+=dC==null?1:Math.random()||0.1);if(dB){dj=dt!==cA&&dt;cc=dp}for(;(du=ds[dw])!=null;dw++){if(dn&&du){dv=0;while((dA=dm[dv++])){if(dA(du,dt,dy)){dx.push(du);break}}if(dB){dg=dr;cc=++dp}}if(e){if((du=!dA&&du)){dD--}if(dz){dq.push(du)}}}dD+=dw;if(e&&dw!==dD){dv=0;while((dA=dl[dv++])){dA(dq,dE,dt,dy)}if(dz){if(dD>0){while(dw--){if(!(dq[dw]||dE[dw])){dE[dw]=da.call(dx)}}}dE=cX(dE)}b4.apply(dx,dE);if(dB&&!dz&&dE.length>0&&(dD+dl.length)>1){cu.uniqueSort(dx)}}if(dB){dg=dr;dj=dC}return dq};return e?ci(dk):dk}cT=cu.compile=function(e,dp){var dl,dk=[],dn=[],dm=cE[e+" "];if(!dm){if(!dp){dp=cf(e)}dl=dp.length;while(dl--){dm=c8(dp[dl]);if(dm[c7]){dk.push(dm)}else{dn.push(dm)}}dm=cE(e,cV(dn,dk))}return dm};function cx(dk,dn,dm){var dl=0,e=dn.length;for(;dl2&&(dk=ds[0]).type==="ID"&&df.getById&&e.nodeType===9&&c5&&cm.relative[ds[1].type]){e=(cm.find.ID(dk.matches[0].replace(cr,c2),e)||[])[0];if(!e){return dm}dl=dl.slice(ds.shift().value.length)}dn=cZ.needsContext.test(dl)?0:ds.length;while(dn--){dk=ds[dn];if(cm.relative[(dt=dk.type)]){break}if((dr=cm.find[dt])){if((dq=dr(dk.matches[0].replace(cr,c2),cY.test(ds[0].type)&&e.parentNode||e))){ds.splice(dn,1);dl=dq.length&&cg(ds);if(!dl){b4.apply(dm,dq);return dm}break}}}}}cT(dl,dp)(dq,e,!c5,dm,cY.test(dl));return dm}df.sortStable=c7.split("").sort(cC).join("")===c7;df.detectDuplicates=cU;cW();df.sortDetached=cd(function(e){return e.compareDocumentPosition(cA.createElement("div"))&1});if(!cd(function(e){e.innerHTML="";return e.firstChild.getAttribute("href")==="#"})){dh("type|href|height|width",function(dk,e,dl){if(!dl){return dk.getAttribute(e,e.toLowerCase()==="type"?1:2)}})}if(!df.attributes||!cd(function(e){e.innerHTML="";e.firstChild.setAttribute("value","");return e.firstChild.getAttribute("value")===""})){dh("value",function(dk,e,dl){if(!dl&&dk.nodeName.toLowerCase()==="input"){return dk.defaultValue}})}if(!cd(function(e){return e.getAttribute("disabled")==null})){dh(b5,function(dk,e,dm){var dl;if(!dm){return(dl=dk.getAttributeNode(e))&&dl.specified?dl.value:dk[e]===true?e.toLowerCase():null}})}bI.find=cu;bI.expr=cu.selectors;bI.expr[":"]=bI.expr.pseudos;bI.unique=cu.uniqueSort;bI.text=cu.getText;bI.isXMLDoc=cu.isXML;bI.contains=cu.contains})(a1);var bY={};function ac(b3){var e=bY[b3]={};bI.each(b3.match(aa)||[],function(b5,b4){e[b4]=true});return e}bI.Callbacks=function(cc){cc=typeof cc==="string"?(bY[cc]||ac(cc)):bI.extend({},cc);var b6,b5,e,b7,b8,b4,b9=[],ca=!cc.once&&[],b3=function(cd){b5=cc.memory&&cd;e=true;b8=b4||0;b4=0;b7=b9.length;b6=true;for(;b9&&b8-1){b9.splice(ce,1);if(b6){if(ce<=b7){b7--}if(ce<=b8){b8--}}}})}return this},has:function(cd){return cd?bI.inArray(cd,b9)>-1:!!(b9&&b9.length)},empty:function(){b9=[];b7=0;return this},disable:function(){b9=ca=b5=aE;return this},disabled:function(){return !b9},lock:function(){ca=aE;if(!b5){cb.disable()}return this},locked:function(){return !ca},fireWith:function(ce,cd){if(b9&&(!e||ca)){cd=cd||[];cd=[ce,cd.slice?cd.slice():cd];if(b6){ca.push(cd)}else{b3(cd)}}return this},fire:function(){cb.fireWith(this,arguments);return this},fired:function(){return !!e}};return cb};bI.extend({Deferred:function(b4){var b3=[["resolve","done",bI.Callbacks("once memory"),"resolved"],["reject","fail",bI.Callbacks("once memory"),"rejected"],["notify","progress",bI.Callbacks("memory")]],b5="pending",b6={state:function(){return b5},always:function(){e.done(arguments).fail(arguments);return this},then:function(){var b7=arguments;return bI.Deferred(function(b8){bI.each(b3,function(ca,b9){var cc=b9[0],cb=bI.isFunction(b7[ca])&&b7[ca];e[b9[1]](function(){var cd=cb&&cb.apply(this,arguments);if(cd&&bI.isFunction(cd.promise)){cd.promise().done(b8.resolve).fail(b8.reject).progress(b8.notify)}else{b8[cc+"With"](this===b6?b8.promise():this,cb?[cd]:arguments)}})});b7=null}).promise()},promise:function(b7){return b7!=null?bI.extend(b7,b6):b6}},e={};b6.pipe=b6.then;bI.each(b3,function(b8,b7){var ca=b7[2],b9=b7[3];b6[b7[1]]=ca.add;if(b9){ca.add(function(){b5=b9},b3[b8^1][2].disable,b3[2][2].lock)}e[b7[0]]=function(){e[b7[0]+"With"](this===e?b6:this,arguments);return this};e[b7[0]+"With"]=ca.fireWith});b6.promise(e);if(b4){b4.call(e,e)}return e},when:function(b6){var b4=0,b8=a3.call(arguments),e=b8.length,b3=e!==1||(b6&&bI.isFunction(b6.promise))?e:0,cb=b3===1?b6:bI.Deferred(),b5=function(cd,ce,cc){return function(cf){ce[cd]=this;cc[cd]=arguments.length>1?a3.call(arguments):cf;if(cc===ca){cb.notifyWith(ce,cc)}else{if(!(--b3)){cb.resolveWith(ce,cc)}}}},ca,b7,b9;if(e>1){ca=new Array(e);b7=new Array(e);b9=new Array(e);for(;b4
a";cd=b3.getElementsByTagName("*")||[];cb=b3.getElementsByTagName("a")[0];if(!cb||!cb.style||!cd.length){return ce}cc=l.createElement("select");b5=cc.appendChild(l.createElement("option"));ca=b3.getElementsByTagName("input")[0];cb.style.cssText="top:1px;float:left;opacity:.5";ce.getSetAttribute=b3.className!=="t";ce.leadingWhitespace=b3.firstChild.nodeType===3;ce.tbody=!b3.getElementsByTagName("tbody").length;ce.htmlSerialize=!!b3.getElementsByTagName("link").length;ce.style=/top/.test(cb.getAttribute("style"));ce.hrefNormalized=cb.getAttribute("href")==="/a";ce.opacity=/^0.5/.test(cb.style.opacity);ce.cssFloat=!!cb.style.cssFloat;ce.checkOn=!!ca.value;ce.optSelected=b5.selected;ce.enctype=!!l.createElement("form").enctype;ce.html5Clone=l.createElement("nav").cloneNode(true).outerHTML!=="<:nav>";ce.inlineBlockNeedsLayout=false;ce.shrinkWrapBlocks=false;ce.pixelPosition=false;ce.deleteExpando=true;ce.noCloneEvent=true;ce.reliableMarginRight=true;ce.boxSizingReliable=true;ca.checked=true;ce.noCloneChecked=ca.cloneNode(true).checked;cc.disabled=true;ce.optDisabled=!b5.disabled;try{delete b3.test}catch(b8){ce.deleteExpando=false}ca=l.createElement("input");ca.setAttribute("value","");ce.input=ca.getAttribute("value")==="";ca.value="t";ca.setAttribute("type","radio");ce.radioValue=ca.value==="t";ca.setAttribute("checked","t");ca.setAttribute("name","t");b9=l.createDocumentFragment();b9.appendChild(ca);ce.appendChecked=ca.checked;ce.checkClone=b9.cloneNode(true).cloneNode(true).lastChild.checked;if(b3.attachEvent){b3.attachEvent("onclick",function(){ce.noCloneEvent=false});b3.cloneNode(true).click()}for(b6 in {submit:true,change:true,focusin:true}){b3.setAttribute(b7="on"+b6,"t");ce[b6+"Bubbles"]=b7 in a1||b3.attributes[b7].expando===false}b3.style.backgroundClip="content-box";b3.cloneNode(true).style.backgroundClip="";ce.clearCloneStyle=b3.style.backgroundClip==="content-box";for(b6 in bI(ce)){break}ce.ownLast=b6!=="0";bI(function(){var cf,ci,ch,cg="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",e=l.getElementsByTagName("body")[0];if(!e){return}cf=l.createElement("div");cf.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";e.appendChild(cf).appendChild(b3);b3.innerHTML="
t
";ch=b3.getElementsByTagName("td");ch[0].style.cssText="padding:0;margin:0;border:0;display:none";b4=(ch[0].offsetHeight===0);ch[0].style.display="";ch[1].style.display="none";ce.reliableHiddenOffsets=b4&&(ch[0].offsetHeight===0);b3.innerHTML="";b3.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";bI.swap(e,e.style.zoom!=null?{zoom:1}:{},function(){ce.boxSizing=b3.offsetWidth===4});if(a1.getComputedStyle){ce.pixelPosition=(a1.getComputedStyle(b3,null)||{}).top!=="1%";ce.boxSizingReliable=(a1.getComputedStyle(b3,null)||{width:"4px"}).width==="4px";ci=b3.appendChild(l.createElement("div"));ci.style.cssText=b3.style.cssText=cg;ci.style.marginRight=ci.style.width="0";b3.style.width="1px";ce.reliableMarginRight=!parseFloat((a1.getComputedStyle(ci,null)||{}).marginRight)}if(typeof b3.style.zoom!==aA){b3.innerHTML="";b3.style.cssText=cg+"width:1px;padding:1px;display:inline;zoom:1";ce.inlineBlockNeedsLayout=(b3.offsetWidth===3);b3.style.display="block";b3.innerHTML="
";b3.firstChild.style.width="5px";ce.shrinkWrapBlocks=(b3.offsetWidth!==3);if(ce.inlineBlockNeedsLayout){e.style.zoom=1}}e.removeChild(cf);cf=b3=ch=ci=null});cd=cc=b9=b5=cb=ca=null;return ce})({});var bv=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,aL=/([A-Z])/g;function a9(b5,b3,b7,b6){if(!bI.acceptData(b5)){return}var b9,b8,ca=bI.expando,cb=b5.nodeType,e=cb?bI.cache:b5,b4=cb?b5[ca]:b5[ca]&&ca;if((!b4||!e[b4]||(!b6&&!e[b4].data))&&b7===aE&&typeof b3==="string"){return}if(!b4){if(cb){b4=b5[ca]=a5.pop()||bI.guid++}else{b4=ca}}if(!e[b4]){e[b4]=cb?{}:{toJSON:bI.noop}}if(typeof b3==="object"||typeof b3==="function"){if(b6){e[b4]=bI.extend(e[b4],b3)}else{e[b4].data=bI.extend(e[b4].data,b3)}}b8=e[b4];if(!b6){if(!b8.data){b8.data={}}b8=b8.data}if(b7!==aE){b8[bI.camelCase(b3)]=b7}if(typeof b3==="string"){b9=b8[b3];if(b9==null){b9=b8[bI.camelCase(b3)]}}else{b9=b8}return b9}function X(b6,b4,e){if(!bI.acceptData(b6)){return}var b8,b5,b7=b6.nodeType,b3=b7?bI.cache:b6,b9=b7?b6[bI.expando]:bI.expando;if(!b3[b9]){return}if(b4){b8=e?b3[b9]:b3[b9].data;if(b8){if(!bI.isArray(b4)){if(b4 in b8){b4=[b4]}else{b4=bI.camelCase(b4);if(b4 in b8){b4=[b4]}else{b4=b4.split(" ")}}}else{b4=b4.concat(bI.map(b4,bI.camelCase))}b5=b4.length;while(b5--){delete b8[b4[b5]]}if(e?!L(b8):!bI.isEmptyObject(b8)){return}}}if(!e){delete b3[b9].data;if(!L(b3[b9])){return}}if(b7){bI.cleanData([b6],true)}else{if(bI.support.deleteExpando||b3!=b3.window){delete b3[b9]}else{b3[b9]=null}}}bI.extend({cache:{},noData:{applet:true,embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){e=e.nodeType?bI.cache[e[bI.expando]]:e[bI.expando];return !!e&&!L(e)},data:function(b3,e,b4){return a9(b3,e,b4)},removeData:function(b3,e){return X(b3,e)},_data:function(b3,e,b4){return a9(b3,e,b4,true)},_removeData:function(b3,e){return X(b3,e,true)},acceptData:function(b3){if(b3.nodeType&&b3.nodeType!==1&&b3.nodeType!==9){return false}var e=b3.nodeName&&bI.noData[b3.nodeName.toLowerCase()];return !e||e!==true&&b3.getAttribute("classid")===e}});bI.fn.extend({data:function(b5,b8){var b3,e,b7=null,b4=0,b6=this[0];if(b5===aE){if(this.length){b7=bI.data(b6);if(b6.nodeType===1&&!bI._data(b6,"parsedAttrs")){b3=b6.attributes;for(;b41?this.each(function(){bI.data(this,b5,b8)}):b6?bx(b6,b5,bI.data(b6,b5)):null},removeData:function(e){return this.each(function(){bI.removeData(this,e)})}});function bx(b5,b4,b6){if(b6===aE&&b5.nodeType===1){var b3="data-"+b4.replace(aL,"-$1").toLowerCase();b6=b5.getAttribute(b3);if(typeof b6==="string"){try{b6=b6==="true"?true:b6==="false"?false:b6==="null"?null:+b6+""===b6?+b6:bv.test(b6)?bI.parseJSON(b6):b6}catch(b7){}bI.data(b5,b4,b6)}else{b6=aE}}return b6}function L(b3){var e;for(e in b3){if(e==="data"&&bI.isEmptyObject(b3[e])){continue}if(e!=="toJSON"){return false}}return true}bI.extend({queue:function(b4,b3,b5){var e;if(b4){b3=(b3||"fx")+"queue";e=bI._data(b4,b3);if(b5){if(!e||bI.isArray(b5)){e=bI._data(b4,b3,bI.makeArray(b5))}else{e.push(b5)}}return e||[]}},dequeue:function(b7,b6){b6=b6||"fx";var b3=bI.queue(b7,b6),b8=b3.length,b5=b3.shift(),e=bI._queueHooks(b7,b6),b4=function(){bI.dequeue(b7,b6)};if(b5==="inprogress"){b5=b3.shift();b8--}if(b5){if(b6==="fx"){b3.unshift("inprogress")}delete e.stop;b5.call(b7,b4,e)}if(!b8&&e){e.empty.fire()}},_queueHooks:function(b4,b3){var e=b3+"queueHooks";return bI._data(b4,e)||bI._data(b4,e,{empty:bI.Callbacks("once memory").add(function(){bI._removeData(b4,b3+"queue");bI._removeData(b4,e)})})}});bI.fn.extend({queue:function(e,b3){var b4=2;if(typeof e!=="string"){b3=e;e="fx";b4--}if(arguments.length1)},removeAttr:function(e){return this.each(function(){bI.removeAttr(this,e)})},prop:function(e,b3){return bI.access(this,bI.prop,e,b3,arguments.length>1)},removeProp:function(e){e=bI.propFix[e]||e;return this.each(function(){try{this[e]=aE;delete this[e]}catch(b3){}})},addClass:function(b9){var b3,e,ca,b6,b4,b5=0,b7=this.length,b8=typeof b9==="string"&&b9;if(bI.isFunction(b9)){return this.each(function(cb){bI(this).addClass(b9.call(this,cb,this.className))})}if(b8){b3=(b9||"").match(aa)||[];for(;b5=0){ca=ca.replace(" "+b6+" "," ")}}e.className=b9?bI.trim(ca):""}}}return this},toggleClass:function(b4,e){var b3=typeof b4;if(typeof e==="boolean"&&b3==="string"){return e?this.addClass(b4):this.removeClass(b4)}if(bI.isFunction(b4)){return this.each(function(b5){bI(this).toggleClass(b4.call(this,b5,this.className,e),e)})}return this.each(function(){if(b3==="string"){var b7,b6=0,b5=bI(this),b8=b4.match(aa)||[];while((b7=b8[b6++])){if(b5.hasClass(b7)){b5.removeClass(b7)}else{b5.addClass(b7)}}}else{if(b3===aA||b3==="boolean"){if(this.className){bI._data(this,"__className__",this.className)}this.className=this.className||b4===false?"":bI._data(this,"__className__")||""}}})},hasClass:function(e){var b5=" "+e+" ",b4=0,b3=this.length;for(;b4=0){return true}}return false},val:function(b5){var b3,e,b6,b4=this[0];if(!arguments.length){if(b4){e=bI.valHooks[b4.type]||bI.valHooks[b4.nodeName.toLowerCase()];if(e&&"get" in e&&(b3=e.get(b4,"value"))!==aE){return b3}b3=b4.value;return typeof b3==="string"?b3.replace(ah,""):b3==null?"":b3}return}b6=bI.isFunction(b5);return this.each(function(b7){var b8;if(this.nodeType!==1){return}if(b6){b8=b5.call(this,b7,bI(this).val())}else{b8=b5}if(b8==null){b8=""}else{if(typeof b8==="number"){b8+=""}else{if(bI.isArray(b8)){b8=bI.map(b8,function(b9){return b9==null?"":b9+""})}}}e=bI.valHooks[this.type]||bI.valHooks[this.nodeName.toLowerCase()];if(!e||!("set" in e)||e.set(this,b8,"value")===aE){this.value=b8}})}});bI.extend({valHooks:{option:{get:function(e){var b3=bI.find.attr(e,"value");return b3!=null?b3:e.text}},select:{get:function(e){var b8,b4,ca=e.options,b6=e.selectedIndex,b5=e.type==="select-one"||b6<0,b9=b5?null:[],b7=b5?b6+1:ca.length,b3=b6<0?b7:b5?b6:0;for(;b3=0)){b8=true}}if(!b8){b6.selectedIndex=-1}return e}}},attr:function(b6,b5,b7){var e,b4,b3=b6.nodeType;if(!b6||b3===3||b3===8||b3===2){return}if(typeof b6.getAttribute===aA){return bI.prop(b6,b5,b7)}if(b3!==1||!bI.isXMLDoc(b6)){b5=b5.toLowerCase();e=bI.attrHooks[b5]||(bI.expr.match.bool.test(b5)?bZ:a7)}if(b7!==aE){if(b7===null){bI.removeAttr(b6,b5)}else{if(e&&"set" in e&&(b4=e.set(b6,b7,b5))!==aE){return b4}else{b6.setAttribute(b5,b7+"");return b7}}}else{if(e&&"get" in e&&(b4=e.get(b6,b5))!==null){return b4}else{b4=bI.find.attr(b6,b5);return b4==null?aE:b4}}},removeAttr:function(b4,b6){var e,b5,b3=0,b7=b6&&b6.match(aa);if(b7&&b4.nodeType===1){while((e=b7[b3++])){b5=bI.propFix[e]||e;if(bI.expr.match.bool.test(e)){if(bE&&bO||!ao.test(e)){b4[b5]=false}else{b4[bI.camelCase("default-"+e)]=b4[b5]=false}}else{bI.attr(b4,e,"")}b4.removeAttribute(bO?e:b5)}}},attrHooks:{type:{set:function(e,b3){if(!bI.support.radioValue&&b3==="radio"&&bI.nodeName(e,"input")){var b4=e.value;e.setAttribute("type",b3);if(b4){e.value=b4}return b3}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(b7,b5,b8){var b4,e,b6,b3=b7.nodeType;if(!b7||b3===3||b3===8||b3===2){return}b6=b3!==1||!bI.isXMLDoc(b7);if(b6){b5=bI.propFix[b5]||b5;e=bI.propHooks[b5]}if(b8!==aE){return e&&"set" in e&&(b4=e.set(b7,b8,b5))!==aE?b4:(b7[b5]=b8)}else{return e&&"get" in e&&(b4=e.get(b7,b5))!==null?b4:b7[b5]}},propHooks:{tabIndex:{get:function(b3){var e=bI.find.attr(b3,"tabindex");return e?parseInt(e,10):aD.test(b3.nodeName)||C.test(b3.nodeName)&&b3.href?0:-1}}}});bZ={set:function(b3,b4,e){if(b4===false){bI.removeAttr(b3,e)}else{if(bE&&bO||!ao.test(e)){b3.setAttribute(!bO&&bI.propFix[e]||e,e)}else{b3[bI.camelCase("default-"+e)]=b3[e]=true}}return e}};bI.each(bI.expr.match.bool.source.match(/\w+/g),function(b4,b3){var e=bI.expr.attrHandle[b3]||bI.find.attr;bI.expr.attrHandle[b3]=bE&&bO||!ao.test(b3)?function(b8,b6,b9){var b7=bI.expr.attrHandle[b6],b5=b9?aE:(bI.expr.attrHandle[b6]=aE)!=e(b8,b6,b9)?b6.toLowerCase():null;bI.expr.attrHandle[b6]=b7;return b5}:function(b6,b5,b7){return b7?aE:b6[bI.camelCase("default-"+b5)]?b5.toLowerCase():null}});if(!bE||!bO){bI.attrHooks.value={set:function(b3,b4,e){if(bI.nodeName(b3,"input")){b3.defaultValue=b4}else{return a7&&a7.set(b3,b4,e)}}}}if(!bO){a7={set:function(b4,b5,b3){var e=b4.getAttributeNode(b3);if(!e){b4.setAttributeNode((e=b4.ownerDocument.createAttribute(b3)))}e.value=b5+="";return b3==="value"||b5===b4.getAttribute(b3)?b5:aE}};bI.expr.attrHandle.id=bI.expr.attrHandle.name=bI.expr.attrHandle.coords=function(b4,b3,b5){var e;return b5?aE:(e=b4.getAttributeNode(b3))&&e.value!==""?e.value:null};bI.valHooks.button={get:function(b4,b3){var e=b4.getAttributeNode(b3);return e&&e.specified?e.value:aE},set:a7.set};bI.attrHooks.contenteditable={set:function(b3,b4,e){a7.set(b3,b4===""?false:b4,e)}};bI.each(["width","height"],function(b3,e){bI.attrHooks[e]={set:function(b4,b5){if(b5===""){b4.setAttribute(e,"auto");return b5}}}})}if(!bI.support.hrefNormalized){bI.each(["href","src"],function(b3,e){bI.propHooks[e]={get:function(b4){return b4.getAttribute(e,4)}}})}if(!bI.support.style){bI.attrHooks.style={get:function(e){return e.style.cssText||aE},set:function(e,b3){return(e.style.cssText=b3+"")}}}if(!bI.support.optSelected){bI.propHooks.selected={get:function(b3){var e=b3.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}}}bI.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){bI.propFix[this.toLowerCase()]=this});if(!bI.support.enctype){bI.propFix.enctype="encoding"}bI.each(["radio","checkbox"],function(){bI.valHooks[this]={set:function(e,b3){if(bI.isArray(b3)){return(e.checked=bI.inArray(bI(e).val(),b3)>=0)}}};if(!bI.support.checkOn){bI.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value}}});var bG=/^(?:input|select|textarea)$/i,a2=/^key/,bM=/^(?:mouse|contextmenu)|click/,bA=/^(?:focusinfocus|focusoutblur)$/,bt=/^([^.]*)(?:\.(.+)|)$/;function P(){return true}function V(){return false}function ai(){try{return l.activeElement}catch(e){}}bI.event={global:{},add:function(b6,cb,cg,b8,b7){var b9,ch,ci,b4,cd,ca,cf,b5,ce,e,b3,cc=bI._data(b6);if(!cc){return}if(cg.handler){b4=cg;cg=b4.handler;b7=b4.selector}if(!cg.guid){cg.guid=bI.guid++}if(!(ch=cc.events)){ch=cc.events={}}if(!(ca=cc.handle)){ca=cc.handle=function(cj){return typeof bI!==aA&&(!cj||bI.event.triggered!==cj.type)?bI.event.dispatch.apply(ca.elem,arguments):aE};ca.elem=b6}cb=(cb||"").match(aa)||[""];ci=cb.length;while(ci--){b9=bt.exec(cb[ci])||[];ce=b3=b9[1];e=(b9[2]||"").split(".").sort();if(!ce){continue}cd=bI.event.special[ce]||{};ce=(b7?cd.delegateType:cd.bindType)||ce;cd=bI.event.special[ce]||{};cf=bI.extend({type:ce,origType:b3,data:b8,handler:cg,guid:cg.guid,selector:b7,needsContext:b7&&bI.expr.match.needsContext.test(b7),namespace:e.join(".")},b4);if(!(b5=ch[ce])){b5=ch[ce]=[];b5.delegateCount=0;if(!cd.setup||cd.setup.call(b6,b8,e,ca)===false){if(b6.addEventListener){b6.addEventListener(ce,ca,false)}else{if(b6.attachEvent){b6.attachEvent("on"+ce,ca)}}}}if(cd.add){cd.add.call(b6,cf);if(!cf.handler.guid){cf.handler.guid=cg.guid}}if(b7){b5.splice(b5.delegateCount++,0,cf)}else{b5.push(cf)}bI.event.global[ce]=true}b6=null},remove:function(b5,cb,ci,b6,ca){var b8,cf,b9,b7,ch,cg,cd,b4,ce,e,b3,cc=bI.hasData(b5)&&bI._data(b5);if(!cc||!(cg=cc.events)){return}cb=(cb||"").match(aa)||[""];ch=cb.length;while(ch--){b9=bt.exec(cb[ch])||[];ce=b3=b9[1];e=(b9[2]||"").split(".").sort();if(!ce){for(ce in cg){bI.event.remove(b5,ce+cb[ch],ci,b6,true)}continue}cd=bI.event.special[ce]||{};ce=(b6?cd.delegateType:cd.bindType)||ce;b4=cg[ce]||[];b9=b9[2]&&new RegExp("(^|\\.)"+e.join("\\.(?:.*\\.|)")+"(\\.|$)");b7=b8=b4.length;while(b8--){cf=b4[b8];if((ca||b3===cf.origType)&&(!ci||ci.guid===cf.guid)&&(!b9||b9.test(cf.namespace))&&(!b6||b6===cf.selector||b6==="**"&&cf.selector)){b4.splice(b8,1);if(cf.selector){b4.delegateCount--}if(cd.remove){cd.remove.call(b5,cf)}}}if(b7&&!b4.length){if(!cd.teardown||cd.teardown.call(b5,e,cc.handle)===false){bI.removeEvent(b5,ce,cc.handle)}delete cg[ce]}}if(bI.isEmptyObject(cg)){delete cc.handle;bI._removeData(b5,"events")}},trigger:function(b3,ca,b6,ch){var cb,b5,cf,cg,cd,b9,b8,b7=[b6||l],ce=T.call(b3,"type")?b3.type:b3,b4=T.call(b3,"namespace")?b3.namespace.split("."):[];cf=b9=b6=b6||l;if(b6.nodeType===3||b6.nodeType===8){return}if(bA.test(ce+bI.event.triggered)){return}if(ce.indexOf(".")>=0){b4=ce.split(".");ce=b4.shift();b4.sort()}b5=ce.indexOf(":")<0&&"on"+ce;b3=b3[bI.expando]?b3:new bI.Event(ce,typeof b3==="object"&&b3);b3.isTrigger=ch?2:3;b3.namespace=b4.join(".");b3.namespace_re=b3.namespace?new RegExp("(^|\\.)"+b4.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;b3.result=aE;if(!b3.target){b3.target=b6}ca=ca==null?[b3]:bI.makeArray(ca,[b3]);cd=bI.event.special[ce]||{};if(!ch&&cd.trigger&&cd.trigger.apply(b6,ca)===false){return}if(!ch&&!cd.noBubble&&!bI.isWindow(b6)){cg=cd.delegateType||ce;if(!bA.test(cg+ce)){cf=cf.parentNode}for(;cf;cf=cf.parentNode){b7.push(cf);b9=cf}if(b9===(b6.ownerDocument||l)){b7.push(b9.defaultView||b9.parentWindow||a1)}}b8=0;while((cf=b7[b8++])&&!b3.isPropagationStopped()){b3.type=b8>1?cg:cd.bindType||ce;cb=(bI._data(cf,"events")||{})[b3.type]&&bI._data(cf,"handle");if(cb){cb.apply(cf,ca)}cb=b5&&cf[b5];if(cb&&bI.acceptData(cf)&&cb.apply&&cb.apply(cf,ca)===false){b3.preventDefault()}}b3.type=ce;if(!ch&&!b3.isDefaultPrevented()){if((!cd._default||cd._default.apply(b7.pop(),ca)===false)&&bI.acceptData(b6)){if(b5&&b6[ce]&&!bI.isWindow(b6)){b9=b6[b5];if(b9){b6[b5]=null}bI.event.triggered=ce;try{b6[ce]()}catch(cc){}bI.event.triggered=aE;if(b9){b6[b5]=b9}}}}return b3.result},dispatch:function(e){e=bI.event.fix(e);var b6,b7,cb,b3,b5,ca=[],b9=a3.call(arguments),b4=(bI._data(this,"events")||{})[e.type]||[],b8=bI.event.special[e.type]||{};b9[0]=e;e.delegateTarget=this;if(b8.preDispatch&&b8.preDispatch.call(this,e)===false){return}ca=bI.event.handlers.call(this,e,b4);b6=0;while((b3=ca[b6++])&&!e.isPropagationStopped()){e.currentTarget=b3.elem;b5=0;while((cb=b3.handlers[b5++])&&!e.isImmediatePropagationStopped()){if(!e.namespace_re||e.namespace_re.test(cb.namespace)){e.handleObj=cb;e.data=cb.data;b7=((bI.event.special[cb.origType]||{}).handle||cb.handler).apply(b3.elem,b9);if(b7!==aE){if((e.result=b7)===false){e.preventDefault();e.stopPropagation()}}}}}if(b8.postDispatch){b8.postDispatch.call(this,e)}return e.result},handlers:function(e,b4){var b3,b9,b7,b6,b8=[],b5=b4.delegateCount,ca=e.target;if(b5&&ca.nodeType&&(!e.button||e.type!=="click")){for(;ca!=this;ca=ca.parentNode||this){if(ca.nodeType===1&&(ca.disabled!==true||e.type!=="click")){b7=[];for(b6=0;b6=0:bI.find(b3,this,null,[ca]).length}if(b7[b3]){b7.push(b9)}}if(b7.length){b8.push({elem:ca,handlers:b7})}}}}if(b51?bI.unique(b5):b5);b5.selector=this.selector?this.selector+" "+b3:b3;return b5},has:function(b5){var b4,b3=bI(b5,this),e=b3.length;return this.filter(function(){for(b4=0;b4-1:b7.nodeType===1&&bI.find.matchesSelector(b7,b6))){b7=b3.push(b7);break}}}return this.pushStack(b3.length>1?bI.unique(b3):b3)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.first().prevAll().length:-1}if(typeof e==="string"){return bI.inArray(this[0],bI(e))}return bI.inArray(e.jquery?e[0]:e,this)},add:function(e,b3){var b5=typeof e==="string"?bI(e,b3):bI.makeArray(e&&e.nodeType?[e]:e),b4=bI.merge(this.get(),b5);return this.pushStack(bI.unique(b4))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});function aV(b3,e){do{b3=b3[e]}while(b3&&b3.nodeType!==1);return b3}bI.each({parent:function(b3){var e=b3.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return bI.dir(e,"parentNode")},parentsUntil:function(b3,e,b4){return bI.dir(b3,"parentNode",b4)},next:function(e){return aV(e,"nextSibling")},prev:function(e){return aV(e,"previousSibling")},nextAll:function(e){return bI.dir(e,"nextSibling")},prevAll:function(e){return bI.dir(e,"previousSibling")},nextUntil:function(b3,e,b4){return bI.dir(b3,"nextSibling",b4)},prevUntil:function(b3,e,b4){return bI.dir(b3,"previousSibling",b4)},siblings:function(e){return bI.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return bI.sibling(e.firstChild)},contents:function(e){return bI.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:bI.merge([],e.childNodes)}},function(e,b3){bI.fn[e]=function(b6,b4){var b5=bI.map(this,b3,b6);if(e.slice(-5)!=="Until"){b4=b6}if(b4&&typeof b4==="string"){b5=bI.filter(b4,b5)}if(this.length>1){if(!bw[e]){b5=bI.unique(b5)}if(bs.test(e)){b5=b5.reverse()}}return this.pushStack(b5)}});bI.extend({filter:function(b5,e,b4){var b3=e[0];if(b4){b5=":not("+b5+")"}return e.length===1&&b3.nodeType===1?bI.find.matchesSelector(b3,b5)?[b3]:[]:bI.find.matches(b5,bI.grep(e,function(b6){return b6.nodeType===1}))},dir:function(b4,b3,b6){var e=[],b5=b4[b3];while(b5&&b5.nodeType!==9&&(b6===aE||b5.nodeType!==1||!bI(b5).is(b6))){if(b5.nodeType===1){e.push(b5)}b5=b5[b3]}return e},sibling:function(b4,b3){var e=[];for(;b4;b4=b4.nextSibling){if(b4.nodeType===1&&b4!==b3){e.push(b4)}}return e}});function aM(b4,e,b3){if(bI.isFunction(e)){return bI.grep(b4,function(b6,b5){return !!e.call(b6,b5,b6)!==b3})}if(e.nodeType){return bI.grep(b4,function(b5){return(b5===e)!==b3})}if(typeof e==="string"){if(al.test(e)){return bI.filter(e,b4,b3)}e=bI.filter(e,b4)}return bI.grep(b4,function(b5){return(bI.inArray(b5,e)>=0)!==b3})}function z(e){var b4=d.split("|"),b3=e.createDocumentFragment();if(b3.createElement){while(b4.length){b3.createElement(b4.pop())}}return b3}var d="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ay=/ jQuery\d+="(?:null|\d+)"/g,I=new RegExp("<(?:"+d+")[\\s/>]","i"),b2=/^\s+/,aB=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,m=/<([\w:]+)/,bX=/\s*$/g,R={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:bI.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},aQ=z(l),j=aQ.appendChild(l.createElement("div"));R.optgroup=R.option;R.tbody=R.tfoot=R.colgroup=R.caption=R.thead;R.th=R.td;bI.fn.extend({text:function(e){return bI.access(this,function(b3){return b3===aE?bI.text(this):this.empty().append((this[0]&&this[0].ownerDocument||l).createTextNode(b3))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var b3=aZ(this,e);b3.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var b3=aZ(this,e);b3.insertBefore(e,b3.firstChild)}})},before:function(){return this.domManip(arguments,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this)}})},after:function(){return this.domManip(arguments,function(e){if(this.parentNode){this.parentNode.insertBefore(e,this.nextSibling)}})},remove:function(e,b6){var b5,b3=e?bI.filter(e,this):this,b4=0;for(;(b5=b3[b4])!=null;b4++){if(!b6&&b5.nodeType===1){bI.cleanData(k(b5))}if(b5.parentNode){if(b6&&bI.contains(b5.ownerDocument,b5)){br(k(b5,"script"))}b5.parentNode.removeChild(b5)}}return this},empty:function(){var b3,e=0;for(;(b3=this[e])!=null;e++){if(b3.nodeType===1){bI.cleanData(k(b3,false))}while(b3.firstChild){b3.removeChild(b3.firstChild)}if(b3.options&&bI.nodeName(b3,"select")){b3.options.length=0}}return this},clone:function(b3,e){b3=b3==null?false:b3;e=e==null?b3:e;return this.map(function(){return bI.clone(this,b3,e)})},html:function(e){return bI.access(this,function(b6){var b5=this[0]||{},b4=0,b3=this.length;if(b6===aE){return b5.nodeType===1?b5.innerHTML.replace(ay,""):aE}if(typeof b6==="string"&&!aj.test(b6)&&(bI.support.htmlSerialize||!I.test(b6))&&(bI.support.leadingWhitespace||!b2.test(b6))&&!R[(m.exec(b6)||["",""])[1].toLowerCase()]){b6=b6.replace(aB,"<$1>");try{for(;b4")){ca=b3.cloneNode(true)}else{j.innerHTML=b3.outerHTML;j.removeChild(ca=j.firstChild)}if((!bI.support.noCloneEvent||!bI.support.noCloneChecked)&&(b3.nodeType===1||b3.nodeType===11)&&!bI.isXMLDoc(b3)){b7=k(ca);b8=k(b3);for(b6=0;(b4=b8[b6])!=null;++b6){if(b7[b6]){O(b4,b7[b6])}}}if(b5){if(e){b8=b8||k(b3);b7=b7||k(ca);for(b6=0;(b4=b8[b6])!=null;b6++){aq(b4,b7[b6])}}else{aq(b3,ca)}}b7=k(ca,"script");if(b7.length>0){br(b7,!b9&&k(b3,"script"))}b7=b8=b4=null;return ca},buildFragment:function(b3,b5,ca,cf){var cb,b7,b9,ce,cg,cd,b4,b8=b3.length,b6=z(b5),e=[],cc=0;for(;cc")+b4[2];cb=b4[0];while(cb--){ce=ce.lastChild}if(!bI.support.leadingWhitespace&&b2.test(b7)){e.push(b5.createTextNode(b2.exec(b7)[0]))}if(!bI.support.tbody){b7=cg==="table"&&!bX.test(b7)?ce.firstChild:b4[1]===""&&!bX.test(b7)?ce:0;cb=b7&&b7.childNodes.length;while(cb--){if(bI.nodeName((cd=b7.childNodes[cb]),"tbody")&&!cd.childNodes.length){b7.removeChild(cd)}}}bI.merge(e,ce.childNodes);ce.textContent="";while(ce.firstChild){ce.removeChild(ce.firstChild)}ce=b6.lastChild}}}}if(ce){b6.removeChild(ce)}if(!bI.support.appendChecked){bI.grep(k(e,"input"),bU)}cc=0;while((b7=e[cc++])){if(cf&&bI.inArray(b7,cf)!==-1){continue}b9=bI.contains(b7.ownerDocument,b7);ce=k(b6.appendChild(b7),"script");if(b9){br(ce)}if(ca){cb=0;while((b7=ce[cb++])){if(by.test(b7.type||"")){ca.push(b7)}}}}ce=null;return b6},cleanData:function(b3,cb){var b5,ca,b4,b6,b7=0,cc=bI.expando,e=bI.cache,b8=bI.support.deleteExpando,b9=bI.event.special;for(;(b5=b3[b7])!=null;b7++){if(cb||bI.acceptData(b5)){b4=b5[cc];b6=b4&&e[b4];if(b6){if(b6.events){for(ca in b6.events){if(b9[ca]){bI.event.remove(b5,ca)}else{bI.removeEvent(b5,ca,b6.handle)}}}if(e[b4]){delete e[b4];if(b8){delete b5[cc]}else{if(typeof b5.removeAttribute!==aA){b5.removeAttribute(cc)}else{b5[cc]=null}}a5.push(b4)}}}}},_evalUrl:function(e){return bI.ajax({url:e,type:"GET",dataType:"script",async:false,global:false,"throws":true})}});bI.fn.extend({wrapAll:function(e){if(bI.isFunction(e)){return this.each(function(b4){bI(this).wrapAll(e.call(this,b4))})}if(this[0]){var b3=bI(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){b3.insertBefore(this[0])}b3.map(function(){var b4=this;while(b4.firstChild&&b4.firstChild.nodeType===1){b4=b4.firstChild}return b4}).append(this)}return this},wrapInner:function(e){if(bI.isFunction(e)){return this.each(function(b3){bI(this).wrapInner(e.call(this,b3))})}return this.each(function(){var b3=bI(this),b4=b3.contents();if(b4.length){b4.wrapAll(e)}else{b3.append(e)}})},wrap:function(e){var b3=bI.isFunction(e);return this.each(function(b4){bI(this).wrapAll(b3?e.call(this,b4):e)})},unwrap:function(){return this.parent().each(function(){if(!bI.nodeName(this,"body")){bI(this).replaceWith(this.childNodes)}}).end()}});var aC,bn,D,bf=/alpha\([^)]*\)/i,aR=/opacity\s*=\s*([^)]*)/,bm=/^(top|right|bottom|left)$/,E=/^(none|table(?!-c[ea]).+)/,aW=/^margin/,a8=new RegExp("^("+bz+")(.*)$","i"),U=new RegExp("^("+bz+")(?!px)[a-z%]+$","i"),Q=new RegExp("^([+-])=("+bz+")","i"),bi={BODY:"block"},bb={position:"absolute",visibility:"hidden",display:"block"},bB={letterSpacing:0,fontWeight:400},bS=["Top","Right","Bottom","Left"],at=["Webkit","O","Moz","ms"];function b(b5,b3){if(b3 in b5){return b3}var b6=b3.charAt(0).toUpperCase()+b3.slice(1),e=b3,b4=at.length;while(b4--){b3=at[b4]+b6;if(b3 in b5){return b3}}return e}function N(b3,e){b3=e||b3;return bI.css(b3,"display")==="none"||!bI.contains(b3.ownerDocument,b3)}function p(b8,e){var b9,b6,b7,b3=[],b4=0,b5=b8.length;for(;b41)},show:function(){return p(this,true)},hide:function(){return p(this)},toggle:function(e){if(typeof e==="boolean"){return e?this.show():this.hide()}return this.each(function(){if(N(this)){bI(this).show()}else{bI(this).hide()}})}});bI.extend({cssHooks:{opacity:{get:function(b4,b3){if(b3){var e=D(b4,"opacity");return e===""?"1":e}}}},cssNumber:{columnCount:true,fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,order:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":bI.support.cssFloat?"cssFloat":"styleFloat"},style:function(b5,b4,cb,b6){if(!b5||b5.nodeType===3||b5.nodeType===8||!b5.style){return}var b9,ca,cc,b7=bI.camelCase(b4),b3=b5.style;b4=bI.cssProps[b7]||(bI.cssProps[b7]=b(b3,b7));cc=bI.cssHooks[b4]||bI.cssHooks[b7];if(cb!==aE){ca=typeof cb;if(ca==="string"&&(b9=Q.exec(cb))){cb=(b9[1]+1)*b9[2]+parseFloat(bI.css(b5,b4));ca="number"}if(cb==null||ca==="number"&&isNaN(cb)){return}if(ca==="number"&&!bI.cssNumber[b7]){cb+="px"}if(!bI.support.clearCloneStyle&&cb===""&&b4.indexOf("background")===0){b3[b4]="inherit"}if(!cc||!("set" in cc)||(cb=cc.set(b5,cb,b6))!==aE){try{b3[b4]=cb}catch(b8){}}}else{if(cc&&"get" in cc&&(b9=cc.get(b5,false,b6))!==aE){return b9}return b3[b4]}},css:function(b8,b6,b3,b7){var b5,b9,e,b4=bI.camelCase(b6);b6=bI.cssProps[b4]||(bI.cssProps[b4]=b(b8.style,b4));e=bI.cssHooks[b6]||bI.cssHooks[b4];if(e&&"get" in e){b9=e.get(b8,true,b3)}if(b9===aE){b9=D(b8,b6,b7)}if(b9==="normal"&&b6 in bB){b9=bB[b6]}if(b3===""||b3){b5=parseFloat(b9);return b3===true||bI.isNumeric(b5)?b5||0:b9}return b9}});if(a1.getComputedStyle){bn=function(e){return a1.getComputedStyle(e,null)};D=function(b6,b4,b8){var b5,b3,ca,b7=b8||bn(b6),b9=b7?b7.getPropertyValue(b4)||b7[b4]:aE,e=b6.style;if(b7){if(b9===""&&!bI.contains(b6.ownerDocument,b6)){b9=bI.style(b6,b4)}if(U.test(b9)&&aW.test(b4)){b5=e.width;b3=e.minWidth;ca=e.maxWidth;e.minWidth=e.maxWidth=e.width=b9;b9=b7.width;e.width=b5;e.minWidth=b3;e.maxWidth=ca}}return b9}}else{if(l.documentElement.currentStyle){bn=function(e){return e.currentStyle};D=function(b5,b3,b8){var b4,b7,b9,b6=b8||bn(b5),ca=b6?b6[b3]:aE,e=b5.style;if(ca==null&&e&&e[b3]){ca=e[b3]}if(U.test(ca)&&!bm.test(b3)){b4=e.left;b7=b5.runtimeStyle;b9=b7&&b7.left;if(b9){b7.left=b5.currentStyle.left}e.left=b3==="fontSize"?"1em":ca;ca=e.pixelLeft+"px";e.left=b4;if(b9){b7.left=b9}}return ca===""?"auto":ca}}}function aH(e,b4,b5){var b3=a8.exec(b4);return b3?Math.max(0,b3[1]-(b5||0))+(b3[2]||"px"):b4}function au(b6,b3,e,b8,b5){var b4=e===(b8?"border":"content")?4:b3==="width"?1:0,b7=0;for(;b4<4;b4+=2){if(e==="margin"){b7+=bI.css(b6,e+bS[b4],true,b5)}if(b8){if(e==="content"){b7-=bI.css(b6,"padding"+bS[b4],true,b5)}if(e!=="margin"){b7-=bI.css(b6,"border"+bS[b4]+"Width",true,b5)}}else{b7+=bI.css(b6,"padding"+bS[b4],true,b5);if(e!=="padding"){b7+=bI.css(b6,"border"+bS[b4]+"Width",true,b5)}}}return b7}function u(b6,b3,e){var b5=true,b7=b3==="width"?b6.offsetWidth:b6.offsetHeight,b4=bn(b6),b8=bI.support.boxSizing&&bI.css(b6,"boxSizing",false,b4)==="border-box";if(b7<=0||b7==null){b7=D(b6,b3,b4);if(b7<0||b7==null){b7=b6.style[b3]}if(U.test(b7)){return b7}b5=b8&&(bI.support.boxSizingReliable||b7===b6.style[b3]);b7=parseFloat(b7)||0}return(b7+au(b6,b3,e||(b8?"border":"content"),b5,b4))+"px"}function bD(b4){var b3=l,e=bi[b4];if(!e){e=a0(b4,b3);if(e==="none"||!e){aC=(aC||bI("