diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 8c5ac46da2..28ead38d6f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -63,9 +63,6 @@ return flags & INSERT_CONTAINER */ -/atom/proc/allow_drop() - return 1 - /atom/proc/CheckExit() return 1 @@ -487,4 +484,4 @@ its easier to just keep the beam vertical. O.show_message( message, 2, deaf_message, 1) else if(ismob(I)) var/mob/M = I - M.show_message( message, 2, deaf_message, 1) + M.show_message( message, 2, deaf_message, 1) diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 120ee88046..9bb8039a0c 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -64,9 +64,6 @@ component_parts += new /obj/item/stack/cable_coil(src) RefreshParts() -/obj/machinery/dna_scannernew/allow_drop() - return 0 - /obj/machinery/dna_scannernew/relaymove(mob/user as mob) if (user.stat) return diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index eb15d45f51..34a81b4d61 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -193,7 +193,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E src << "This creature's DNA is ruined beyond useability!" return - if(!G.state == GRAB_KILL) + if(G.state != GRAB_KILL) src << "We must have a tighter grip to absorb this creature." return diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm index 95a58e2ea5..c0f8d57f08 100644 --- a/code/game/gamemodes/gameticker.dm +++ b/code/game/gamemodes/gameticker.dm @@ -110,6 +110,7 @@ var/global/datum/controller/gameticker/ticker else src.mode.announce() + setup_economy() current_state = GAME_STATE_PLAYING create_characters() //Create player characters and transfer them collect_minds() @@ -118,9 +119,6 @@ var/global/datum/controller/gameticker/ticker callHook("roundstart") - //here to initialize the random events nicely at round start - setup_economy() - shuttle_controller.setup_shuttle_docks() spawn(0)//Forking here so we dont have to wait for this to finish diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 35b1a15397..05b7173323 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -177,11 +177,6 @@ return return - - allow_drop() - return 0 - - process() if (stat & (NOPOWER|BROKEN)) return diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 855e32a0a1..ef38ab99ba 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -14,9 +14,6 @@ idle_power_usage = 60 active_power_usage = 10000 //10 kW. It's a big all-body scanner. -/*/obj/machinery/bodyscanner/allow_drop() - return 0*/ - /obj/machinery/bodyscanner/relaymove(mob/user as mob) if (user.stat) return diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 9b5c25c79a..4642dcd27f 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -60,11 +60,6 @@ return 1 - -/obj/machinery/atmospherics/unary/cryo_cell/allow_drop() - return 0 - - /obj/machinery/atmospherics/unary/cryo_cell/relaymove(mob/user as mob) if(user.stat) return diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 55cf5cdc15..709f4b4626 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -176,7 +176,7 @@ Class Procs: qdel(src) //sets the use_power var and then forces an area power update -/obj/machinery/proc/update_use_power(var/new_use_power, var/force_update = 0) +/obj/machinery/proc/update_use_power(var/new_use_power) use_power = new_use_power /obj/machinery/proc/auto_use_power() diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 98cc92380c..c20ca8468a 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -1,22 +1,25 @@ /obj/machinery/recharge_station name = "cyborg recharging station" + desc = "A heavy duty rapid charging system, designed to quickly recharge cyborg power reserves." icon = 'icons/obj/objects.dmi' icon_state = "borgcharger0" density = 1 anchored = 1 use_power = 1 idle_power_usage = 50 - active_power_usage = 50 var/mob/occupant = null var/obj/item/weapon/cell/cell = null - //var/max_internal_charge = 15000 // Two charged borgs in a row with default cell - //var/current_internal_charge = 15000 // Starts charged, to prevent power surges on round start - var/charging_cap_active = 1000 // Active Cap - When cyborg is inside - var/charging_cap_passive = 250 // Passive Cap - Recharging internal capacitor when no cyborg is inside - var/icon_update_tick = 0 // Used to update icon only once every 10 ticks - var/charge_rate = 250 // How much charge is restored per tick - var/weld_rate = 0 // How much brute damage is repaired per tick - var/wire_rate = 0 // How much burn damage is repaired per tick + var/icon_update_tick = 0 // Used to rebuild the overlay only once every 10 ticks + var/charging = 0 + + var/charging_power // W. Power rating used for charging the cyborg. 120 kW if un-upgraded + var/restore_power_active // W. Power drawn from APC when an occupant is charging. 40 kW if un-upgraded + var/restore_power_passive // W. Power drawn from APC when idle. 7 kW if un-upgraded + var/weld_rate = 0 // How much brute damage is repaired per tick + var/wire_rate = 0 // How much burn damage is repaired per tick + + var/weld_power_use = 2300 // power used per point of brute damage repaired. 2.3 kW ~ about the same power usage of a handheld arc welder + var/wire_power_use = 500 // power used per point of burn damage repaired. /obj/machinery/recharge_station/New() ..() @@ -30,51 +33,76 @@ component_parts += new /obj/item/weapon/cell/high(src) component_parts += new /obj/item/stack/cable_coil(src, 5) - build_icon() + RefreshParts() + update_icon() - RefreshParts() +/obj/machinery/recharge_station/proc/has_cell_power() + return cell && cell.percent() > 0 /obj/machinery/recharge_station/process() if(stat & (BROKEN)) return - - if((stat & (NOPOWER)) && (!cell || cell.percent() <= 0)) // No Power. - return - - var/chargemode = 0 - if(occupant) - process_occupant() - chargemode = 1 - // Power Stuff - if(!cell) // Shouldn't be possible, but sanity check return - if(stat & NOPOWER) - cell.use(50 * CELLRATE) // Internal Circuitry, 50W load. No power - Runs from internal cell - return // No external power = No charging + if((stat & NOPOWER) && !has_cell_power()) // No power and cell is dead. + if(icon_update_tick) + icon_update_tick = 0 //just rebuild the overlay once more only + update_icon() + return - // Calculating amount of power to draw - var/charge_diff = (chargemode ? charging_cap_active : charging_cap_passive) + 50 // 50W for circuitry + //First, draw from the internal power cell to recharge/repair/etc the occupant + if(occupant) + process_occupant() - charge_diff = cell.give(charge_diff) + //Then, if external power is available, recharge the internal cell + var/recharge_amount = 0 + if(!(stat & NOPOWER)) + // Calculating amount of power to draw + recharge_amount = (occupant ? restore_power_active : restore_power_passive) * CELLRATE - if(idle_power_usage != charge_diff) // Force update, but only when our power usage changed this tick. - idle_power_usage = charge_diff - update_use_power(1, 1) + recharge_amount = cell.give(recharge_amount) + use_power(recharge_amount / CELLRATE) if(icon_update_tick >= 10) - update_icon() icon_update_tick = 0 else icon_update_tick++ + if(occupant || recharge_amount) + update_icon() + +//since the recharge station can still be on even with NOPOWER. Instead it draws from the internal cell. +/obj/machinery/recharge_station/auto_use_power() + if(!(stat & NOPOWER)) + return ..() + + if(!has_cell_power()) + return 0 + if(src.use_power == 1) + cell.use(idle_power_usage * CELLRATE) + else if(src.use_power >= 2) + cell.use(active_power_usage * CELLRATE) return 1 +//Processes the occupant, drawing from the internal power cell if needed. +/obj/machinery/recharge_station/proc/process_occupant() + if(istype(occupant, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = occupant -/obj/machinery/recharge_station/allow_drop() - return 0 + if(R.module) + R.module.respawn_consumable(R, charging_power * CELLRATE / 250) //consumables are magical, apparently + if(R.cell && !R.cell.fully_charged()) + var/diff = min(R.cell.maxcharge - R.cell.charge, charging_power * CELLRATE) // Capped by charging_power / tick + var/charge_used = cell.use(diff) + R.cell.give(charge_used) + + //Lastly, attempt to repair the cyborg if enabled + if(weld_rate && R.getBruteLoss() && cell.checked_use(weld_power_use * weld_rate * CELLRATE)) + R.adjustBruteLoss(-weld_rate) + if(wire_rate && R.getFireLoss() && cell.checked_use(wire_power_use * wire_rate * CELLRATE)) + R.adjustFireLoss(-wire_rate) /obj/machinery/recharge_station/examine(mob/user) ..(user) @@ -92,9 +120,6 @@ return /obj/machinery/recharge_station/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return if(occupant) occupant.emp_act(severity) go_out() @@ -125,13 +150,20 @@ man_rating += P.rating cell = locate(/obj/item/weapon/cell) in component_parts - charge_rate = 125 * cap_rating - charging_cap_passive = charge_rate + charging_power = 40000 + 40000 * cap_rating + restore_power_active = 10000 + 15000 * cap_rating + restore_power_passive = 5000 + 1000 * cap_rating weld_rate = max(0, man_rating - 3) wire_rate = max(0, man_rating - 5) -/obj/machinery/recharge_station/update_icon() - ..() + desc = initial(desc) + desc += " Uses a dedicated internal power cell to deliver [charging_power]W when in use." + if(weld_rate) + desc += "
It is capable of repairing structural damage." + if(wire_rate) + desc += "
It is capable of repairing burn damage." + +/obj/machinery/recharge_station/proc/build_overlays() overlays.Cut() switch(round(chargepercentage())) if(1 to 20) @@ -147,53 +179,33 @@ if(99 to 110) overlays += image('icons/obj/objects.dmi', "statn_c100") -/obj/machinery/recharge_station/Bumped(var/mob/AM) - move_inside(AM) +/obj/machinery/recharge_station/update_icon() + ..() + if(stat & BROKEN) + icon_state = "borgcharger0" + return -/obj/machinery/recharge_station/proc/build_icon() - if(NOPOWER|BROKEN) - if(occupant) - icon_state = "borgcharger1" + if(occupant) + if((stat & NOPOWER) && !has_cell_power()) + icon_state = "borgcharger2" else - icon_state = "borgcharger0" + icon_state = "borgcharger1" else icon_state = "borgcharger0" -/obj/machinery/recharge_station/proc/process_occupant() - if(occupant) - if(istype(occupant, /mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = occupant - if(R.module) - R.module.respawn_consumable(R, charge_rate / 250) - if(!R.cell) - return - if(!R.cell.fully_charged()) - var/diff = min(R.cell.maxcharge - R.cell.charge, charge_rate) // Capped at charge_rate charge / tick - if (cell.charge >= diff) - cell.use(diff) - R.cell.give(diff) - if(weld_rate && R.getBruteLoss()) - R.adjustBruteLoss(-1) - if(wire_rate && R.getFireLoss()) - R.adjustFireLoss(-1) - else if(istype(occupant, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = occupant - if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450) - H.nutrition = min(H.nutrition+10, 450) - update_use_power(1) + if(icon_update_tick == 0) + build_overlays() + +/obj/machinery/recharge_station/Bumped(var/mob/AM) + move_inside(AM) /obj/machinery/recharge_station/proc/go_out() if(!(occupant)) return - //for(var/obj/O in src) - // O.loc = loc - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE occupant.loc = loc + occupant.reset_view() occupant = null - build_icon() - update_use_power(1) + update_icon() return /obj/machinery/recharge_station/verb/move_eject() @@ -205,49 +217,26 @@ add_fingerprint(usr) return -/obj/machinery/recharge_station/verb/move_inside(var/mob/user = usr) +/obj/machinery/recharge_station/verb/move_inside() set category = "Object" set src in oview(1) - if(!user) + if(usr.stat == DEAD) + return + if(occupant) + usr << "\The [src] is already occupied!" return - var/can_accept_user - if(istype(user, /mob/living/silicon/robot)) - - var/mob/living/silicon/robot/R = user - - if(R.stat == 2) - //Whoever had it so that a borg with a dead cell can't enter this thing should be shot. --NEO - return - if(occupant) - R << "The cell is already occupied!" - return - if(!R.cell) - R << "Without a powercell, you can't be recharged." - //Make sure they actually HAVE a cell, now that they can get in while powerless. --NEO - return - can_accept_user = 1 - - else if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - if(!isnull(H.internal_organs_by_name["cell"])) - can_accept_user = 1 - - if(!can_accept_user) - user << "Only non-organics may enter the recharger!" + var/mob/living/silicon/robot/R = usr + if(!istype(R)) + usr << "Only synthetics may enter the recharger!" + return + if(!R.cell) + usr << "Without a powercell, you can't be recharged." return - - user.stop_pulling() - if(user.client) - user.client.perspective = EYE_PERSPECTIVE - user.client.eye = src - user.loc = src - occupant = user - /*for(var/obj/O in src) - O.loc = loc*/ - add_fingerprint(user) - build_icon() - update_use_power(1) - return + usr.reset_view(src) + usr.loc = src + occupant = usr + add_fingerprint(usr) + update_icon() diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index c1cadaef5c..6cec144132 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -22,12 +22,6 @@ Destroy() qdel(pr_mech_sleeper) - ..() - - allow_drop() - return 0 - - destroy() for(var/atom/movable/AM in src) AM.forceMove(get_turf(src)) return ..() diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 2b17096547..91e544cf25 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -1078,9 +1078,6 @@ var/door_locked = 1 salvageable = 0 -/obj/item/mecha_parts/mecha_equipment/tool/passenger/allow_drop() - return 0 - /obj/item/mecha_parts/mecha_equipment/tool/passenger/destroy() for(var/atom/movable/AM in src) AM.forceMove(get_turf(src)) diff --git a/code/modules/admin/ToRban.dm b/code/modules/admin/ToRban.dm index efa835b25e..d127bfe6f4 100644 --- a/code/modules/admin/ToRban.dm +++ b/code/modules/admin/ToRban.dm @@ -23,7 +23,7 @@ /proc/ToRban_update() spawn(0) log_misc("Downloading updated ToR data...") - var/http[] = world.Export("http://exitlist.torproject.org/exit-addresses") + var/http[] = world.Export("https://check.torproject.org/exit-addresses") var/list/rawlist = file2list(http["CONTENT"]) if(rawlist.len) diff --git a/code/modules/nano/modules/law_manager.dm b/code/modules/nano/modules/law_manager.dm index 7273938c59..798a4c4dfc 100644 --- a/code/modules/nano/modules/law_manager.dm +++ b/code/modules/nano/modules/law_manager.dm @@ -186,7 +186,7 @@ /datum/nano_module/law_manager/proc/package_laws(var/list/data, var/field, var/list/datum/ai_law/laws) var/packaged_laws[0] for(var/datum/ai_law/AL in laws) - packaged_laws[++packaged_laws.len] = list("law" = sanitize(AL.law), "index" = AL.get_index(), "state" = owner.laws.get_state_law(AL), "ref" = "\ref[AL]") + packaged_laws[++packaged_laws.len] = list("law" = AL.law, "index" = AL.get_index(), "state" = owner.laws.get_state_law(AL), "ref" = "\ref[AL]") data[field] = packaged_laws data["has_[field]"] = packaged_laws.len diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 9d742d726a..af1f6ff2e5 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -119,7 +119,7 @@ if(href_list["amount"]) var/id = href_list["add"] - var/amount = text2num(href_list["amount"]) + var/amount = isgoodnumber(text2num(href_list["amount"])) R.trans_id_to(src, id, amount) else if (href_list["addcustom"]) @@ -133,7 +133,7 @@ if(href_list["amount"]) var/id = href_list["remove"] - var/amount = text2num(href_list["amount"]) + var/amount = isgoodnumber(text2num(href_list["amount"])) if(mode) reagents.trans_id_to(beaker, id, amount) else @@ -297,18 +297,10 @@ /obj/machinery/chem_master/proc/isgoodnumber(var/num) if(isnum(num)) - if(num > 200) - num = 200 - else if(num < 0) - num = 1 - else - num = round(num) - return num + return Clamp(round(num), 0, 200) else return 0 - - /obj/machinery/chem_master/condimaster name = "CondiMaster 3000" condi = 1 diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 6c3702e448..e33858e7af 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index db3b140306..4425f1f2dc 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -3240,7 +3240,7 @@ "bkp" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/hallway/primary/starboard) "bkq" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard) "bkr" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/hallway/primary/starboard) -"bks" = (/obj/machinery/camera/network/medbay{c_tag = "Medbay Lobby Port"},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) +"bks" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access = list(29)},/turf/simulated/floor,/area/hallway/primary/starboard) "bkt" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/hallway/primary/starboard) "bku" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera/network/civilian_west{c_tag = "Cargo Delivery Office"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/office) "bkv" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard) @@ -3250,14 +3250,14 @@ "bkz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/starboard) "bkA" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bkB" = (/obj/machinery/light,/turf/simulated/floor,/area/hallway/primary/starboard) -"bkC" = (/obj/machinery/camera/network/medbay{c_tag = "Medbay Lobby Starboard"},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) +"bkC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/blast/shutters{dir = 2; id = "Skynet_launch"; name = "Mech Bay"},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/starboard) "bkD" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit) "bkE" = (/obj/machinery/newscaster{pixel_y = -32},/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit) "bkF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit) "bkG" = (/obj/machinery/light,/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/hallway/secondary/exit) "bkH" = (/obj/machinery/door/window{dir = 4; name = "AI Core Door"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bkI" = (/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{dir = 6; icon_state = "warning"},/area/hallway/secondary/exit) -"bkJ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Mech Bay"; req_access = list(29)},/turf/simulated/floor,/area/hallway/primary/starboard) +"bkJ" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/folder/white,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Robotics Desk"; req_access = list(29)},/turf/simulated/floor/plating,/area/hallway/primary/starboard) "bkK" = (/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = -27; pixel_y = 4},/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 1; freerange = 1; listening = 1; name = "Common Channel"; pixel_y = 25},/obj/machinery/newscaster/security_unit{pixel_x = 32; pixel_y = 32},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = -32; pixel_y = 32},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the AI core maintenance door."; id = "AICore"; name = "AI Maintenance Hatch"; pixel_x = 17; pixel_y = 25; req_access = list(109)},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bkL" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon_state = "right"; name = "AI Core Door"; req_access = list(16)},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "bkM" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/camera/network/command{c_tag = "Bridge - Captain's Office"; dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -3311,9 +3311,9 @@ "blI" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/wood,/area/crew_quarters/captain) "blJ" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "blK" = (/obj/structure/table/woodentable,/obj/item/weapon/pinpointer,/obj/item/weapon/disk/nuclear,/obj/item/weapon/storage/secure/safe{pixel_x = 35; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/captain) -"blL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/blast/shutters{dir = 2; id = "Skynet_launch"; name = "Mech Bay"},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/starboard) -"blM" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/folder/white,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Robotics Desk"; req_access = list(29)},/turf/simulated/floor/plating,/area/hallway/primary/starboard) -"blN" = (/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/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"blL" = (/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/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"blM" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/southright{name = "Research and Development Desk"; req_access = list(7)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"blN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) "blO" = (/turf/simulated/wall/r_wall,/area/hallway/primary/starboard) "blP" = (/obj/structure/sign/nosmoking_1,/turf/simulated/wall,/area/hallway/primary/starboard) "blQ" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"},/turf/simulated/wall,/area/hallway/primary/starboard) @@ -3378,7 +3378,7 @@ "bmX" = (/obj/machinery/button/remote/blast_door{id = "qm_warehouse"; name = "Warehouse Door Control"; pixel_x = -1; pixel_y = -24; req_access = list(31)},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "bmY" = (/obj/structure/sign/chemistry,/turf/simulated/wall/r_wall,/area/medical/chemistry) "bmZ" = (/obj/structure/reagent_dispensers/water_cooler,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/reception) -"bna" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/southright{name = "Research and Development Desk"; req_access = list(7)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor/plating,/area/hallway/primary/starboard) +"bna" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal) "bnb" = (/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office) "bnc" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Command"},/turf/simulated/floor/plating,/area/maintenance/substation/command) "bnd" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/reception) @@ -3418,14 +3418,14 @@ "bnL" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/storage/emergency) "bnM" = (/turf/simulated/wall,/area/storage/emergency) "bnN" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 30},/obj/machinery/chem_master,/obj/machinery/camera/network/medbay{c_tag = "Medbay - Chemistry"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) -"bnO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) +"bnO" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bnP" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/button/remote/blast_door{id = "chemcounter"; name = "Pharmacy Counter Lockdown Control"; pixel_y = 25},/obj/machinery/reagentgrinder,/obj/structure/table/glass,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry) "bnQ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/hallway/secondary/entry/aft) "bnR" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/obj/structure/table/standard{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "bnS" = (/obj/machinery/light{dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "bnT" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "garbage"; name = "disposal coveyor"},/turf/simulated/floor/plating,/area/maintenance/disposal) -"bnU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal) -"bnV" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor/wood,/area/crew_quarters/captain) +"bnU" = (/obj/machinery/camera/network/medbay{c_tag = "Medbay Lobby Port"},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) +"bnV" = (/obj/machinery/camera/network/medbay{c_tag = "Medbay Lobby Starboard"},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "bnW" = (/obj/machinery/alarm{pixel_y = 22},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception) "bnX" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/camera/network/medbay{c_tag = "Medbay Examination Room"},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room) "bnY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/locker) @@ -7495,8 +7495,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaT aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaafbhkaYDbhQbiqbilbjqbitbjvbjubjqbjwbjBbjAbjGbhYbhZbgwbbZbbZbbZbiabfabbZaTSaTSaTSaTSbeVbibbicbjOaTSbiebifbdPbigbihbiibgDbijbdPbfibikbgFbgGbgGbgGbjQaMbbimaSzbctbjRbiobipbfjbirbisbfBbiubjMbdYbebbiwbixbiybjVbiybgYbgebebbedbiAbiBbiCbgQbiEbgZbiGbiHaJibiIbiJbiKbhmbiMbhubiObiObiPbiQbiRbiSbiSbiSbiTbiSbiSbiSbiSbiSbiUbiVbiVbiVbiWbiObiObhubiObiObiXbiVbiVbiYbiSbiZbhFbjbbiSbjcbiObiObiObiObiObiObiObiObiObiObiObiObiObjdbiTbjebiSbjfbhPbhGbjibjibjjbjkaZNaWRbiLaVvaVvaWNaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhOaZQaZlbiNbjnbjobgrbjpbjpbjYbjpbjpbjpbjrbajbajbajbajbaibbZbdDbjsbjtbgybbZbbDbbDbbDaTSaTSaTSaTSbjZaTSbjxbdObdPbjybjzbgDbfgbkkbdPboibfmbkubgGbgGbgGbjDaMbbjEaSzbctbkxbkAbgObhdbjIbjJbhfbjLblybdYbjNbkHbjPbiybkKbiybgVbkLbjSbedbjTbjUbizbjWbjWbjWbjXbkMaJibkNbkabkbbjabkdbjgbbFbkfbkgbkhbkibkjbkPbklbkmbknbknbkobewbewbewbewbewbkpbkqbkrbewbjhbktbkVbkvbewbkpbkwbkXbkybghbewbewbkzbewbewbkYbkBbewbkpbewbewbewbewbewbewbewbewbewbhqbewbewbghbjlbkDbkEbkFbkGbkZbkIbjmaafaaaaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhOblrbloblCblBbkObgrblEbkQbkRbkRbkSbkTbkUblTbmdbmdbmobmlbbZbbZbbZbeZbmxbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbohbfmbmBbgGblnbgGbmCblpblqaSzbctbdYbmDblsbltblublvblwblxbdYbdYbebblzblAbmFbmEblDblAbiDbebbedbedblFblGblHblIbiCblJblKaJibkcbfLbfMaJiblOblOblOblOblOblOaZzaZzblPblQbZNcdMblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzbmHaZzaZzaZzaZzaZzaZzbmNaZzbewbewblVblWbiFblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbmTaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdqbiNbjnbmfbgrbmgbjpbmhbmibjpbjpbjpbmUbmjbmkbmkbmVbbZbdDbmmbeZbmnbbZbmWbmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbmXbfgbmybmzblfblmbmAbjCbgGbgGbjHbnbbkeblqaSzbnlbmGbmGbmGbmGbmGbmGbmGbnobmGaafbebbmIbmJbmKbmLbmKbmMbjKbebaafbedbmObnsbmQbmRbiCbiGbmSaJibcKaRqaRpaJibnAbnwbnNbnHbnPbmYbmZbnRbksbnSbndbnebnSbkCbnWbnhbnibnjbmPbnXbnmbnnbojbnpbnqbnrbokbntbntbnubYfaVJblOblObkJblOblLblLblObnzbombnBblObZtblMbZtblOblXblYbmbblOblNbnablNblObnGboqbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaaabnOboJbeQbnQbgrboNbnUboWbnTbpmbpcbjpbpobprbnYbnZbmVbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbWqbdPbdPbdPbogbdPbfmbllbjCbgGbgGbgGbpsblpblqaSzbpvbmGbpwbonbncbpybvGbotbosbotaafbebboubovbowboxboybozbnfbebaafbedboBboCbolbnVbiCbiGboFaJiboGboHaRpbXHbpAbngboLboMbnkbooboPboQboRboRboSboTboUboUboVbpLboXboYboZbpabpbbnnbpMbpdbpebpfbpgbphbpfbpibYfaVJbpjbpkbplbpNbpnbnybppbnCbnDbpqbpPbptbpTbpSblOaZzbpZbpxblObqabqcbqbbqgbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdqbiNbjnbmfbgrbmgbjpbmhbmibjpbjpbjpbmUbmjbmkbmkbmVbbZbdDbmmbeZbmnbbZbmWbmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbmXbfgbmybmzblfblmbmAbjCbgGbgGbjHbnbbkeblqaSzbnlbmGbmGbmGbmGbmGbmGbmGbnobmGaafbebbmIbmJbmKbmLbmKbmMbjKbebaafbedbmObnsbmQbmRbiCbiGbmSaJibcKaRqaRpaJibnAbnwbnNbnHbnPbmYbmZbnRbnUbnSbndbnebnSbnVbnWbnhbnibnjbmPbnXbnmbnnbojbnpbnqbnrbokbntbntbnubYfaVJblOblObksblObkCbkCblObnzbombnBblObZtbkJbZtblOblXblYbmbblOblLblMblLblObnGboqbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaaablNboJbeQbnQbgrboNbnaboWbnTbpmbpcbjpbpobprbnYbnZbmVbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbWqbdPbdPbdPbogbdPbfmbllbjCbgGbgGbgGbpsblpblqaSzbpvbmGbpwbonbncbpybvGbotbosbotaafbebboubovbowboxboybozbnfbebaafbedboBboCbolbnObiCbiGboFaJiboGboHaRpbXHbpAbngboLboMbnkbooboPboQboRboRboSboTboUboUboVbpLboXboYboZbpabpbbnnbpMbpdbpebpfbpgbphbpfbpibYfaVJbpjbpkbplbpNbpnbnybppbnCbnDbpqbpPbptbpTbpSblOaZzbpZbpxblObqabqcbqbbqgbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaabgnbgobgpbgqbdqbopbopbopboDbopboEaZVbpKbqsbgrbqtbjpbqybqxbpQbpRbqGbqBbqHbqHbqHbqKbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPbqQbqMbrcbqTbqdbqebqfbrkbqhbqibqjbqkbqkcKDcKEbgGbgGbqmbfmaMbblqbqnbqoaJubqqbqrbqrbxqborbrnbxsbotaafbebbebbebbebbrobebbebbebbebaafbedbqzboCbqAbrubqCbqDbqEaJibqFaRqaRpaJibrwbrvbqIbqJbrxbqLboPbqNboUboUboUboUboUboUbqObqPboKboYbqRbqSbrCbnnbqUbqVbqWbrDbpgbphbpfbqXbYfaVJbpjbqYbqZbqZbrabrbbpBbrdbrdbrdbrebrdbrfboObrhbribrjbrPbnIbrlbpCbrmbscbpCbsebnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaabpHbrtbshbskbsjbslbslbsnbrzbrAbgrbtkbsobsrbsqbjpbjpbjpbajbrEbrFbrGbrHbrGbrGbrGbrHbrGbajbajbdPbdPbdPbsvbdPbrJbrJbrJbrJbrJbrJbqfbrKbrLbrMbrNbrObpIbrQbrRbrSbrTbrUbrVbpJbrXbrYbrZaHBbsbbqvbsabsybszbotbosbotaafbpObsBbsAbsEbsmbsGbsAbsHbpOaafbedbspbsIbspbedbedbedbsOaJibssaRqaRpbXHbpAbngbstbsubtbbqLbswbqNbthbtdbtmbtlbtvbsCbqObsDbnibtBbsFbtIbtKbnnbtObqVbpebpfbpgbphbpfbpibYfaVJbpjbsJbsKbsLbsMbplbsNbtTbsPbsQbsRbsSbsTbsUbrhbsVbsWbsXbnIbsYbsZbtabtXbtcbtYbnIbrqbpFbtebnMaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaacaaaaaaaaaaaaaaaaaaaaabpHbtfbtgbubbtibtibtibtjbtibtibgrbuibuhboAbujbjpaaaaaaaaaaafaafbtnbtnbtnbtnbtnbtnbtnaaaaaabrsbtpbtqbtrbtsbrJbrJbrJbrJbrJbrJbttbtubrybtwbtxbtybtzbrIbfmbfmbupbfmbfmbtCbsibrWbsxbmGbtHbmGbmGbmGbmGbmGbuxbmGaafbtobuAbtLbtMbtNbtMbtLbuGbtAaafbspbtQbtRbtSbuNbtUbspbtVaJlbtWbbmbuOaJibuTbnwbtZbuabuUbucbudbuebufbuYbvabuZbvjbukbulbumbnibnnbunbpubvnbnnbuqburbusbutbuubuubuvbuwbYfaXqbpjbvobplbplbsMbuybuzbvqbvxbuCbuDbuEbuFbvybrhbuHbuIbuJbnIbuKbuLbuMbtXbpCbvCbnIbpEbpFbvEbnMaaaaaaaaaaaacHOaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa