diff --git a/baystation12.dme b/baystation12.dme
index 9962101e104..9de1e153ca6 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -1152,6 +1152,7 @@
#include "code\WorkInProgress\Cael_Aislinn\Supermatter\SuperMatter.dm"
#include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm"
#include "code\WorkInProgress\Chinsky\ashtray.dm"
+#include "code\WorkInProgress\Mini\atmos_control.dm"
#include "code\WorkInProgress\Ported\policetape.dm"
#include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm"
#include "code\WorkInProgress\Susan\susan_desert_turfs.dm"
diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 7b9444d8902..9aae6910c7c 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -5,13 +5,14 @@
name = "Air Vent"
desc = "Has a valve and pump attached to it"
- var/area/initial_loc
level = 1
var/area_uid
- var/id_tag = null
+ var/id_tag
+ power_channel = ENVIRON
var/on = 0
var/pump_direction = 1 //0 = siphoning, 1 = releasing
+ var/pump_speed = 1 //Used to adjust speed for siphons
var/external_pressure_bound = ONE_ATMOSPHERE
var/internal_pressure_bound = 0
@@ -42,25 +43,27 @@
icon_state = "in"
New()
- initial_loc = get_area(loc)
- if (initial_loc.master)
- initial_loc = initial_loc.master
- area_uid = initial_loc.uid
+ var/area/A = get_area(loc)
+ if (A.master)
+ A = A.master
+ area_uid = A.uid
if (!id_tag)
assign_uid()
id_tag = num2text(uid)
if(ticker && ticker.current_state == 3)//if the game is running
- src.initialize()
- src.broadcast_status()
+ initialize()
+ broadcast_status()
..()
high_volume
name = "Large Air Vent"
power_channel = EQUIP
+
New()
..()
air_contents.volume = 1000
+
update_icon()
if(welded)
icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld"
@@ -77,11 +80,12 @@
process()
..()
+// broadcast_status()
if(stat & (NOPOWER|BROKEN))
return
if (!node)
on = 0
- //broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0
+
if(!on)
return 0
@@ -101,7 +105,7 @@
if(pressure_delta > 0)
if(air_contents.temperature > 0)
- var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
+ var/transfer_moles = pressure_delta*environment.volume*environment.group_multiplier*pump_speed/(air_contents.temperature * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
@@ -119,7 +123,7 @@
if(pressure_delta > 0)
if(environment.temperature > 0)
- var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION)
+ var/transfer_moles = pressure_delta*air_contents.volume*air_contents.group_multiplier*pump_speed/(environment.temperature * R_IDEAL_GAS_EQUATION)
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
if (isnull(removed)) //in space
@@ -132,39 +136,42 @@
return 1
+
+
+
//Radio remote control
- proc
- set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- if(frequency)
- radio_connection = radio_controller.add_object(src, frequency,radio_filter_in)
+ proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ if(frequency)
+ radio_connection = radio_controller.add_object(src, frequency,radio_filter_in)
- broadcast_status()
- if(!radio_connection)
- return 0
+ proc/broadcast_status()
+ if(!radio_connection)
+ return 0
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.source = src
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.source = src
- signal.data = list(
- "area" = src.area_uid,
- "tag" = src.id_tag,
- "device" = "AVP",
- "power" = on,
- "direction" = pump_direction?("release"):("siphon"),
- "checks" = pressure_checks,
- "internal" = internal_pressure_bound,
- "external" = external_pressure_bound,
- "timestamp" = world.time,
- "sigtype" = "status"
- )
+ signal.data = list(
+ "area" = src.area_uid,
+ "tag" = src.id_tag,
+ "device" = "AVP",
+ "power" = on,
+ "direction" = pump_direction?("release"):("siphon"),
+ "checks" = pressure_checks,
+ "internal" = internal_pressure_bound,
+ "external" = external_pressure_bound,
+ "timestamp" = world.time,
+ "sigtype" = "status",
+ "setting" = pump_speed
+ )
- radio_connection.post_signal(src, signal, radio_filter_out)
+ radio_connection.post_signal(src, signal, radio_filter_out)
- return 1
+ return 1
initialize()
@@ -176,6 +183,7 @@
if(frequency)
set_frequency(frequency)
+
receive_signal(datum/signal/signal)
if(stat & (NOPOWER|BROKEN))
return
@@ -203,47 +211,29 @@
if("checks_toggle" in signal.data)
pressure_checks = (pressure_checks?0:3)
- if("direction" in signal.data)
+ if("direction" in signal)
pump_direction = text2num(signal.data["direction"])
if("set_internal_pressure" in signal.data)
- internal_pressure_bound = between(
- 0,
- text2num(signal.data["set_internal_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ internal_pressure_bound = between(0, text2num(signal.data["set_internal_pressure"]), ONE_ATMOSPHERE*50)
if("set_external_pressure" in signal.data)
- external_pressure_bound = between(
- 0,
- text2num(signal.data["set_external_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ external_pressure_bound = between(0, text2num(signal.data["set_external_pressure"]), ONE_ATMOSPHERE*50)
if("adjust_internal_pressure" in signal.data)
- internal_pressure_bound = between(
- 0,
- internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ internal_pressure_bound = between(0, internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), ONE_ATMOSPHERE*50)
if("adjust_external_pressure" in signal.data)
- external_pressure_bound = between(
- 0,
- external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),
- ONE_ATMOSPHERE*50
- )
+ external_pressure_bound = between(0, external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), ONE_ATMOSPHERE*50)
if("init" in signal.data)
name = signal.data["init"]
return
- if("status" in signal.data)
- spawn(2)
- broadcast_status()
- return //do not update_icon
+ if("setting" in signal.data)
+ pump_speed = text2num(signal.data["setting"])
- //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
+ //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal["command"]]\"\n[signal.debug_print()]")
spawn(2)
broadcast_status()
update_icon()
@@ -284,6 +274,7 @@
else
user << "\blue You need more welding fuel to complete this task."
return 1
+
examine()
set src in oview(1)
..()
@@ -321,10 +312,4 @@
"\blue You have unfastened \the [src].", \
"You hear ratchet.")
new /obj/item/pipe(loc, make_from=src)
- del(src)
-
- /obj/machinery/atmospherics/unary/vent_pump/Del()
- if (initial_loc.air_scrub_info)
- initial_loc.air_scrub_info -= id_tag
- ..()
- return
+ del(src)
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index 84378df3d14..b9c26d32511 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -7,34 +7,36 @@
level = 1
- var/area/initial_loc
var/id_tag = null
- var/frequency = 1439
- var/datum/radio_frequency/radio_connection
var/on = 0
var/scrubbing = 1 //0 = siphoning, 1 = scrubbing
var/scrub_CO2 = 1
var/scrub_Toxins = 0
var/scrub_N2O = 0
+ var/scrub_rate = 1
var/volume_rate = 120
var/panic = 0 //is this scrubber panicked?
var/area_uid
+
+ var/frequency = 1439
+ var/datum/radio_frequency/radio_connection
var/radio_filter_out
var/radio_filter_in
+
New()
- initial_loc = get_area(loc)
- if (initial_loc.master)
- initial_loc = initial_loc.master
- area_uid = initial_loc.uid
+ var/area/A = get_area(loc)
+ if (A.master)
+ A = A.master
+ area_uid = A.uid
if (!id_tag)
assign_uid()
id_tag = num2text(uid)
if(ticker && ticker.current_state == 3)//if the game is running
- src.initialize()
- src.broadcast_status()
+ initialize()
+ broadcast_status()
..()
update_icon()
@@ -86,20 +88,20 @@
process()
..()
+// broadcast_status()
if(stat & (NOPOWER|BROKEN))
return
if (!node)
on = 0
- //broadcast_status()
+
if(!on)
return 0
-
var/datum/gas_mixture/environment = loc.return_air()
if(scrubbing)
if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0))
- var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles()
+ var/transfer_moles = min(1, volume_rate*scrub_rate/environment.volume)*environment.total_moles
//Take a gas sample
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
@@ -118,15 +120,14 @@
if(removed.trace_gases.len>0)
for(var/datum/gas/trace_gas in removed.trace_gases)
- if(istype(trace_gas, /datum/gas/oxygen_agent_b))
- removed.trace_gases -= trace_gas
- filtered_out.trace_gases += trace_gas
- else if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O)
+ if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O)
removed.trace_gases -= trace_gas
filtered_out.trace_gases += trace_gas
//Remix the resulting gases
+ filtered_out.update_values()
+ removed.update_values()
air_contents.merge(filtered_out)
loc.assume_air(removed)
@@ -138,7 +139,7 @@
if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE)
return
- var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume)
+ var/transfer_moles = environment.total_moles*(volume_rate*scrub_rate/environment.volume)
var/datum/gas_mixture/removed = loc.remove_air(transfer_moles)
@@ -220,6 +221,9 @@
broadcast_status()
return //do not update_icon
+ if("setting" in signal.data)
+ scrub_rate = text2num(signal.data["setting"])
+
// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]")
spawn(2)
broadcast_status()
@@ -227,7 +231,7 @@
return
power_change()
- if(powered(power_channel))
+ if(powered(ENVIRON))
stat &= ~NOPOWER
else
stat |= NOPOWER
@@ -257,10 +261,4 @@
"\blue You have unfastened \the [src].", \
"You hear ratchet.")
new /obj/item/pipe(loc, make_from=src)
- del(src)
-
- /obj/machinery/atmospherics/unary/vent_scrubber/Del()
- if (initial_loc.air_scrub_info)
- initial_loc.air_scrub_info -= id_tag
- ..()
- return
+ del(src)
\ No newline at end of file
diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm
index 6c06a16b799..506258cdf9b 100644
--- a/code/WorkInProgress/Mini/atmos_control.dm
+++ b/code/WorkInProgress/Mini/atmos_control.dm
@@ -16,7 +16,7 @@
/obj/machinery/computer/atmoscontrol/attack_hand(mob/user)
if(..())
return
- user.machine = src
+ user.set_machine(src)
if(allowed(user))
overridden = 1
else if(!emagged)
@@ -139,6 +139,12 @@
src.updateUsrDialog()
return
+ if(href_list["atmos_unlock"])
+ switch(href_list["atmos_unlock"])
+ if("0")
+ current.air_doors_close(1)
+ if("1")
+ current.air_doors_open(1)
if(href_list["atmos_alarm"])
if (current.alarm_area.atmosalert(2))
@@ -187,6 +193,8 @@
output += "PANIC SYPHON ACTIVE
turn syphoning off"
else
output += "ACTIVATE PANIC SYPHON IN AREA"
+
+ output += "
Atmospheric Lockdown: [current.alarm_area.air_doors_activated ? "ENABLED" : "Disabled"]"
if (AALARM_SCREEN_VENT)
var/sensor_data = ""
if(current.alarm_area.air_vent_names.len)
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index a465147daa7..b83774e381d 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -517,3 +517,32 @@
return jobName
return "Unknown"
+
+proc/FindNameFromID(var/mob/living/carbon/human/H)
+ ASSERT(istype(H))
+ var/obj/item/weapon/card/id/C = H.get_active_hand()
+ if( istype(C) || istype(C, /obj/item/device/pda) )
+ var/obj/item/weapon/card/id/ID = C
+
+ if( istype(C, /obj/item/device/pda) )
+ var/obj/item/device/pda/pda = C
+ ID = pda.id
+ if(!istype(ID))
+ ID = null
+
+ if(ID)
+ return ID.registered_name
+
+ C = H.wear_id
+
+ if( istype(C) || istype(C, /obj/item/device/pda) )
+ var/obj/item/weapon/card/id/ID = C
+
+ if( istype(C, /obj/item/device/pda) )
+ var/obj/item/device/pda/pda = C
+ ID = pda.id
+ if(!istype(ID))
+ ID = null
+
+ if(ID)
+ return ID.registered_name
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index efac9a4b4a2..85843cca50f 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -46,7 +46,6 @@
#define RCON_AUTO 2
#define RCON_YES 3
-//all air alarms in area are connected via magic
//all air alarms in area are connected via magic
/area
var/obj/machinery/alarm/master_air_alarm
@@ -94,8 +93,8 @@
TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa
TLV["plasma"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa
TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa
- TLV["pressure"] = list(ONE_ATMOSPHERE*0.50,ONE_ATMOSPHERE*0.70,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60) /* kpa */
- TLV["temperature"] = list(40, 60, 100, 120) // K
+ TLV["pressure"] = list(0,ONE_ATMOSPHERE*0.10,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60) /* kpa */
+ TLV["temperature"] = list(20, 40, 140, 160) // K
New()
..()
@@ -524,7 +523,7 @@
. = ..()
if (.)
return
- user.machine = src
+ user.set_machine(src)
if ( (get_dist(src, user) > 1 ))
if (!istype(user, /mob/living/silicon))
@@ -647,8 +646,6 @@ Toxins: [plasma_percent]%
else
output += {"Optimal"}
- output += "
Atmospheric Lockdown: [alarm_area.air_doors_activated ? "ENABLED" : "Disabled"]"
-
return output
proc/rcon_text()
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index a374abd6fd9..b755f16d0a0 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -5,7 +5,7 @@
desc = "Emergency air-tight shutter, capable of sealing off breached areas."
icon = 'DoorHazard.dmi'
icon_state = "door_open"
- req_access = list(access_atmospherics, access_engine_equip)
+ req_one_access = list(access_atmospherics, access_engine_equip)
opacity = 0
density = 0
@@ -63,6 +63,10 @@
return
+ attack_hand(mob/user as mob)
+ return attackby(null, user)
+
+
attackby(obj/item/weapon/C as obj, mob/user as mob)
add_fingerprint(user)
if(operating)
@@ -77,6 +81,10 @@
update_icon()
return
+ if(blocked)
+ user << "\red \The [src] is welded solid!"
+ return
+
var/area/A = get_area(src)
ASSERT(istype(A))
if(A.master)
@@ -116,6 +124,16 @@
spawn(0)
close()
+ var/access_granted = 0
+ var/users_name
+ if(!istype(C, /obj)) //If someone hit it with their hand. We need to see if they are allowed.
+ if(allowed(user))
+ access_granted = 1
+ if(ishuman(user))
+ users_name = FindNameFromID(user)
+ else
+ users_name = "Unknown"
+
if( !stat && ( istype(C, /obj/item/weapon/card/id) || istype(C, /obj/item/device/pda) ) )
var/obj/item/weapon/card/id/ID = C
@@ -125,35 +143,46 @@
if(!istype(ID))
ID = null
- var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [src.name]?[ alarmed && density && !check_access(ID) ? "\nNote that by doing this, you acknowledge any damages from opening this [src.name]\nas being your own fault, and you will be held accountable under the law." : ""]",\
- "\The [src]", "Yes, [density ? "open" : "close"]", "No")
- if(answer == "No")
- return
- if(user.stat || !user.canmove || user.stunned || user.weakened || user.paralysis || get_dist(src, user) > 1)
- user << "Sorry, you must remain able bodied and close to \the [src] in order to use it."
- return
+ if(ID)
+ users_name = ID.registered_name
- if(alarmed && density && !check_access(ID) && ( ID && !( ID.registered_name in users_to_open ) ) )
- user.visible_message("\red \The [src] opens for \the [user], but only after they acknowledged responsibility for the consequences.",\
- "\The [src] opens after you acknowledge the consequences.",\
- "You hear a beep, and a door opening.")
- if(ID && ID.registered_name)
- if(!users_to_open)
- users_to_open = list()
- users_to_open += ID.registered_name
- else
- user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\
- "\The [src] [density ? "open" : "close"]s.",\
- "You hear a beep, and a door opening.")
+ if(check_access(ID))
+ access_granted = 1
- if(density)
+ var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [src.name]?[ alarmed && density && !access_granted ? "\nNote that by doing so, you acknowledge any damages from opening this\n[src.name] as being your own fault, and you will be held accountable under the law." : ""]",\
+ "\The [src]", "Yes, [density ? "open" : "close"]", "No")
+ if(answer == "No")
+ return
+ if(user.stat || !user.canmove || user.stunned || user.weakened || user.paralysis || get_dist(src, user) > 1)
+ user << "Sorry, you must remain able bodied and close to \the [src] in order to use it."
+ return
+
+ if(alarmed && density && !access_granted && !( users_name in users_to_open ) )
+ user.visible_message("\red \The [src] opens for \the [user], but only after they acknowledged responsibility for the consequences.",\
+ "\The [src] opens after you acknowledge the consequences.",\
+ "You hear a beep, and a door opening.")
+ if(!users_to_open)
+ users_to_open = list()
+ users_to_open += users_name
+ else
+ user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\
+ "\The [src] [density ? "open" : "close"]s.",\
+ "You hear a beep, and a door opening.")
+
+ var/needs_to_close = 0
+ if(density)
+ if(alarmed)
+ needs_to_close = 1
+ spawn()
open()
- else
+ else
+ spawn()
close()
- if(alarmed && !density)
- spawn(100)
- nextstate = CLOSED
+ if(needs_to_close)
+ spawn(50)
+ if(alarmed)
+ nextstate = CLOSED
process()
diff --git a/maps/tgstation.2.0.9.1.dmm b/maps/tgstation.2.0.9.1.dmm
index e7e4ab656f0..1bce8a84949 100644
--- a/maps/tgstation.2.0.9.1.dmm
+++ b/maps/tgstation.2.0.9.1.dmm
@@ -5066,7 +5066,7 @@
"bTv" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 1; icon_state = "manifold-r"; level = 2},/obj/machinery/meter,/turf/simulated/wall,/area/atmos)
"bTw" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/obj/machinery/light,/turf/simulated/floor,/area/atmos)
"bTx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/wall/r_wall,/area/atmos)
-"bTy" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 4; name = "Atmos RC"; pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
+"bTy" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
"bTz" = (/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/structure/stool/bed/chair/office/dark,/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
"bTA" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
"bTB" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_atmos{name = "Monitoring Room"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos)
@@ -5074,7 +5074,7 @@
"bTD" = (/obj/machinery/atmospherics/pipe/manifold{tag = "icon-manifold-r (EAST)"; icon_state = "manifold-r"; dir = 4; level = 2; color = "red"},/turf/simulated/floor,/area/atmos)
"bTE" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/atmos)
"bTF" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/atmos)
-"bTG" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor,/area/atmos)
+"bTG" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 4; name = "Atmos RC"; pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/obj/machinery/computer/atmoscontrol,/turf/simulated/floor,/area/atmos)
"bTH" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/turf/simulated/floor,/area/atmos)
"bTI" = (/obj/machinery/atmospherics/pipe/manifold{icon_state = "manifold"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
"bTJ" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/turf/simulated/floor,/area/atmos)
@@ -5884,7 +5884,7 @@
"cjh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engineering)
"cji" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor,/area/engine/engineering)
"cjj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/engine/engineering)
-"cjk" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
+"cjk" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor,/area/atmos)
"cjl" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/solar/starboard)
"cjm" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/solar/starboard)
"cjn" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/starboard)
@@ -8989,7 +8989,7 @@
"dqS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/disposal)
"dqT" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/effect/sign/vacuum{pixel_x = -32},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/maintenance/disposal)
"dqU" = (/turf/space,/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2; tag = "icon-swall_f10"},/area/shuttle/transport1/centcom)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -9152,7 +9152,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaafaafaaaaaaaaabPCbLjbPDbJLbJLbJLbOAbOAbOAbOAbOAbPEbOAbOAbOAbPFbPGbvZbMAbvZbPHbPIbNGbKsbPJbPKbHsbHsbHsbHsbPLbPMbPNbLGbPObPPbPQbPRbPSbPTbPUbPTbPVaafbLPbLPbLPbLPbLPaafaafaafbjIbPWbpGbIQbPXbPYbdpbPZbmxbQabQbbQcbQdbQebQfbQgbQhbQibQjbQibQkbLYbQlbQmbQnbQobQlbLYbQpbQqbNkbQrbQsbQtbQubQtbQvbQtbQwbQxbQxbQybQzbQAbccbccaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbAsbAtbJxbJvbJvbBNbBNbBNbBNbBNbBNbBNbBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaabQCbLjbPDbJLaafaaabOAbQDbQEbQFbQGbQHbQIbQJbOAbOAbQKbQLbJYbvZbPHbQMbQNbMDbQObQPbQQbQRbQSbHsbQTbPMbLGbQUbLNbQVbQWbQXbQYbQZbRabRbbRcbMSbMTbRdbRebRebLPaafaaaaaablkbKvbdnbRfbEXbdnbdnbdnbRgbRhbRibRjbRkbRlbRmbRnbRobRpbRqbRrbRsbLYbLYbLYbLYbLYbLYbLYbRtbRubNkbRvbRwbRxbRybRzbRAbRBbRCbRDbREbRFbKObRGbQBbccbccbccaaaaaaaafaaaaaaaafagQagQagQaaaaaaaaaaafaaaaaaaafaaaaaaaafaaaaaabEfbAtbCSbAtbAtbBNbBNbBNbBNbBNbBNbBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJLbJLbJLbJLbJLbLjbRSbRTbRUbRVbRWbRXbRYbRZbSabSbbQJbQJbScbSdbSebvZbMAbvZbSfbSgbLNbLNbShbSibSjbLNbSkbSlbSmbSnbLNbSobSpbSqbSrbSsbLGbStbSubSvbNRaafbNSbSwbSxbSybLPaafaaaaaablkbKvbdnbSzbSAbSBbSCbSDbdpbRhbSEbNbbSFbSGbQfbSHbSIbSJbSKbSLbRsbSMbSNbSObSPbSQbSRbSSbSTbSUbNkbSVbSWbSXbSYbSZbTabTbbTcbSYbTdbSVbKObTebRHbRIbRJbRKbRLbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRNbRObRPbRPbRQbAtbAtbBNbBNbRRbBNbBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaabPCbTkbTlbTmbTnbTobTpbTnbTqbTrbTsbTtbQJbQJbQJbQJbQJbQJbScbSdbSebvZbMAbvZbTubTvbOKbTwbOKbTxbTybTzbTAbTBbTCbTDbTEbTFbTGbTHbTIbTJbLGbStbTKbTLbTMbOTbMTbTNbRebRebLPaafaafaafblkbKvbdnbTObTPbTQbTRbTSbdpbRhbTTbNbbNbbNbbNcbNbbNbbTUbNbbNbbRsbTVbTWbTVbTXbTYbTZbUabUabUbbNkbNkbKObUcbUdbUdbUdbUebUdbUfbKObKObKObUgbTfbccbTgbccaaaaaabThaaaaaaaafagQagQagQaaaaaaaaaaafaaaaaaaafaaaaaaaafaafaafbTibTjbBLbCTbAsbAtbAtbBNbBObBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaabPCbTkbTlbTmbTnbTobTpbTnbTqbTrbTsbTtbQJbQJbQJbQJbQJbQJbScbSdbSebvZbMAbvZbTubTvbOKbTwbOKbTxbTGbTzbTAbTBbTCbTDbTEbTFcjkbTHbTIbTJbLGbStbTKbTLbTMbOTbMTbTNbRebRebLPaafaafaafblkbKvbdnbTObTPbTQbTRbTSbdpbRhbTTbNbbNbbNbbNcbNbbNbbTUbNbbNbbRsbTVbTWbTVbTXbTYbTZbUabUabUbbNkbNkbKObUcbUdbUdbUdbUebUdbUfbKObKObKObUgbTfbccbTgbccaaaaaabThaaaaaaaafagQagQagQaaaaaaaaaaafaaaaaaaafaaaaaaaafaafaafbTibTjbBLbCTbAsbAtbAtbBNbBObBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaabQCbUlbUmbUnbIpbIpbJLbLgbUobLibOAbUpbQJbQFbQFbQFbQJbUqbOAbOAbQKbUrbMAbvZbTubUsbUtbHsbUubQPbUvbUwbUxbHsbUybUzbHsbHsbHsbUAbLGbUBbLGbStbSubUCbNRaafbLPbLPbLPbLPbLPaafaaaaaabNVbKvbdnbdnbdnbdnbdnbdnbUDbUEbdpbsDbUFbUGbUHbUIbUJbUKbULbUMbRsbUNbTVbUObTXbUPbUQbURbURbUSbUTbUUbKObUVbUWbUdbUXbUYbUWbUdbKObUZbVabVbbUhbUibUjaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbUkbAqbAqbArbAsbAsbAtbAtbAtbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaabJLbJLbJLbJLbIpbUnbIpbIpbJLaaabVdaaabOAbVebQJbRZbSabSbbQJbQJbQJbQJbVfbvZbMAbVgbzvbHsbHsbHsbVhbVibVjbVkbVlbKcbNJbPMbVmbVnbVobTHbVpbTHbVqbVrbVsbVtbRcbMSbMTbVubVvbVwbLPaafaaaaaabccbVxbVybVybVybVybVzbdnbVAbRhbdpbdpbVBbQibVCbQibQibVDbQibVEbRsbVFbVGbVHbVIbVJbVGbVKbVLbVMbVNbVNbKObUdbVObUdbUdbUdbVObUdbKObTebccbVPbVQbccaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaabJLbVRbVSbVTbVUbVVbVWbVXbVWaaabVdaaabOAbVYbQJbQJbQJbVZbQJbWabWbbQJbWcbWdbLxbWdbWebWfbWgbWfbWhbWibWjbMFbLGbKcbNJbPMbWkbLGbWlbWmbVpbTHbVqbStbSubWnbNRaafbNSbWobWpbWqbLPaafaafaafbccbccbWrbWsbVQbccbWtbpGbPYbWubWvbWwbUFbWxbWxbWybWxbQibWzbWAbRsbWBbVGbVGbWCbVGbVGbWDbWEbWFbWGbWHbKObKObKObKObKObKObKObKObKObTebccaafaafaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -9172,7 +9172,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajlaafbYVcglbYXaaabYVcglbYXaaabYVcglbYXaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabJLbIpchFbLjcdCcgZcgZchacdCchGchGchHchIchJchKchLchMchNchOchPchQchRchScdMchTchUchVcdQcdQcdQbLPchtchWchtbLPchvchXchvbLPchzchYchzbLPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachZaaaaaabZxciacibciccidciecifcigciecigcifbZxaaaaaaaaaaaaaZvaZvaZvcihaafaafaafaafchEaafaafaafaafaafajXaZvaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajlaafbYVcglbYXaaabYVcglbYXaafbYVcglbYXaafaafaafaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacdCciicdCcijcdCcgZchachacdCcikcilcimcincheciocipciqcircfQciociscitcfQciocirciucivciwcixcdCbLPbLPbLPbLPbLPbLPbLPbLPbLPbLPbLPbLPbLPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZxbZxciycizbZxbZxbZxbZxbZxbZxbZxbZxaaaaaaaaaaaaaZvaaaaafaaaaafaaaaaaaaaciAaaaaafaafaaaaaaaaaaaaaZvaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXaafbYVciBbYXaaabYVciBbYXaaabYVciBbYXaafajlaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacdCciCcdCciDcdCcdCcdCcdCciEciFciGciHciHciHciGciIciGciJciKciLciMciNciOciGciGciPciGciQciRcdCaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbZxbZxbZxbZxaaaaafaafaafaafaafaaaaaaaaaaaaaaaaZvaaaciSciSciSciSciSaafciTaafciSciSciSciSciSaaaaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajlaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaajlaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafcdCchfchfcfQciUciVciWciXciGciYchfciZcjachfcjbcjccjdcjecjfcjecjgcjhcjbcjicjjchfchfciucjkcdCcdCchGchGchGcdCaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaZvaafcjlcjmcjmcjmcjmcjnciTcjocjpcjpcjpcjpcjqaafaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajlaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaajlaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafcdCchfchfcfQciUciVciWciXciGciYchfciZcjachfcjbcjccjdcjecjfcjecjgcjhcjbcjicjjchfchfciubTycdCcdCchGchGchGcdCaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaZvaafcjlcjmcjmcjmcjmcjnciTcjocjpcjpcjpcjpcjqaafaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmajmajlajmajmajXajlajlajlajlajmajlajlajmcjraafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaacdCcjschfcjtcjucjvcjwcjxcjyciuchfcjzchfchfcjAcjBcjCcjDcjEcjDcjFcjBcjGcjHcjIchfchfciuchfcjJchGcjKcjLcjMcjMcjNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaZvaafcjOcjOcjOcjOcjOaaaciTaaacjOcjOcjOcjOcjOaafaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafcdCcdCcjPcjQchechfcjRcjScjTciucjachfcjUcjVcjVcjWcjXcjYcjZcfHckacjWciJciJckbchfchfckcchfckdckecfFckfckgckhckiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZvaaaaafaaaaafaafaafaaaciTaaaaafaaaaafaaaaafaaaaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaackjckkcklchfckmcknckockpckqckrckscktckucdCckvckwckxcjackycdCckzckAckAckrckBckCckockDchGckEckFcjMcjMckGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZvaaaciSciSciSciSciSaafciTaafciSciSciSciSciSaafaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa