diff --git a/.gitignore b/.gitignore index 558bd8a78c3..c209860320c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ *.lk *.int *.backup -*.int \ No newline at end of file +*.int diff --git a/.travis.yml b/.travis.yml index 6eb8961a07f..7b90bccd36f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ sudo: false env: global: - BYOND_MAJOR="509" - - BYOND_MINOR="1317" + - BYOND_MINOR="1319" - NODE_VERSION="4" matrix: - DM_MAPFILE="tgstation2" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dab56f4a2f2..4026811af12 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -225,7 +225,7 @@ The above is a simple proc for checking all swords in a container and returning ``` var/list/bag_of_swords = list(sword, sword, sword, sword) var/obj/item/sword/best_sword = null -for(var/obj/item/sword/S in bag_of_items) +for(var/obj/item/sword/S in bag_of_swords) if(!best_sword || S.damage > best_sword.damage) best_sword = S ``` @@ -234,7 +234,7 @@ you can circumvent DM's filtering and automatic ```istype()``` checks by writing ``` var/list/bag_of_swords = list(sword, sword, sword, sword) var/obj/item/sword/best_sword = null -for(var/s in bag_of_items) +for(var/s in bag_of_swords) var/obj/item/sword/S = s if(!best_sword || S.damage > best_sword.damage) best_sword = S diff --git a/_maps/RandomZLevels/challenge.dmm b/_maps/RandomZLevels/challenge.dmm index 34222adb575..cafaefaa529 100644 --- a/_maps/RandomZLevels/challenge.dmm +++ b/_maps/RandomZLevels/challenge.dmm @@ -24,7 +24,7 @@ "ax" = (/obj/effect/decal/cleanable/oil,/mob/living/simple_animal/hostile/syndicate,/turf/simulated/floor/plating,/area/awaymission/challenge/start) "ay" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/start) "az" = (/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/simulated/floor/plasteel/airless{icon_state = "damaged2"},/area/awaymission/challenge/start) -"aA" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/awaymission/challenge/main) +"aA" = (/turf/indestructible{icon_state = "iron0"},/area/awaymission/challenge/main) "aB" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/awaymission/challenge/main) "aC" = (/turf/simulated/floor/plating,/area/awaymission/challenge/main) "aD" = (/turf/simulated/floor/plasteel/airless{icon_state = "damaged3"},/area/awaymission/challenge/main) @@ -63,46 +63,46 @@ "bk" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/machinery/light,/turf/simulated/floor/plating,/area/awaymission/challenge/main) "bl" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/awaymission/challenge/main) "bm" = (/obj/machinery/door/window,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) -"bn" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 2; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/awaymission/challenge/main) -"bo" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/main) -"bp" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/plating,/area/awaymission/challenge/main) -"bq" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/awaymission/challenge/main) -"br" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bs" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) -"bt" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/awaymission/challenge/main) -"bu" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/awaymission/challenge/main) -"bv" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/awaymission/challenge/main) -"bw" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 8; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bx" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/awaymission/challenge/main) -"by" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/awaymission/challenge/main) -"bz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bA" = (/obj/item/clothing/gloves/color/yellow,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/challenge/main) -"bB" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 8; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bC" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 4; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bD" = (/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) -"bE" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitecorner"},/area/awaymission/challenge/main) -"bF" = (/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/awaymission/challenge/main) -"bG" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/awaymission/challenge/main) -"bH" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bK" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bL" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bM" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bN" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bO" = (/turf/indestructible{icon_state = "iron0"},/area/awaymission/challenge/main) -"bP" = (/obj/item/weapon/gun/projectile/revolver/russian,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/awaymission/challenge/main) -"bQ" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/challenge/end) -"bR" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching evil areas."; name = "Security Monitor"; network = ""; pixel_x = 0; pixel_y = 30},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"bS" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bT" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"},/area/awaymission/challenge/main) -"bU" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) -"bV" = (/obj/machinery/light{dir = 1},/obj/structure/filingcabinet,/turf/simulated/floor/carpet,/area/awaymission/challenge/end) -"bW" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching evil areas."; name = "Security Monitor"; network = ""; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/carpet,/area/awaymission/challenge/end) -"bX" = (/obj/machinery/light{dir = 1},/obj/structure/rack,/obj/item/clothing/suit/armor/heavy,/turf/simulated/floor/wood,/area/awaymission/challenge/end) +"bn" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/awaymission/challenge/main) +"bo" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 2; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/awaymission/challenge/main) +"bp" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/main) +"bq" = (/obj/machinery/porta_turret{dir = 8; emagged = 1; installation = /obj/item/weapon/gun/energy/lasercannon},/turf/simulated/floor/plating,/area/awaymission/challenge/main) +"br" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/awaymission/challenge/main) +"bs" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bt" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) +"bu" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/awaymission/challenge/main) +"bv" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/awaymission/challenge/main) +"bw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/awaymission/challenge/main) +"bx" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 8; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"by" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/awaymission/challenge/main) +"bz" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/awaymission/challenge/main) +"bA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bB" = (/obj/item/clothing/gloves/color/yellow,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/awaymission/challenge/main) +"bC" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 8; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bD" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 4; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bE" = (/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor/plasteel/airless,/area/awaymission/challenge/main) +"bF" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitecorner"},/area/awaymission/challenge/main) +"bG" = (/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/awaymission/challenge/main) +"bH" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitecorner"},/area/awaymission/challenge/main) +"bI" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bK" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bL" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bM" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bN" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bO" = (/obj/machinery/power/emitter{active = 1; active_power_usage = 0; anchored = 1; dir = 1; idle_power_usage = 0; locked = 1; name = "Energy Cannon"; req_access_txt = "100"; state = 2; use_power = 0},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bP" = (/turf/indestructible{icon_state = "iron0"},/area/awaymission/challenge/end) +"bQ" = (/obj/item/weapon/gun/projectile/revolver/russian,/turf/simulated/floor/plasteel{icon_state = "whitehall"; dir = 2},/area/awaymission/challenge/main) +"bR" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/challenge/end) +"bS" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching evil areas."; name = "Security Monitor"; network = ""; pixel_x = 0; pixel_y = 30},/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"bT" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bU" = (/turf/simulated/floor/plasteel{dir = 2; icon_state = "warnwhite"},/area/awaymission/challenge/main) +"bV" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light,/turf/simulated/floor/plating/airless,/area/awaymission/challenge/main) +"bW" = (/obj/machinery/light{dir = 1},/obj/structure/filingcabinet,/turf/simulated/floor/carpet,/area/awaymission/challenge/end) +"bX" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching evil areas."; name = "Security Monitor"; network = ""; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/carpet,/area/awaymission/challenge/end) "bY" = (/turf/simulated/floor/carpet,/area/awaymission/challenge/end) "bZ" = (/obj/structure/mirror{pixel_y = 28},/turf/simulated/floor/wood,/area/awaymission/challenge/end) -"ca" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) +"ca" = (/obj/machinery/light{dir = 1},/obj/structure/rack,/obj/item/clothing/suit/armor/heavy,/turf/simulated/floor/wood,/area/awaymission/challenge/end) "cb" = (/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/awaymission/challenge/end) "cc" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) "cd" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) @@ -128,7 +128,7 @@ "cx" = (/obj/machinery/door/airlock/centcom{name = "Security"; opacity = 1; req_access_txt = "109"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) "cy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) "cz" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) -"cA" = (/turf/indestructible{icon_state = "iron0"},/area/awaymission/challenge/end) +"cA" = (/obj/structure/sign/securearea,/turf/indestructible{icon_state = "iron0"},/area/awaymission/challenge/end) "cB" = (/obj/machinery/door/airlock/centcom{name = "Administrator"; opacity = 1; req_access_txt = "109"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) "cC" = (/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) "cD" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) @@ -144,36 +144,36 @@ "cN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/end) "cO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/challenge/end) "cP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/challenge/end) -"cQ" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) +"cQ" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) "cR" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/awaymission/challenge/end) "cS" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/challenge/end) "cT" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/awaymission/challenge/end) -"cU" = (/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) -"cV" = (/obj/structure/sign/securearea,/turf/indestructible{icon_state = "iron0"},/area/awaymission/challenge/end) -"cW" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/challenge/end) -"cX" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"cY" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/challenge/end) -"cZ" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/awaymission/challenge/end) -"da" = (/obj/machinery/gateway,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/challenge/end) -"db" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/awaymission/challenge/end) -"de" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/space) -"df" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/challenge/end) -"dg" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"dh" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"di" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"dj" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"dk" = (/obj/structure/table,/obj/item/weapon/implanter/explosive,/obj/item/weapon/implanter/explosive{pixel_y = 4},/obj/item/weapon/implanter/explosive{pixel_y = 8},/obj/item/weapon/implanter/explosive{pixel_y = 12},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"dl" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/space) -"dm" = (/obj/machinery/door/airlock/centcom{name = "Gateway Access"; opacity = 1; req_access_txt = "109"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"dn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/end) -"do" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/mob/living/simple_animal/hostile/syndicate{name = "Syndicate Technician"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"dp" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) -"dq" = (/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) -"dr" = (/obj/structure/closet/emcloset,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) -"ds" = (/obj/structure/cable,/obj/machinery/power/smes/magical,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) -"dt" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) -"du" = (/obj/structure/closet/l3closet,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) - +"cU" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) +"cV" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/challenge/end) +"cW" = (/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"cX" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/challenge/end) +"cY" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/awaymission/challenge/end) +"cZ" = (/obj/machinery/gateway,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/awaymission/challenge/end) +"da" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/awaymission/challenge/end) +"db" = (/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) +"dc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"dd" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/space) +"de" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/challenge/end) +"df" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"dg" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"dh" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"di" = (/obj/structure/table,/obj/item/weapon/implanter/explosive,/obj/item/weapon/implanter/explosive{pixel_y = 4},/obj/item/weapon/implanter/explosive{pixel_y = 8},/obj/item/weapon/implanter/explosive{pixel_y = 12},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"dj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area/space) +"dk" = (/obj/machinery/door/airlock/centcom{name = "Gateway Access"; opacity = 1; req_access_txt = "109"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"dl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/end) +"dm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/mob/living/simple_animal/hostile/syndicate{name = "Syndicate Technician"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"dn" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/awaymission/challenge/end) +"do" = (/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) +"dp" = (/obj/structure/closet/emcloset,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) +"dq" = (/obj/structure/cable,/obj/machinery/power/smes/magical,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) +"dr" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) +"ds" = (/obj/structure/closet/l3closet,/turf/simulated/floor/bluegrid,/area/awaymission/challenge/end) + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -290,62 +290,62 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabadafadatauatafavabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabananawafafanavaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaxavavanayazadavabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObObObObObOaBaCaDaEbObObObObObOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaFaFbOaCaGaCaHbOaFaFaFaIbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaIaFbOaJaKaLaMbOaNaFaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObObObOaOaPaQaPbOaRaRaRaRbOaPaOaPaPbObObObOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaSaTaHaHaHaHaUaHaHaHaHaUaHaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaKaHaHaHaHaHaHaHaHaHaHaHaVaFaWbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaRaRaHaHaHaHaRaRaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaXaFaTaJaHaHaYaZaHaHaHaHaYaZaHaHaMaVaNaXbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaSaFaTaHaHaHbababbaHaHaHbabaaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaHaHaHaHaHaHaHaHbcaHaHaVaFaWbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaSaFaTaHaHaHaHbdbebfbebebgaHaHaHaHaVaWaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTbhaRaRbhbibjaCaCbkblbhaRaRbhaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaSaTaJaYaZbmaAaAaAaAaAaAbmaYaZaMaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaSaFaTaHbabaaHbnbobpbpbobqaHbabaaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFbraHbsaHaHbtbububububvaHaHaHaHaVaFaWbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaSaFaTaHaHaHaHaHaKaHaHaHaHaHaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaJaHaHaHaHaHaHaHaHaHaHaHaHaMaVaFaWbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaRaRaHaHaHaHaRaRaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaYaZaHaHaHaHaYaZaHaHaHbwaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHbabaaHaHaHaHbabaaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaSaTbxaRaRaRaHaRaRaRaRaHaRaRaRbyaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaYbzbzaZaHaYbzbzaZaHaYbzbzaZaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTbabababaaHbabababaaHbababAbaaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaWbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaSaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaRaRaHaRaRaHaRaRaHaHaHbBaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaNbCaJaHaHaYaZbmaYaZbmaYaZaHaHaMaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHbDaHbabaaHbabaaHbabaaHaHaHaVaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaTaHaHaHaHaHbEbFbFbGaHaHaHaHaHaVaFaWbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObObObObHbHbHbHbHbIbFbFbJbHbHbHbKbHbObObObOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFbLaFaFaFbMbFbFaVaNaFaFaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOaFaFaFaIaFaTbFbFbNaFbLaFaFaFbOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcAcAcAcAcAcAcAaFaTbPbFaVaFcAcAcAcAcAcAcAcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAbQbRbRbRbRbQcAaFbSbTbTbUbLcAbVbWbYbYbZbXcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcbcccdcecccbcAcAcAcfcfcAcAcAcgchcibYcjckcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcbclcdcdcdcbcAcmcncococncpcAcqcrcsbYcjctcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcbcbcdcdcucbcAcmcncdcdcncpcAcjcvcjcjcjcwcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcAcAcxcxcAcAcAcycncdcdcnczcAcAcAcVcBcAcAcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcncCcococncncDcncncdcdcncncDcncncdcocncncAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcncdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcncncAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcEcdcdcdcdcdcdcdcdcdcdcdcdcdcdcFcdcdcncGcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcncncncdcdcncncncncncncncncncncncdcdcncncAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcHcIcncdcdcncJcHcHcHcHcHcHcHcKcncdcdcncLcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcncdcdcncpcMcNcNcNcNcNcOcmcncdcdcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcncdcdcncpcPcacRcScTcQcPcmcncdcdcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcncdcdcncpcPcncWcXcYcncPcmcncdcdcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcncdcdcncpcPcncZdadbcncPcmcncdcdcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcncdcdcncpcPcUcUdicUcUcPcmcncdcdcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcncdcdcndedfdgdhdidjdkdfdlcncdcdcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcncdcdcdcodmcdcddicdcddmcocdcdcdcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcncFcdcncJdncdcddodpcddncKcncdcdcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaacmcndqcncncpdfdrcndsdtdudfcmcncndqcncpcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAcAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaBaCaDaEaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaFaFaAaCaGaCaHaAaFaFaFaIaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaIaFaAaJaKaLaMaAaNaFaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaOaPaQaPaAaRaRaRaRaAaPaOaPaPaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaSaTaHaHaHaHaUaHaHaHaHaUaHaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaKaHaHaHaHaHaHaHaHaHaHaHaVaFaWaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaRaRaHaHaHaHaRaRaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaXaFaTaJaHaHaYaZaHaHaHaHaYaZaHaHaMaVaNaXaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaSaFaTaHaHaHbababbaHaHaHbabaaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaHaHaHaHaHaHaHaHbcaHaHaVaFaWaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaSaFaTaHaHaHaHbdbebfbebebgaHaHaHaHaVaWaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTbhaRaRbhbibjaCaCbkblbhaRaRbhaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaSaTaJaYaZbmbnbnbnbnbnbnbmaYaZaMaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaSaFaTaHbabaaHbobpbqbqbpbraHbabaaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFbsaHbtaHaHbubvbvbvbvbwaHaHaHaHaVaFaWaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaSaFaTaHaHaHaHaHaKaHaHaHaHaHaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaJaHaHaHaHaHaHaHaHaHaHaHaHaMaVaFaWaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaRaRaHaHaHaHaRaRaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaYaZaHaHaHaHaYaZaHaHaHbxaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHbabaaHaHaHaHbabaaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaSaTbyaRaRaRaHaRaRaRaRaHaRaRaRbzaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaYbAbAaZaHaYbAbAaZaHaYbAbAaZaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTbabababaaHbabababaaHbababBbaaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaWaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaSaFaTaHaHaHaHaHaHaHaHaHaHaHaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaRaRaHaRaRaHaRaRaHaHaHbCaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaNbDaJaHaHaYaZbmaYaZbmaYaZaHaHaMaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHbEaHbabaaHbabaaHbabaaHaHaHaVaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaTaHaHaHaHaHbFbGbGbHaHaHaHaHaHaVaFaWaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAbIbIbIbIbIbJbGbGbKbIbIbIbLbIaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFbMaFaFaFbNbGbGaVaNaFaFaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaFaFaFbMaFaTbGbGbOaFbMaFaFaFaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbPbPbPbPbPbPbPaFaTbQbGaVaFbPbPbPbPbPbPbPbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbRbSbSbSbSbRbPaFbTbUbUbVbMbPbWbXbYbYbZcabPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPcbcccdcecccbbPbPbPcfcfbPbPbPcgchcibYcjckbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPcbclcdcdcdcbbPcmcncococncpbPcqcrcsbYcjctbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPcbcbcdcdcucbbPcmcncdcdcncpbPcjcvcjcjcjcwbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbPbPcxcxbPbPbPcycncdcdcnczbPbPbPcAcBbPbPbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPcncCcococncncDcncncdcdcncncDcncncdcocncnbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPcncdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcncnbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPcEcdcdcdcdcdcdcdcdcdcdcdcdcdcdcFcdcdcncGbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPcncncncdcdcncncncncncncncncncncncdcdcncnbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPcHcIcncdcdcncJcHcHcHcHcHcHcHcKcncdcdcncLbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcncdcdcncpcMcNcNcNcNcNcOcmcncdcdcncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcncdcdcncpcPcQcRcScTcUcPcmcncdcdcncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcncdcdcncpcPcncVcWcXcncPcmcncdcdcncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcncdcdcncpcPcncYcZdacncPcmcncdcdcncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcncdcdcncpcPdbdbdcdbdbcPcmcncdcdcncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcncdcdcndddedfdgdcdhdidedjcncdcdcncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcncdcdcdcodkcdcddccdcddkcocdcdcdcncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcncFcdcncJdlcdcddmdncddlcKcncdcdcncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPaacmcndocncncpdedpcndqdrdsdecmcncndocncpbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPbPbPbPbPbPbPbPbPbPbPbPbPbPbPbPbPbPbPbPbPbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -431,4 +431,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index 9ac3abd45e3..b717407bddd 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -314,7 +314,7 @@ "agb" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/apmaint) "agc" = (/obj/machinery/conveyor_switch{id = "Recycler2"},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/apmaint) "agd" = (/obj/machinery/mineral/stacking_unit_console{machinedir = 4},/turf/simulated/wall,/area/maintenance/apmaint) -"age" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/plating,/area/maintenance/apmaint) +"age" = (/obj/machinery/mineral/stacking_machine{input_dir = 2; output_dir = 1},/turf/simulated/floor/plating,/area/maintenance/apmaint) "agf" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/transport) "agg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "agh" = (/obj/machinery/ai_slipper{icon_state = "motion0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) @@ -1900,7 +1900,7 @@ "aKB" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "aKC" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) "aKD" = (/obj/machinery/door/airlock{name = "Unisex Restroom"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/prison) -"aKE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/button{id = "lawprivacy"; pixel_y = 25},/turf/simulated/floor/wood,/area/lawoffice) +"aKE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/button/door{id = "law"; pixel_y = 25},/turf/simulated/floor/wood,/area/lawoffice) "aKF" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) "aKG" = (/obj/structure/bed,/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/prison) "aKH" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/security/prison) @@ -1919,7 +1919,7 @@ "aKU" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "Law Office APC"; pixel_y = -24},/turf/simulated/floor/wood,/area/lawoffice) "aKV" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/status_display{pixel_y = -32},/obj/machinery/camera{c_tag = "Law Office"; dir = 1},/turf/simulated/floor/wood,/area/lawoffice) "aKW" = (/obj/structure/table/wood,/obj/item/weapon/folder/red,/obj/machinery/light,/obj/machinery/newscaster{pixel_y = -32},/obj/item/weapon/book/manual/wiki/security_space_law,/turf/simulated/floor/wood,/area/lawoffice) -"aKX" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/poddoor/shutters/preopen{id = "lawprivacy"; name = "Privacy Shutter"},/turf/simulated/floor/plating,/area/lawoffice) +"aKX" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters/preopen{id = "law"; layer = 2.9},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/lawoffice) "aKY" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/simulated/floor/plating/airless,/area/space/nearstation) "aKZ" = (/obj/structure/transit_tube,/turf/simulated/floor/plating/airless,/area/space/nearstation) "aLa" = (/turf/simulated/wall/r_wall,/area/engine/engineering) @@ -2207,7 +2207,7 @@ "aQw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hydroponics) "aQx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/hydroponics) "aQy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hydroponics) -"aQz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright{name = "Hydroponics Desk"; req_one_access_txt = "30:35"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "greenfull"},/area/hydroponics) +"aQz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright{name = "Hydroponics Desk"; req_access_txt = "35"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "greenfull"},/area/hydroponics) "aQA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 8; icon_state = "green"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "aQB" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "aQC" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_access_txt = "19"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) @@ -3235,7 +3235,7 @@ "bkk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/flasher{id = "Cell 2"; pixel_y = -28},/turf/simulated/floor/plasteel,/area/security/brig) "bkl" = (/obj/structure/table,/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = -1; pixel_y = -2},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = 1; pixel_y = 2},/obj/item/weapon/tank/internals/emergency_oxygen{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 6; icon_state = "brown"},/area/security/prison) "bkm" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/security/prison) -"bkn" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel,/area/security/prison) +"bkn" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel,/area/security/prison) "bko" = (/obj/structure/closet/secure_closet{name = "contraband locker"; req_access_txt = "3"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bkp" = (/obj/structure/rack,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/obj/item/weapon/storage/box/rubbershot,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/security/armory) "bkq" = (/turf/simulated/floor/wood,/area/security/hos) @@ -3541,7 +3541,7 @@ "bqe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "bqf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/crew_quarters/courtroom) "bqg" = (/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redcorner"},/area/crew_quarters/courtroom) -"bqh" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/courtroom) +"bqh" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/courtroom) "bqi" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "redcorner"},/area/hallway/primary/port{name = "Port Hallway"}) "bqj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/port{name = "Port Hallway"}) "bqk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/port{name = "Port Hallway"}) @@ -4042,7 +4042,7 @@ "bzL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/poddoor/shutters{id = "Mechbay"},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "bzM" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/assembly/robotics) "bzN" = (/turf/simulated/wall,/area/assembly/robotics) -"bzO" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 2; layer = 2.7; name = "Robotics Desk"; req_one_access = "29"},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/assembly/robotics) +"bzO" = (/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/table/reinforced,/obj/machinery/door/window/eastleft{dir = 2; layer = 2.7; name = "Robotics Desk"; req_access_txt = "29"; req_one_access = null},/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/assembly/robotics) "bzP" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab) "bzQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/poddoor/shutters/preopen{id = "robotics"; name = "robotics lab shutters"},/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/assembly/robotics) "bzR" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/toxins/lab) @@ -4433,7 +4433,7 @@ "bHm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bHn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/research{name = "Research Division"}) "bHo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) -"bHp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"}) +"bHp" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"}) "bHq" = (/obj/machinery/light{dir = 4},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) "bHr" = (/turf/simulated/wall,/area/hallway/primary/aft{name = "Aft Hallway"}) "bHs" = (/obj/effect/decal/cleanable/cobweb,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -4694,7 +4694,7 @@ "bMn" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bMo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bMp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"bMq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/table/glass,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) +"bMq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/structure/table/glass,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) "bMr" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bMs" = (/obj/machinery/hydroponics/constructable,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bMt" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4764,7 +4764,7 @@ "bNF" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Janitor"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "loadingarea"},/area/janitor) "bNG" = (/obj/machinery/door/airlock/maintenance{name = "Robotics Maintenance"; req_access_txt = "29"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bNH" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/crew_quarters/hor) -"bNI" = (/obj/machinery/door/airlock/research{name = "Robotics Lab"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellowfull"},/area/assembly/robotics) +"bNI" = (/obj/machinery/door/airlock/research{name = "Robotics Lab"; req_access_txt = "29"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteyellowfull"},/area/assembly/robotics) "bNJ" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/assembly/robotics) "bNK" = (/turf/simulated/floor/plasteel{icon_state = "white"},/area/crew_quarters/hor) "bNL" = (/obj/machinery/door/airlock/glass_research{name = "Testing Lab"; req_access_txt = "47"; req_one_access = null},/turf/simulated/floor/plasteel,/area/toxins/misc_lab) @@ -5021,7 +5021,7 @@ "bSC" = (/obj/machinery/computer/aifixer,/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/button/door{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -24; req_access_txt = "47"},/obj/machinery/button{id = "research"; name = "Research and Development Shutters"; pixel_x = -37},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whiteblue"},/area/crew_quarters/hor) "bSD" = (/obj/structure/closet/secure_closet/RD,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/crew_quarters/hor) "bSE" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel{icon_state = "whitepurple"; dir = 5},/area/toxins/mixing) -"bSF" = (/obj/structure/table,/obj/item/device/aicard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/clothing/glasses/science,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/crew_quarters/hor) +"bSF" = (/obj/structure/table,/obj/item/device/aicard,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/clothing/glasses/science,/obj/machinery/light_switch{pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/crew_quarters/hor) "bSG" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/crew_quarters/hor) "bSH" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bSI" = (/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "Research Lab APC"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 9; icon_state = "whiteblue"},/area/toxins/lab) @@ -5113,7 +5113,7 @@ "bUq" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/camera{c_tag = "Server Room"; dir = 4},/turf/simulated/floor/bluegrid{nitrogen = 100; oxygen = 0; temperature = 80},/area/toxins/server) "bUr" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteyellow"},/area/assembly/robotics) "bUs" = (/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume{frequency = 1449; id = "tox_airlock_pump"},/turf/simulated/floor/engine,/area/toxins/mixing) -"bUt" = (/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/plasteel,/area/toxins/misc_lab) +"bUt" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{frequency = 1439; locked = 0; pixel_y = 23},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab) "bUu" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "warnwhite"},/area/toxins/mixing) "bUv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "bUw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) @@ -5141,8 +5141,8 @@ "bUS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/genetics) "bUT" = (/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/genetics) "bUU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/alarm{dir = 4; pixel_x = -22},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whiteblue"},/area/medical/medbay2) -"bUV" = (/obj/machinery/disposal/bin,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) -"bUW" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) +"bUV" = (/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/toxins/lab) +"bUW" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j2s"; sortType = 10},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2) "bUX" = (/obj/structure/table/glass,/obj/item/weapon/airlock_painter,/obj/machinery/camera{c_tag = "Art Storage"; dir = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/storage/art) "bUY" = (/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/obj/item/weapon/gun/syringe,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whiteblue"},/area/medical/medbay2) "bUZ" = (/obj/structure/bed/chair/office/light{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/camera{c_tag = "Medbay Break Room"; dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/medical/medbay2) @@ -5202,7 +5202,7 @@ "bWb" = (/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "bWc" = (/obj/machinery/camera{c_tag = "Toxins Test Chamber Fore"; network = list("SS13","Toxins")},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel/airless,/area/toxins/test_area) "bWd" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE"},/turf/simulated/wall,/area/mine/explored) -"bWe" = (/obj/structure/table/glass,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/radio/intercom{frequency = 1485; name = "Station Intercom (Medbay)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) +"bWe" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/manipulator,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/stack/cable_coil,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/toxins/lab) "bWf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warnwhitecorner"},/area/toxins/lab) "bWg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/lab) "bWh" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/toxins/lab) @@ -5533,7 +5533,7 @@ "ccu" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ccv" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/obj/machinery/camera{c_tag = "Incinerator"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ccw" = (/turf/simulated/floor/plating,/area/maintenance/incinerator) -"ccx" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator) +"ccx" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/lab) "ccy" = (/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 24; pixel_y = -8; req_access_txt = "12"},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Gas Pump"},/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/maintenance/incinerator) "ccz" = (/obj/machinery/doorButtons/access_button{idDoor = "incinerator_airlock_exterior"; layer = 3.1; idSelf = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -24; pixel_y = -8},/obj/structure/sign/fire{pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/turf/simulated/floor/plating,/area/maintenance/incinerator) "ccA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/incinerator) @@ -5602,7 +5602,7 @@ "cdL" = (/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"; dir = 1},/area/toxins/test_area) "cdM" = (/turf/simulated/floor/plating/airless{icon_state = "warnplatecorner"},/area/toxins/test_area) "cdN" = (/turf/simulated/wall/r_wall,/area/toxins/storage) -"cdO" = (/obj/structure/table/glass,/obj/item/weapon/stock_parts/manipulator,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/stock_parts/manipulator,/obj/item/stack/cable_coil,/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteblue"},/area/toxins/lab) +"cdO" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/medbay2) "cdP" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 10},/area/medical/research{name = "Research Division"}) "cdQ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel{icon_state = "red"},/area/medical/research{name = "Research Division"}) "cdR" = (/turf/simulated/floor/plasteel{icon_state = "red"},/area/medical/research{name = "Research Division"}) @@ -5646,7 +5646,7 @@ "ceD" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) "ceE" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "ceF" = (/obj/machinery/atmospherics/components/unary/vent_pump,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurplecorner"},/area/medical/research{name = "Research Division"}) -"ceG" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/toxins/lab) +"ceG" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) "ceH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhitecorner"},/area/toxins/lab) "ceI" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/poddoor/shutters/preopen{id = "research"},/turf/simulated/floor/plating,/area/toxins/lab) "ceJ" = (/obj/machinery/door/poddoor/preopen{id = "Biohazard"; name = "Biohazard Containment Door"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "whitered"; dir = 8},/area/medical/research{name = "Research Division"}) @@ -5721,7 +5721,7 @@ "cga" = (/turf/simulated/floor/plasteel/airless{dir = 4; icon_state = "warningcorner"},/area/toxins/test_area) "cgb" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/toxins/storage) "cgc" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/toxins/storage) -"cgd" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"cgd" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "cge" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "cgf" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel,/area/toxins/storage) "cgg" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -5949,8 +5949,8 @@ "cku" = (/obj/machinery/door/airlock/glass{name = "Escape Hallway"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "neutral"},/area/hallway/primary/aft{name = "Aft Hallway"}) "ckv" = (/obj/machinery/door/airlock/glass{name = "Escape Hallway"},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 4},/area/hallway/primary/aft{name = "Aft Hallway"}) "ckw" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 1; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos) -"ckx" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) -"cky" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) +"ckx" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) +"cky" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "ckz" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos) "ckA" = (/obj/structure/sign/atmosplaque{desc = "This plaque commemorates the rise of the LINDA administration at CentCom, and the advent of a new era."; name = "\improper LINDA plaque"; pixel_x = 32},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) "ckB" = (/obj/machinery/light_switch{dir = 4; pixel_x = 22},/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitepurple"},/area/medical/genetics) @@ -6157,7 +6157,7 @@ "cou" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 4; layer = 2.9; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/atmos) "cov" = (/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "cow" = (/obj/machinery/camera{c_tag = "Atmospherics Central East"; dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) -"cox" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/xenobiology) +"cox" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) "coy" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "coz" = (/obj/structure/toilet{cistern = 1; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one has a heart drawn on the cistern."; dir = 4},/obj/machinery/button/door{id = "barbath"; name = "Bolts Control"; normaldoorcontrol = 1; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "coA" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/toxins/mixing) @@ -6196,14 +6196,14 @@ "cph" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) "cpi" = (/obj/machinery/door/window/eastright{dir = 2},/turf/simulated/floor/plasteel,/area/atmos) "cpj" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) -"cpk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 3; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cpk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cpl" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/machinery/meter,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cpm" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "To Mix"; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cpn" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/toxins/mixing) "cpo" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6; initialize_directions = 6},/turf/simulated/floor/plasteel,/area/atmos) "cpp" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Air to Mix"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"cpq" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 4; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cpr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cpq" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cpr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "co2"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cps" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) "cpt" = (/obj/machinery/door/airlock/external{name = "Atmosphereics External Access"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/atmos) "cpu" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6221,7 +6221,7 @@ "cpG" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) "cpH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/bed/chair,/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) "cpI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) -"cpJ" = (/obj/item/weapon/reagent_containers/dropper,/turf/simulated/wall,/area/toxins/misc_lab) +"cpJ" = (/obj/structure/table/glass,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/item/device/radio/intercom{frequency = 1485; name = "Station Intercom (Medbay)"; pixel_y = -29},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "whiteblue"},/area/medical/medbay2) "cpK" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/camera{c_tag = "Atmospherics Front Desk"; dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) "cpL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) "cpM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/bed/chair,/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/hallway/secondary/exit) @@ -6337,7 +6337,7 @@ "crS" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/shuttle/transport) "crT" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "crU" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/engine{name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) -"crV" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) +"crV" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) "crW" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "crX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) @@ -6385,7 +6385,7 @@ "csO" = (/turf/simulated/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/supply) "csP" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape) "csQ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape) -"csR" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/space,/area/shuttle/escape) +"csR" = (/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/components/unary/vent_pump,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "csS" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "csT" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape) "csU" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating/airless,/area/shuttle/escape) @@ -6394,7 +6394,7 @@ "csX" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) "csY" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/escape) "csZ" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/escape) -"cta" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/escape) +"cta" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "ctb" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "ctc" = (/turf/simulated/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape) "ctd" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) @@ -6561,11 +6561,11 @@ "cwi" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "cwj" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) "cwk" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cwl" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cwl" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "plasma"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cwm" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/door/window/eastright{dir = 2},/turf/simulated/floor/plasteel,/area/atmos) "cwn" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/door/window/eastright{dir = 2},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "cwo" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos) -"cwp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 0; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cwp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2o"; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cwq" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos) "cwr" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos) "cws" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 9},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel,/area/atmos) @@ -6637,7 +6637,7 @@ "cxG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/toxins/mixing) "cxH" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/toxins/mixing) "cxI" = (/obj/item/device/assembly/signaler{pixel_y = 8},/obj/item/device/assembly/signaler{pixel_x = -8; pixel_y = 5},/obj/item/device/assembly/signaler{pixel_x = 6; pixel_y = 5},/obj/item/device/assembly/signaler{pixel_x = -2; pixel_y = -2},/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whitepurple"},/area/toxins/mixing) -"cxJ" = (/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) +"cxJ" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/sign/deathsposal{pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cxK" = (/obj/machinery/power/apc{dir = 8; name = "Toxins Launch Room APC"; pixel_x = -25},/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "cxL" = (/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/mixing) "cxM" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "warnwhite"},/area/toxins/mixing) @@ -6646,7 +6646,7 @@ "cxP" = (/obj/structure/table/glass,/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/turf/simulated/floor/plasteel{icon_state = "whitepurplecorner"},/area/toxins/mixing) "cxQ" = (/obj/item/device/assembly/timer{pixel_x = 5; pixel_y = 4},/obj/item/device/assembly/timer{pixel_x = -4; pixel_y = 2},/obj/item/device/assembly/timer{pixel_x = 6; pixel_y = -4},/obj/item/device/assembly/timer,/obj/structure/table/glass,/obj/machinery/firealarm{dir = 1; pixel_x = -3; pixel_y = -24},/obj/machinery/light_switch{name = "light switch "; pixel_x = 11; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitepurple"},/area/toxins/mixing) "cxR" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) -"cxS" = (/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) +"cxS" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cxT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "cxU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/pink{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cxV" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 1; icon_state = "warning"},/area/toxins/mixing) @@ -6663,7 +6663,7 @@ "cyg" = (/obj/effect/landmark/start{name = "Chaplain"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/carpet,/area/chapel/main) "cyh" = (/obj/structure/table/glass,/obj/machinery/button/massdriver{id = "toxinsdriver"; pixel_x = 25},/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/maintenance/asmaint2{icon_state = "toxtest"; name = "Toxins Launch Room"}) "cyi" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/medical/research{name = "Research Division"}) -"cyj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"cyj" = (/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/camera{c_tag = "Xenobiology Center"; dir = 8},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warnwhite"},/area/toxins/xenobiology) "cyk" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cyl" = (/obj/machinery/light{dir = 8},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cym" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Research Divison Access"; dir = 1; network = list("SS13","RD")},/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warnwhite"},/area/medical/research{name = "Research Division"}) @@ -6672,7 +6672,7 @@ "cyp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable/pink{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/pink{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cyq" = (/obj/structure/cable/pink{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cyr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "whiteredcorner"; dir = 4},/area/medical/research{name = "Research Division"}) -"cys" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"cys" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/simulated/floor/plating/airless,/area/shuttle/escape) "cyt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/pink{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cyu" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/toxins/xenobiology) "cyv" = (/obj/machinery/camera{c_tag = "Xenobiology North"; dir = 6; network = list("SS13","RD")},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 5},/area/toxins/xenobiology) @@ -6885,8 +6885,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaaeaaeaaeaaeaVcaVdaVeaQMaVfaQMaQMaVgaVhaViaViaVjaVkaVlaVmaVnaVoaQMaVpaQMaVqaVraVsaNoaNoaNoaVtaNoaNoaVuaVvaVwaTSblOaNoaVyaVzaVAaNsaNtaNuaJKaCdaDeaFZaSzaeHbmSaeHbmSbnQaeGaLaaLaaLaaRraRrbbsbhRaVCaVDaVDaVDaVDaVCaVDaVDaVCaTZaVEaVFaSIaVGaVHaSLaVIaVJaVKaVLaVMaVNaVOaVPaVQaVRaUqaVSaVTaVUaCdaVVaVWaVXaCdaVYaVZaWaaWbaWcaWdblRaWfaPoaWgaWhaQtaWiaLqaWjaWkaWlaWmaWmaWmaWnaLqaWoaFzaWpaWqaWraWsaWtaWuaWvaWwaWxaWsaWyaWzaWAaWBaWCaWDaTtaWEaVbaaaaaaaaaboHaeGaHHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaWFaaeaQLaQMaWGaOpaOpaOpaWHaJjaWIaWJaWKaJjaWLaQQaWMaWNaWOaQQaWPaWQaWRaWSaWTaRhaRhaRhaRhaRhaRhaRhaWUaWVaONaOObmGaWWaORaOSaWXaWYaHBaHCaCdaWZaXaaCdaeHbmSaeHbmSbnQaeHaaiaaiaXbaXcaXdaXebhUaVDaXgaXgaXgaVDaXgaXgaXgaVDaTZaXhaSIaSIaSIaSIaXiaSIaSIaSIaXjaXkaXlaXmaXnaXoaXpaUqaXqaXraXsaCdaXtaXuaXuaXvaXwaXxaXyaQpaQpaXzaQpaQpaPoaPoaPoaXAaPoaLqaLqaXBaLqaXCaXDaLqaLqaLqayRaFzaXEaXFaXFaRZaRZaXGaRXaRXaRXaRXaRXaRXaSaaXHaXIaWDaXJaXKaVbaVbaVbaeGboHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaXLaaeaQLaXMaXNaXOaXPaXQaXRaJjaJjaJjaJjaJjaXSaOpaXTaXUaXVaXWaJjaXXaXYaJjaXZaYaaYbaYcaYdaYeaYfaYfaYgaYhaQabmNaMcaMcaMcaQcaMaaYjaYkaYlaCdaDcaDeaCdaeHbnPaeHbnPbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDaVDaVDaVDaVDaXgaYqaTZaYraYsaNzaNzaYtaYuaYvaYwaSIaSIaYxaSLaYyaYzaYAaYBaUqaYCaCdaCdaCdaYDaPraCdaCdaYFaYGaYHaYIaYJaYKaYLbqObvHaYOaPoaYPaYQaYRaYSaYTaYUaYQaYQaYVaYWaPoayRaFzaWpaYXaFzaYYaYZaZaaZbaZcaZdaZeaZfaZgaSaaZhaZiaWDaQDaZjaZkaZlaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaaeaQLaZmaZnaZoaZpaZqaZraJjaZsaZtaTDaLOaZuaOpaZvaZwaZwaZwaZwaZwaZwaZwaZwaZwaZxaZxaZyaZyaZyaZyaZzaZAaZBbeSaZDaZEaZFaZGaZHaZIaZJaZKaCdaDcaDeaCdaeHbmSaeHbmSbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaZLaUaaUbaUcaVDaXgaVDaTZaYraYsaZMaZNaZOaZPaVOaZQaZRaSIaZSaZTaZUaZVaZWaZXaZYaZZbaababbacbadbaebafbagbahaxRbaibajbakbalbambanbanbaobapbaqbaqbaqbaqbarbaqbaqbaqbaqbaqbasbataFzaWpbaubavbawbwQbaybazbazbaAbyEbaCbazaSabaDbaEbaFbaGbaHbaIbaJaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaaeaPGbaKaOpbaLbaMbaNaPKbaObaPaPKaPKbaQaPLaPKbaRaZwbaSbaSbaTbaUbaVbaWbaWaZwbeObaYbaZbbabbbaZybbcbbdbbebbfbbgbbhbbhbbibbjbbkbblbbmaCdaDeaEfaCdaeGboGaeGboGbpxaeGaaiaHFaLabboczlczkczmaVCaVDaVDaSCcznaTZaVDaVDaVCaTZaYraYsaNzbbtbbubbvbbwaVNbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbbHbbIbbJbbKbbIbbLbbGbbMbbNbbObajbakbanbbPbbQbbRbanbbSaYQaYQaYQbbTbyFaYQaYQaYQbbWbbXaPobbYaIUbbZbcabcbaYYbccbcdbazbcebazbaCbcfbcgbchbcibcjbckbclbcmbcnbcoaVbaeGboHaeHaeHaaaaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaaeaaeaQLaZmaZnaZoaZpaZqaZraJjaZsaZtaTDaLOaZuaOpaZvaZwaZwaZwaZwaZwaZwaZwaZwaZwaZxaZxaZyaZyaZyaZyaZzaZAaZBbeSaZDaZEaZFaZGaZHaZIaZJaZKaCdaDcaDeaCdaeHbmSaeHbmSbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaZLaUaaUbaUcaVDaXgaVCaTZaYraYsaZMaZNaZOaZPaVOaZQaZRaSIaZSaZTaZUaZVaZWaZXaZYaZZbaababbacbadbaebafbagbahaxRbaibajbakbalbambanbanbaobapbaqbaqbaqbaqbarbaqbaqbaqbaqbaqbasbataFzaWpbaubavbawbwQbaybazbazbaAbyEbaCbazaSabaDbaEbaFbaGbaHbaIbaJaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaaeaPGbaKaOpbaLbaMbaNaPKbaObaPaPKaPKbaQaPLaPKbaRaZwbaSbaSbaTbaUbaVbaWbaWaZwbeObaYbaZbbabbbaZybbcbbdbbebbfbbgbbhbbhbbibbjbbkbblbbmaCdaDeaEfaCdaeGboGaeGboGbpxaeGaaiaHFaLabboczlczkczmaVCaVDaVDaSCcznaTZaVDaVDaVDaTZaYraYsaNzbbtbbubbvbbwaVNbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbbHbbIbbJbbKbbIbbLbbGbbMbbNbbObajbakbanbbPbbQbbRbanbbSaYQaYQaYQbbTbyFaYQaYQaYQbbWbbXaPobbYaIUbbZbcabcbaYYbccbcdbazbcebazbaCbcfbcgbchbcibcjbckbclbcmbcnbcoaVbaeGboHaeHaeHaaaaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaIiaIibcpbcqbcrbcsbctaJjaWIaWJaWKaJjbcubcvbcwaZwbcxbcybczbcybcybcybcybcAbcBbcCbcDbcEbcFbcGbcHbcIbcJbeTbcLbcMbcMbcNbcObcPaNuaJKaCdaDeaFZaSzaeHbmSaeHboGbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDbcQcztbcRaVDaXgaVDaTZaYraYsaNzbcSbcTaSLaSLbcUbcVaSIbcWbcXbcYbcZbdabdbbdcbddbdebdfbdgbdhbdibdjbdkbdlayebbObajbakbdmbdnbakbdmbyGaPobdpbdqbdrbdsbdtbdubdvbaqbdwbdxbdybdzaEBbbZbaubdAaRZbdBbdCbazbazbdDbdEbaCbdFaSabdGbdHbdIbdJbdKbdLbdMaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHaLHaIiaIiaIiaIiaIiaIiaJjaJjaJjaJjaJjbdOaOpbdPaZwbdQbcybdSbdRbdTbdUbdVbdWbdXbdYbdZbeabebbecaPYbedbeeaMabefbegbefaQcaMabbkaHBaHCaCdaDeaFZaSzaeHbnPaeHbnPbnQaeHaaaaaiaYmaRraYnaYoaYpaVDaXgaVDaVDaVDaVDaVDaXgaVDaTZaYraYsaNzaNzbehbeibejbekaSIaSIbelbembenbeobepbeqaLaberaSIaSIbesbetbeuaSIaSIbevayebbObanbanbajbewbajbajbyHaPoaPoaPobeybeybezaPoaPoaYQbyIbeAaPobeBaUKbeCbeDbeEbeFbeGbdCbazbeHbeIbeJbyJbeLaSabeMbeNbpBbePaQDbcnbeQaVbaeHboHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaLHaLHaLHbiGbiGbiGbgibghbgjbeUbeVbeWbeXaJjaSlaOpbeYaZwbeZbcybfabfbbfbbfbbfbbfcbfdbfebffbfgbfhbfibfjbfkbflbfmaNobfnaNobfobfpbfqaHBaHCaCdaDeaFZaSzaeHbmSaeHbmSbnQaeHaaiaaiaXbbfrbfsbftaYpaVDaXgaXgaXgaVDaXgaXgbfuaVDaTZaXhaSIaSIaSIaSIbfvaSIaSIaSIbfwbfxbembfybfzbfAbfBaSIbfCaSIbfDbfEbfFbfGbfHbfIbfJayebbObanbfKbfLbfMbfNbfNbfNbfNbfObfPbfQbfRbfSbfTaPobfUbfVbfWaPobfXaHbbfYaXFaXFaRZaRZbfZaRXaRXaRXaRXaRXaRXaSabgabgbbgcbgdbgebgfbggaVbaeGboHaeGaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6905,47 +6905,47 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaMaaMaaMaaMaaMaaMabnGbnKbqKbqLbqMbqNbzJbqPbqMbqQbqRbqSaNubqTbqUbqVbqWbqWbqXbqYaJPcwMaeGaeHaeHaeHaeHaeHaeGaHHaeHaeHaeHaeHaeHaeHaeGaeHaeHaeHaTwcrqaKYaMeaMeaKZaKYaMeaMeaKZaNwaMeaMeaMeaNwaMecseaIFbrabrabrabraaCdaUqbrbaCFbrcaUxbrdbpCbrebrfbrgbrhbpCbribrjbrkbrlbrmbqzbqxbpCbrnbrobpCbrpbpCbrqaHbbrrbkQaeHaeHaeHaeHaeHaeHaeHbkRbqJapjbrsbrtbrubrubrubrubrubrtaeGaeGbnQaeHaeHaeGaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrwbrxbrybrzbnIbrAbrBbrCbrDbqfbqfbrEbrFbnKbrGbrHbfqaHBbrIbrJbrKbrLbrMbrNbrOcwQcwNaeGaeHaIyaIyaIyaeHaeGaeGaeHaeHaIyaIyaeHaeGaeGaeHaeHaeHaeHaeHaeGaHHaeGaeGaeGaeHaeHaeGaeHaeHaeHaeHaeHaeHaTwcrqbrRbrSbrTbrUaCdaCdbqraCFboOaPlbrVbpCbrWbrXbpDbpCbpCbpCbpCbpCbpCbpCbpCbpCbpCbpCbrYbpCbpCbpCbrZaFzbsabrsbrsbrsbrsbrsbrsbrsbrsbrsbsbbrsbrsbrtbrubrubrubrubscbrtaeGbnQbnQaeHaeHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsdbsebsebsfbnIbsgboxbshbsibsjbskbslbskbskbnIbnIbsmaHBbsnaCdbsoaCdaCdaCdaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdbspbspbspaCdaCdaCdaCdaCdaCdbsqbsqbsqbsqbsrbssbstbsuaCdbsvbswaCFbkFayebrVbpCbsxbsybszbsybsAbsBbsCbsDbQKbsFbsGbsHbsybsIbsybsJbsKbpCbpGaFzbsLbsMbsNbsObsPbsQbsRbsSbsTbsTbsUbsTbsVbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeGaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbsWbrvbnIbsXboxbsYbsZbpqbtabtbbtbbtbbtcbtdbteaHBaHCaCdaDeaDeaDeaDeaDeaDeaDeaXabswbswbswbtfbhPbhPaXabswbswbswbtfaDcbtgaDeaXabswbswbswbtfaDeaDeaXabswbswbswbtfaDeaDeaDeaDebthbtibtjbtibtibtkbtlbtmbtnaCdbtoaDeaCFboOaVZaErbtpbtqbtrbtsbttbtrbtubttbtrbttbttbtrbtrbttbttbttbtvbtwbtxbtybtzbtAbrsbtBbtCbtDbtEbtFbtGbtHbtIbtJbsTbtKbtLbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbtMbsebrvbsebtNbnIbnGbtObnIbsZbnKbtabtabtPbtabnKbnIbtQbtRbtSaCdbtTbtUbtTaCdaCdaCdaCdbtVbtWaSyaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDebtXbtYaDeaDeaDeaDebtZaVWbuaaCdbrabrabrabubbtibucbudbtibthaDeaDeaCFbkFaJZbuebufbugbuhbuibujbuhbuibujbuhbukbujbuhbulbumbunbuobupbuqburbusbutbuubuvbuwbuxbuybuzbuAbuBbuBbuCbsTbuDbuEbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbuFbuGbuHbuIbuJbnIbuKbnIbnIbuLbnIbnIbnIbnIbnIbnIbnIbuMbuNbuOaCdaCdaCdaCdaCdbuPbuPaCdaCdaCdaCdbuQaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdbuRaCdaCdaCdbuPbuPbrabrabuSbuTbuUbraaCdaCdaCdaCFbuVbuWbuXbpCbuYbuZbvabvbbuZbvcbvbbvdbvabvbbvebvfbsybvgbsybvhbvibpCbvjbvkbvlbvmbsTbsTbsTbvnbvobuBbuBbvpbsTbvqbvrbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbsWbrvbnIbsXboxbsYbsZbpqbtabtbbtbbtbbtcbtdbteaHBaHCaCdaDeaDeaDeaDeaDeaDeaDeaXabswbswbswbtfbhPbhPaXabswbswbswbtfaDcbtgaDeaXabswbswbswbtfaDeaDeaXabswbswbswbtfaDeaDeaDeaDebthbtibtjbtibtibtkbtlbtmbtnaCdbtoaDeaCFboOaVZaErbtpbtqbtrbtsbttbtrbtubttbtrbttbttbtrbtrbttbttbttbtvbtwbtxbtybtzbtAbrsbtBbtCbtDbtEbtFbtGbtHbtIbtJbsTbtKbtLbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbtMbsebrvbsebtNbnIbnGbtObnIbsZbnKbtabtabtPbtabnKbnIbtQbtRbtSaCdbtTbtUbtTaCdaCdaCdaCdbtVbtWaSyaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDeaDebtXbtYaDeaDeaDeaDebtZaVWbuaaCdbrabrabrabubbtibucbudbtibthaDeaDeaCFbkFaJZbuebufbugbuhbuibujbuhbuibujbuhbukbujbuhbulbumbunbuobupbuqburbusbutbuubuvbuwbuxbuybuzbuAbuBbuBbuCbsTbuDbuEbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbuFbuGbuHbuIbuJbnIbuKbnIbnIbuLbnIbnIbnIbnIbnIbnIbnIbuMbuNbuOaCdaCdaCdaCdaCdbuPbuPaCdaCdaCdaCdbuQaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdbuRaCdaCdaCdbuPbuPbrabrabuSbuTbuUbraaCdaCdaCdaCFbuVbuWbuXbpCbuYbuZbvabvbbuZbvcbvbbvdbvabvbbvebvfbsybvgbsybvhbvibpCbvjbvkbvlbvmbsTbsTbsTbvnbvobuBbuBbvpbsTbvqbvrbrtbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeGaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbvsbvtbvubvvbvwbvxbvybvzbvzbvAbvBbvCbvDbvEbvFbvGbzKbvIbvJbvKbvLbRGbvMbvMbvNbvObvObvPbvQbvMbvMbvMbvMbvRbvSbvMbvMbvMbvTbvUbvVbvWbvXbvMbvMbvTbvMbvRbvLbvYbvZbwabwbbvMbvRbwcbwdbvMbvMbwebvObvObwfbvMbwgbwhbwibwjbwkbwlbvMbwmbwnbuNbwobpCbwpbrWbpCbwqbrWbpCbwrbrWbpCbwsbrWbpCbwtbwubwvbwwbwvbpCbwxbnYbwybrsbwzbsTbsTbsTbwAbwBbwCbwDbsTbsTbwEbtLbrubrubrubrubrubrtaeHbnQaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbwFbwGbrvbwHbwIbwJbwKbwKbwKbwKbwLbwMbwNbwObwPbwPbzLbwRbwSbwTbwUbwTbwTbwTbwTbwTbwVbwWbwTbwTbwTbwTbwTbwTbwUbwTbwTbwTbwXbwTbwYbwZbxabxbbxcbwXbwTbwTbwUbxdbwTbxebwTbwTbwTbxfbxgbxbbxbbxbbxbbxbbxhbxbbxibxjbwTbwTbxdbxebwTbxebwTbxkbxlbpCbxmbxnbpCbxobxnbpCbxpbxnbpCbxqbxnbpCbwvbwubwvbwwbxrbpCbxsbiobxtbxubxvbxwbxxbxxbxybxzbxxbxAbxBbsTbwEbrtbrubrubrubrubrubrtaeHbnQaeHaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbxCbxDbrvbrvbrvbsebvBbxEbxFbxGbxHbxIbvBbxJbxKbxLbxLbxLbxLbxLbxMbxLbxNbxLbxLbxObxLbxPbxQbxQbxQbxQbxRbxSbxTbSkbxUbxVbxWbSybxYbxZbxXbxXbxXbyabxXbybbxXbxXbycbxXbydbxXbxXbxXbxXbxXbSJbyebyfbygbyhbyhbyibyfbyhbyfbyhbyjbykbpCbylbymbpCbylbynbpCbylbyobpCbylbypbpCbyqbyrbyqbwwbysbpCbytbyubyvbrsbrsbrsbrsbrsbrsbrsbrsbrsbrsbywbwEbrtbrubrubrubrubscbrtaeHbnQaeHaeGaeGaeGaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebyxbyybrvbyzbrvbsebvBbyAbyBbyCbxHbyDbzNbzMbzQbzObzTbzSbzNbzUbzNbzNbAPbzNbzNbzNbAQbAQbAVbAVbAQbAQbAQbAQbAQbAQbyQbyRbySbyTbyUbyTbyTbyTbyTbyVbyTbyWbyXbyYbyYbyYbyYbyYbyYbyYbyYbyYbyZbzabzbbzcbzdbzdbzebzfbzdbzfbzgbzabyZbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzhbzibpCbzjbzkbzkbzlbzmbznbzkbzobzpbzqaRYbzkbzsbztbzubzkbAXbzwbrtbrubrubrubrubrubrtaeGbnQaeHaeHaHHaeGaHHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbzxbzybzzbrvbzAbrvbsebvBbAYbzCbzDbzDbzEbBabAZbBcbBbbBbbBbbBebBdbzNbBhbDlbBgbBibzNbBkbBjbCjbBlbClbCkbCnbCmbCobAQbCqbzVbzWbyTbzXbzYbzZbAabAbbAcbyTbAdbAebyYbAfbAgbAhbAibAjbAkbAjbyYbAlbAmbAnbAobApbApbAqbArbApbArbApbAsbAtbzhbzGbAvbAwbzhbAxbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbzkbzrbAubAJbAKbALbzobAMbzobANbzkbAObCvbCsbzkbrsbrsbrsbrsbrsbrsbrsbrsbrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbyzbrvbsebvBbARbASbATbxHbAUbzNbCwbDibDhbDhbDhbDkbDjbzNbEqbDnbDmbDobzNbDqbDpbDsbDrbDtbCkbDwbDubDxbAQbEkbBmbBnbyTbBobBpbBqbBpbBrbBsbyTbBtbBubyYbBvbBwbBxbBybAjbAjbBzbyYbApbApbBAbBBbApbApbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBTbBVbBWbBXbAebzkbBYbBZbCabAKbzobzobCbbCcbzobCdbAObAObCebzkaabaabaabaabaabaabaabaaeaeGaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbsebvBbCfbCgbvBbChbCibzNbElbEmbElbEnbEnbEpbEnbzNbFAbDnbDmbHdbzNbEsbErbEubEtbDtbCkbExbEwbEybAQbCxbBmbCybCzbCAbBpbBpbBpbBpbCBbyTbCCbCDbyYbCEbCFbBxbCGbAjbAjbAjbyYbCHbBEbCIbCJbCJbCJbCKbCLbCMbCMbCNbArbCObzhbCPbCQbCRbzhbCSbCTbCUbAAbCVbBTbCWbBTbCXbzhbCYbAebzkbCZbBZbCabDabDbbzobDcbDdbDebzkbzkbzkbzkbzkaaeaabaabaabaabaabaabaaebnQbnQbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebDfbyxbDgbzNbFpbEzbFrbFqbFtbFsbFvbFubFxbFwbFzbFybDnbDmbHfbzNbFCbFBbFCbFEbFGbFGbFCbFCbFCbAQbCxbBmbBnbDAbDBbBpbBpbBpbBpbBpbDCbCCbDDbyYbyYbyYbDEbyYbyYbyYbyYbyYbDFbApbDGbDHbDIbDJbDJbDKbDIbDLbDMbDNbDObDPbDQbBTbDRbzhbAxbCTbCUbAAbDSbDTbDUbDVbDWbzhbDXbAebzkbDYbDZbEabEbbEcbEdbEcbEcbEebEebEfbEgbEhbzkaaeaaeaabaabaabaabaaeaaeaeHaeGaeGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbEibEjbvAbDgbzNbFJbFHbFHbFHbFSbFKbGkbGkbGkbGkbGmbGlbHcbHbbUrbzNbUtbHebHhbHgbHjbHibHkbHibHmbHlbHpbBmbBnbyTbEAbEBbBpbBpbECbEDbyTbCCbEEbyYbEFbEGbEHbEIbEJbEKbELbEMbAqbApbDGbENbEObEPbApbEQbERbESbDMbETbEUbzhbEVbBTbEWbzhbAxbEXbEYbEZbFabFbbFcbFdbFebzhbFfbAebzkbFgbBZbCabFhbFibzobFibFibFjbzobFkbzobzobFlaaeaaeaaeaabaabaaeaaeaaeaeHaHHaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbzxbzybzzbrvbzAbrvbsebvBbAYbzCbzDbzDbzEbBabAZbBcbBbbBbbBbbBebBdbzNbBhbDlbBgbBibzNbBkbBjbCjbBlbClbCkbCnbCmbCobAQbCqbzVbzWbyTbzXbzYbzZbAabAbbAcbyTbAdbAebyYbAfbAgbAhbAibAjbAkbAjbyYbAlbAmbAnbAobApbApbAqbArbApbArbApbAsbAtbzhbzGbAvbAwbzhbAxbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbzkbzrbAubAJbAKbALbzobAMbzobANbzkbAObCvbCsbzkbrsbrsbrsbrubrubrubrubrubrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbyzbrvbsebvBbARbASbATbxHbAUbzNbCwbDibDhbDhbDhbDkbDjbzNbEqbDnbDmbDobzNbDqbDpbDsbDrbDtbCkbDwbDubDxbAQbEkbBmbBnbyTbBobBpbBqbBpbBrbBsbyTbBtbBubyYbBvbBwbBxbBybAjbAjbBzbyYbApbApbBAbBBbApbApbBCbBDbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBTbBVbBWbBXbAebzkbBYbBZbCabAKbzobzobCbbCcbzobCdbAObAObCebzkaabaabbrsbrsbrsbrsbrsbrsbrsaeHbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbsebvBbCfbCgbvBbChbCibzNbElbEmbElbEnbEnbEpbEnbzNbFAbDnbDmbHdbzNbEsbErbEubEtbDtbCkbExbEwbEybAQbCxbBmbCybCzbCAbBpbBpbBpbBpbCBbyTbCCbCDbyYbCEbCFbBxbCGbAjbAjbAjbyYbCHbBEbCIbCJbCJbCJbCKbCLbCMbCMbCNbArbCObzhbCPbCQbCRbzhbCSbCTbCUbAAbCVbBTbCWbBTbCXbzhbCYbAebzkbCZbBZbCabDabDbbzobDcbDdbDebzkbzkbzkbzkbzkaaeaabaabaabaabaabaabaaeaeGaeGbnQaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbsebDfbyxbDgbzNbFpbEzbFrbFqbFtbFsbFvbFubFxbFwbFzbFybDnbDmbHfbzNbFCbFBbFCbFEbFGbFGbFCbFCbFCbAQbCxbBmbBnbDAbDBbBpbBpbBpbBpbBpbDCbCCbDDbyYbyYbyYbDEbyYbyYbyYbyYbyYbDFbApbDGbDHbDIbDJbDJbDKbDIbDLbDMbDNbDObDPbDQbBTbDRbzhbAxbCTbCUbAAbDSbDTbDUbDVbDWbzhbDXbAebzkbDYbDZbEabEbbEcbEdbEcbEcbEebEebEfbEgbEhbzkaaeaaeaabaabaabaabaaeaaecxebnQbnQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbEibEjbvAbDgbzNbFJbFHbFHbFHbFSbFKbGkbGkbGkbGkbGmbGlbHcbHbbUrbzNbMwbHebHhbHgbHjbHibHkbHibHmbHlbHpbBmbBnbyTbEAbEBbBpbBpbECbEDbyTbCCbEEbyYbEFbEGbEHbEIbEJbEKbELbEMbAqbApbDGbENbEObEPbApbEQbERbESbDMbETbEUbzhbEVbBTbEWbzhbAxbEXbEYbEZbFabFbbFcbFdbFebzhbFfbAebzkbFgbBZbCabFhbFibzobFibFibFjbzobFkbzobzobFlaaeaaeaaeaabaabaaeaaeaaeaeGaHHaHHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbFmbvAbFnbFobDgbzNbImbIjbInbFvbEobIobJqbJmbKnbJrbKqbKobKubKtbKvbzNbLBbLAbLDbLCbMqbMobMxbMwbNDbMybNEbBmbFLbyTbFMbFNbFObFPbFQbFRbNFbCCbCDbyYbFTbCFbBwbFUbFVbFWbFXbEMbAqbApbDGbENbApbApbApbArbApbFYbDMbETbFZbyZbyZbyZbyZbyZbyZbyZbGabzhbzhbGbbzhbzhbzhbzhbGcbAebzkbGdbBZbCabGebBZbBZbBZbBZbzobzobGdbGdbzobFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGfbGgbGhaabaabaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbxDbrvbrvbGibGjbzNbzNbzNbzNbNGbzNbzNbzNbzNbzNbzNbzNbzNbNJbNIbNJbzNcpJbFCcpJbFCbFCbAVbNLbAVbAQbAQbGobBmbGpbyTbyUbyTbyTbyTbyTbyTbyTbGqbGrbyYbGsbBwbBwbGtbGubGvbELbEMbBCbGwbGxbzabzgbzgbGybzbbzgbzabGzbGAbGBbGCbyZbGDbGEbGEbGFbyZbGGbGHbGIbGJbGKbGLbGMbzhbCYbAebzkbGNbBZbCabGObGPbzobGQbGQbzobGRbzrbzrbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGfbGgbGhaabaabaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbxDbrvbrvbGibGjbzNbzNbzNbzNbNGbzNbzNbzNbzNbzNbzNbzNbzNbNJbNIbNJbzNbFCbFCbFCbFCbFCbAVbNLbAVbAQbAQbGobBmbGpbyTbyUbyTbyTbyTbyTbyTbyTbGqbGrbyYbGsbBwbBwbGtbGubGvbELbEMbBCbGwbGxbzabzgbzgbGybzbbzgbzabGzbGAbGBbGCbyZbGDbGEbGEbGFbyZbGGbGHbGIbGJbGKbGLbGMbzhbCYbAebzkbGNbBZbCabGObGPbzobGQbGQbzobGRbzrbzrbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGTbGUbGVaabaabaabaabaabaabaacaacaacaacaacaacaacaadaadaabaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbGWbGXbGYbrvbGibGjbGZbHabsdbrvbsebsebsebOCbsdcqjbOEbOFbrvbOHbOGbOJbOIbOKbTDbPwbTDbPxbIpbVCbIpbPybIqbGobBmbHqbHrbHsbHtbHubHvbHwbHxbHubCCbAebyYbHybBwbBwbBwbHzbHAbELbEMbAqbApbHBbHCbHDbHEbHFbHGbHHbzgbHIbETbApbHJbHKbHLbHMbHNbHObHPbHQbBLbHRbBLbBLbHSbHTbzhbHUbAebzkbHVbBZbHWbHXbHYbHYbHYbHYbHZbGRbzrbIabGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIbbIcbIdbGhbIebIebIebIebIeaabaabaabaadaadaadaadaadaadaabaabaabaaebIfaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbIgbsebGibIhbGibGjbIibsebsebrvbPzbRybRybPAbRybRybRybRybPBbPRbPQbQzbQwbQCbQAbPRbPRbQDbUBcghcarbQEbHnbHobQFbIsbItbIubIvbIwbIxbIybIzbHubCCbAebIAbBwbBwbBwbBwbHzbHAbELbEMbAqbApbIBbzgbICbIDbIEbIFbIGbzgbHIbIHbApbHJbIIbIJbIKbILbIMbINbIObIPbIQbIRbBTbBTbISbzhbHUbAebzkbITbBZbIUbIVbIWbzobIWbzobzobGRbIXbIYbGSbFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIZbJabGUbJbbJcbIebJdbJebJfbIeaabaabaabaabaabaabaabaabaabaabaabaaebJgaaeaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbJhbIkbJibJjbJkbJlbsebsebRzbrvbJncobbRCbRCbRCbRCbRCbJobJobJobJpbREbRDbJobGnbGnbRFbYUbYTbRFbGnbGnbGnbJsbBmbGpbHrbJtbJubJvbJwbJxbJybHubCCbAebyYbJzbBwbJAbJBbJCbJDbJEbJFbJGbJHbJIbyZbJJbJKbJLbJMbJNbyZbHIbETbApbJObyZbJPbIKbApbHJbJQbJRbJSbIQbBTbBTbBTbBTbJTbHUbAebzkbJUbzrbGSbJVbJWbJWbJXbzobzobzobDYbDYbzobFlaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbJYbJZbKabKbbKcbKdbKebIeaabaabaabaabaabaabaabaabaabaabbKfbKfaaebKgaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbrvbGibGjbKhbKibMtbrvbJnbsebRCbSAbSzbSBbJobSCbKrbKsbSDbSGbSFbJobSIbTobTobTwbTvbzPbzPbzRbTxbTzbBmbGpbHrbKwbKxbHubHubHubHubHubKybKzbKAbKBbKCbKCbKCbKDbKEbKFbyZbKGbKHbKIbyZbKJbKKbKLbKMbKNbyZbyZbKObKPbyZbyZbKQbKRbKSbKTbJQbKUbKVbKWbKXbKYbKZbLabzhbHUbAebzkbGRbIYbGSbzobLbbLcbLdbzrbLebLfbzobzobLgbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbJYbJZbKabKbbKcbKdbKebIeaabaabaabaabaabaabaabaabaabaabbKfbKfaaebKgaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbrvbrvbrvbrvbrvbGibGjbKhbKibMtbrvbJnbsebRCbSAbSzbSBbJobSCbKrbKsbSDbSGbSFbJobSIbUtbTobTwbTvbzPbUVbzRbTxbTzbBmbGpbHrbKwbKxbHubHubHubHubHubKybKzbKAbKBbKCbKCbKCbKDbKEbKFbyZbKGbKHbKIbyZbKJbKKbKLbKMbKNbyZbyZbKObKPbyZbyZbKQbKRbKSbKTbJQbKUbKVbKWbKXbKYbKZbLabzhbHUbAebzkbGRbIYbGSbzobLbbLcbLdbzrbLebLfbzobzobLgbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaanWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGhbLhbLibLjbIebLkbLlbLmbLnavbaaeaaeaaeaaebKfaaeaaeaaeaaeaaeaaebLobLpaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfbrvbLqbLrbuGbLsbLtbLubLvbLtbLtbLtbLtbLwbsebRCbUqbTBbUxbJobLybLzbUzbUybUFbUAbJobUIbCtbVybVBbVAbWgbWfbWhbGnbGobBmbLEbHrbHUbKxbHubLFbLGbLHbHubLIbAebyYbLJbLKbBwbBwbHzbLLbyYbLMbLNbLObLPbyZbyZbLQbLRbzbbyZbyZbLSbLTbLUbLVbyZbyZbLWbLXbJQbJQbLYbLZbMabzhbzhbzhbzhbzhbHUbAebzkbzkbzkbzkbMbbzkbzkbzkbzkbzkbzkbzkbzkbzkbzkaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebIebIebMcbIebMdbMebMfbMgbMhbMiaaebKfaaeaaeaabaabaabaabaabaaeaaeaaeaaeaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbLqbMjbvtbMkbMlbMmbMnbIkbIkbIkbIkbWkbsebRCbWmbWlbWmbJobMubMvbWpbWobWqbMzbJobWrbCtbDvbCpbWsbCrbWubDzbXkbMAbBmbGpbHrbMBbMCbMDbMEbMFbMGbHubLIbAebMHbMIbMJbMKbMKbMLbMMbMNbMObMPbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbNcbNlbNmbNnbNobNpbMBbNqbNqbNqbNrbNqbNqbNqbNqbBXbNsbNtbNubNubNubNubNubNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvbNvcwRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebNxbNybIebNzbIebIebIebIebIeavbbNAaaeaaeaabaabaabaabaabaabaabaabaabaabaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbrvbrvbrvbrvbrvbrvbrvbsebsebsebsebNBbJobJobNHbXlbNHbJobXpbXobXrbXqbXsbNZbJobXtbCtbDvbYVbYibDybWubCubYWbGobBmbGpbHrbAebKxbHubNNbNObNPbHubNQbJxbNRbNSbNTbNUbNVbNWbNXbNYbOpbOabObbOcbOdbOebOfbOgbLUbLUbOhbOibOjbOkbMVbOlbOmbMVbMQbMVbMQbOnbMKbMKbMKbOobODbAebOqbOrbOrbOrbOrbOsbOrbOrbOrbOrbOtbOubHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOvbOwbLibKdbIebOxbOybOzbOAbIeaabaabaabaabaabaabaabaadaadaadaadaadaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabbrvbKjbKkbKlbKmbYYbYXbrvbrvbrvbrvbrvbNBbJocamcaAcaqcaXbNKbNKbNKccScccbNKbOLbJocdObCtbEvceGcdYcfsceHcfwbXkbOMbONbOObHrbCDbKxbHubHubOPbHubHubKxbAebOQbOQbOQbOQbORbOQbOQbOQbOSbOTbOUbOSbOVbOSbOWbOXbOYbOZbOZbPabPkbPcbOYbPdbPebPfbPgbPhbLObPibPjbMKbPSbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbHUbPmbHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPnbPobPpbPqbPrbPsbIebPtbPubIeaabaabaabaabaabaadaadaadaacaacaacaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabaabbrvbsebsebLxbsebsebsebsebsebsebsebrvbNBbJocfxbNKbNKcglbNKbNKczibQBcgmcgGbPCbPDchwchAchAchAchAchAchVciPbTxbPEbBmbPFbHrbPGbPHbPIbPIbTIbTHbPIbPLbAebOSbPMbPNbPObPPckKckBbOSbQYbPTbPUbPVbPWbOSbNnbPXbPYbPXbNnbNnbPZbQabQbbQcbNnbNnbQdbMKbQebQfbMKbMKbQgbQhbQibQjbQkbPlbQlbQmbQnbQobQpbQqbQrbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQsbJcbJcbQtbIebQubIebIebIebIeaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbMrbsebsebMsbsdbMtbsebsebsebsebPvbNBbJobJobJobJobJobJobJobJobJobJobJobJobJockMbFDcmRbFFcngbFIcnKcnLbGncnNbBmbQGbQHbQIbKzbKzbKzbKzbTJbKzbKzbKzbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbOSbScbQZbRabNlbRbbNnbRcbRdbRebRfbRgbNnbRhbRibLObMKbMKbMKbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbRubRvbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibRwbIebIebIebGhbIeaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbNCbsecopbrvbrvbrvbrvcorcorcorbrvbRxbMpbRybRybRybMpbMpcosbQxbRAbRBcoAbRBcoPbQxbQxcpnbQxbQxccNcbPceIbGnbGobBmbGpbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbRHbRIbRIbRIbRJbRKbRLbRIbRMbRNbRIbRObOSbRPbMKbRQbMKbRRbPXbRSbRTbRQbRUbRVbNnbRWbRXbRYbRZbSabSbbTFbPlbSdbSebSfbSgbShbSibSjcvKbSlbSmbSnbSobSpbSqbSrbSsbSsbSsbSsaeFaeFbStaeFbStbStbStbSubStbStbStaeFbStbStbStbStaeFaeFaeFaeFaeFaeFbSvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaajaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbOBbsecpNbrvbPbcgDbrvcqnbsebsebrvbNBcqocqobQxbQxbQxbQxbSwbQxbSxcqpcqLcqKcvYcgFcwycwbbSEbQxbIpcgHcwzbIqbGobBmbGpbUEbUGbWwbWwbUEbAebKxbOSbSKbSLbSMbSNbSObSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbSRbSXbOnbQfbMKbRRbPXbSYbRTbMKbRUbSZbTabTabTbbTcbTbbTabTdbTabPlbPlbPlbPlbTebTfbTgbThbTibTjbTkbTlbPlbTmbTnbHuaabaabaabaabaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbLxbsebsebPvbsebsebQvbsebsebsebrvbNBcpucxqbTpbTqbTrbTsbTtbTsbTucxrcxsbTybTybTybTycxtbTAcxubOIbZfcxvbTEbYubWxckEbZxcmkclwcmlbUEcoccoabOSbTKbRIbTLbRIbRIbRIbRIbTMbTNbTObTPbRIbTQbRMbTRbTObTSbPibPjbMKbRRbPXbSYbTUbTVbTWbTXbTYbTZbUabUbbUcbUdbTacxwbPlbUfbUgbUhbUibUjbUkbUlbQpbQpbQpbQpbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbUobUpaaebUnbUobUpaaebUnbUobUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaeaaebrvbrvbrvbrvbrvbsebsebrvbKpbKpbKpbrvbNBcpucxqbTpbTqbTqcvLbUscvMbUubTybTybTycxybUvbUwcxzcxBcxAcxCcdUcxDbHnbHobUCbUDbUEcxEbUXcvRcvQbJxcvSbOSbUHcxFbUJbUKbULbUMbRIbUNbUObOSbUPbUQbURbUSbUTbOSbUUbUVbUWbWebUYbNnbUZbVabVbbRUbMKbVcbVdbVdbVebVdbVfbTabVgbPlbVhbVibVjbVkbVlbRmbVmbVnbVobVpbVqbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIebIebNxbNybIebNzbIebIebIebIebIeavbbNAaaeaaeaabaabaabaabaabaabaabaabaabaabaabaabaabaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabbrvbrvbrvbrvbrvbrvbrvbrvbsebsebsebsebNBbJobJobNHbXlbNHbJobXpbXobXrbXqbXsbNZbJobXtbCtbDvbYVbYibDybWubCubYWbGobBmbGpbHrbAebKxbHubNNbNObNPbHubNQbJxbNRbNSbNTbNUbNVbNWbNXbNYbOpbOabObbOcbOdbOebOfbOgbLUbUWbOhbOibOjbOkbMVbOlbOmbMVbMQbMVbMQbOnbMKbMKbMKbOobODbAebOqbOrbOrbOrbOrbOsbOrbOrbOrbOrbOtbOubHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOvbOwbLibKdbIebOxbOybOzbOAbIeaabaabaabaabaabaabaabaadaadaadaadaadaabaabaabaabaabaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabbrvbKjbKkbKlbKmbYYbYXbrvbrvbrvbrvbrvbNBbJocamcaAcaqcaXbNKbNKbNKccScccbNKbOLbJobWebCtbEvccxcdYcfsceHcfwbXkbOMbONbOObHrbCDbKxbHubHubOPbHubHubKxbAebOQbOQbOQbOQbORbOQbOQbOQbOSbOTbOUbOSbOVbOSbOWbOXbOYbPcbOZbPabPkbPcbOYbPdbPebPfbPgbPhbLObPibPjbMKbPSbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbHUbPmbHuaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPnbPobPpbPqbPrbPsbIebPtbPubIeaabaabaabaabaabaadaadaadaacaacaacaadaadaadaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaJfaabaabaabaabbrvbsebsebLxbsebsebsebsebsebsebsebrvbNBbJocfxbNKbNKcglbNKbNKczibQBcgmcgGbPCbPDchwchAchAchAchAchAchVciPbTxbPEbBmbPFbHrbPGbPHbPIbPIbTIbTHbPIbPLbAebOSbPMbPNbPObPPckKckBbOSbQYbPTbPUbPVbPWbOSbNnbPXbPYcdObNnbNnbPZbQabQbbQcbNnbNnbQdbMKbQebQfbMKbMKbQgbQhbQibQjbQkbPlbQlbQmbQnbQobQpbQqbQrbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQsbJcbJcbQtbIebQubIebIebIebIeaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaJfaJfaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbMrbsebsebMsbsdbMtbsebsebsebsebPvbNBbJobJobJobJobJobJobJobJobJobJobJobJobJockMbFDcmRbFFcngbFIcnKcnLbGncnNbBmbQGbQHbQIbKzbKzbKzbKzbTJbKzbKzbKzbQLbQMbQNbQObQPbQQbQRbQSbQTbQUbQVbQWbQXbOSbScbQZbRabRdbRbbNnbRcbRdbRebRfbRgbNnbRhbRibLObMKbMKbMKbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbRubRvbPlbHUbPmbHuaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaibRwbIebIebIebGhbIeaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbNCbsecopbrvbrvbrvbrvcorcorcorbrvbRxbMpbRybRybRybMpbMpcosbQxbRAbRBcoAbRBcoPbQxbQxcpnbQxbQxccNcbPceIbGnbGobBmbGpbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbRHbRIbRIbRIbRJbRKbRLbRIbRMbRNbRIbRObOSbRPbMKbRQbRTbRRbPXbRSbRTbRQbRUbRVbNnbRWbRXbRYbRZbSabSbbTFbPlbSdbSebSfbSgbShbSibSjcvKbSlbSmbSnbSobSpbSqbSrbSsbSsbSsbSsaeFaeFbStaeFbStbStbStbSubStbStbStaeFbStbStbStbStaeFaeFaeFaeFaeFaeFbSvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaajaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbOBbsecpNbrvbPbcgDbrvcqnbsebsebrvbNBcqocqobQxbQxbQxbQxbSwbQxbSxcqpcqLcqKcvYcgFcwycwbbSEbQxbIpcgHcwzbIqbGobBmbGpbUEbUGbWwbWwbUEbAebKxbOSbSKbSLbSMbSNbSObSPbSPbSPbSQbSRbSSbSTbSUbSVbSWbSRbSXbOnbQfbRTbRRbPXbSYbRTbMKbRUbSZbTabTabTbbTcbTbbTabTdbTabPlbPlbPlbPlbTebTfbTgbThbTibTjbTkbTlbPlbTmbTnbHuaabaabaabaabaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbrvbLxbsebsebPvbsebsebQvbsebsebsebrvbNBcpucxqbTpbTqbTrbTsbTtbTsbTucxrcxsbTybTybTybTycxtbTAcxubOIbZfcxvbTEbYubWxckEbZxcmkclwcmlbUEcoccoabOSbTKbRIbTLbRIbRIbRIbRIbTMbTNbTObTPbRIbTQbRMbTRbTObTSbPibPjbRTbRRbPXbSYbTUbTVbTWbTXbTYbTZbUabUbbUcbUdbTacxwbPlbUfbUgbUhbUibUjbUkbUlbQpbQpbQpbQpbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbUobUpaaebUnbUobUpaaebUnbUobUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaaeaaebrvbrvbrvbrvbrvbsebsebrvbKpbKpbKpbrvbNBcpucxqbTpbTqbTqcvLbUscvMbUubTybTybTycxybUvbUwcxzcxBcxAcxCcdUcxDbHnbHobUCbUDbUEcxEbUXcvRcvQbJxcvSbOSbUHcxFbUJbUKbULbUMbRIbUNbUObOSbUPbUQbURbUSbUTbOSbUUcoxceGcpJbUYbNnbUZbVabVbbRUbMKbVcbVdbVdbVebVdbVfbTabVgbPlbVhbVibVjbVkbVlbRmbVmbVnbVobVpbVqbPlbHUbUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbVtbVtbVsaabaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaecpAcpBcpBbVubVubVubVubVubNBcpucxqbTpbTqbVvbTsbVwbTsbVxcxrcxsbTybTybTybVzcxGcxIcxHbIpbVCbVDbIqbGobVEbHqbUEbUEbUEbUEbUEbAebKxbOSbOSbOSbOSbOSbOSbOSbVFbOSbOSbOSbOSbOSbOSbVGbOSbOSbVHbVIbNnbNnbNnbNnbVJbVKbVLbVMbVNbVObVPbVQbVRbVSbVTbTabUebPlbVUbVUbVUbVUbVVbVWbVmbVXbRlbVYbVZbPlbWabUmbHuaabaabaabaaeaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWcbWbbVtbVtaabbVtbVtbVtbVtaaeaaeaaeaaebWdaaeaaeaaeaaebWdcpAbVubVubVubXjcxJbVucxKbWicqocqobQxbQxbQxbQxbWjbQxcxMcxLcxLcxLcxNbWncxPcxOcxQbQxbIpbVCbIpbIqbGobBmbGpbHrbWtcxRbWvbCDcbzcoabAebAebAebAebAebAebWybAebAebAebAebNobVIbWzbWAbWBbWzbWCbWDbVIbWEbWFbNnbWGbWHbWIbWJbWKbWLbWMbWNbWObVdbWPbTabWQbPlbWRbWSbWTbVkbWUbWVbWWbWXbWYbWUbWZbXabXbbXcbHuaabaabaabaabaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtbVtbXdbXebXfbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXhbXibXhbXNcxSbXmcxTbXnbIkbIkbIkbIkbIkbIkcxUbQxcxWcxVcxXcxXbQxbQxbQxcxYbWjcpnbIpbVCbIpbIqbOMbXubXvbXwbXxbXybXybXybXzbXAbXBbXBbXBbXCbXBbXBbXDbXBbXBbXBbXBbXEbXFbXGbXHbXIbXJbXKbXJbXLbXJbXJbNnbXMbMKbMKbMKbTTbVOcekbVdbXObVdbXPbTabXQbPlbXRbXSbXTbUibXUbXVbXWbUibXXbXYbXZbPlbYabCCbYbbYbbYbbYbbYcaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmagmagmagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWcbWbbVtbVtaabbVtbVtbVtbVtaaeaaeaaeaaebWdaaeaaeaaeaaebWdcpAbVubVubVubXjcsRbVucxKbWicqocqobQxbQxbQxbQxbWjbQxcxMcxLcxLcxLcxNbWncxPcxOcxQbQxbIpbVCbIpbIqbGobBmbGpbHrbWtcxRbWvbCDcbzcoabAebAebAebAebAebAebWybAebAebAebAebNobVIbWzbWAbWBbWzbWCbWDbVIbWEbWFbNnbWGbWHbWIbWJbWKbWLbWMbWNbWObVdbWPbTabWQbPlbWRbWSbWTbVkbWUbWVbWWbWXbWYbWUbWZbXabXbbXcbHuaabaabaabaabaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtbVtbXdbXebXfbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXgbXhbXibXhbXNctabXmcxTbXnbIkbIkbIkbIkbIkbIkcxUbQxcxWcxVcxXcxXbQxbQxbQxcxYbWjcpnbIpbVCbIpbIqbOMbXubXvbXwbXxbXybXybXybXzbXAbXBbXBbXBbXCbXBbXBbXDbXBbXBbXBbXBbXEbXFbXGbXHbXIbXJbXKbXJbXLbXJbXJbNnbXMbMKbMKbMKbTTbVOcekbVdbXObVdbXPbTabXQbPlbXRbXSbXTbUibXUbXVbXWbUibXXbXYbXZbPlbYabCCbYbbYbbYbbYbbYcaaeaaeagmaaebUnbVrbUpaaebUnbVrbUpaaebUnbVrbUpaaeagmagmagmagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbWbbWbbVtbVtbYdbYebVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQybQybVubYfbYgbVubVubYhbYhbYhbYhbYhbYhbYhcxZbIqbIqbIqbIqbIqbIqbYjbYkcyabYlbYkbYkbYmbYnbYobYpbYqbYrbHrbHrbHrbYsbYsbYsbYtbYsbYsbYscembYsbYsbYsbYsbYsbYsbYsbPmbVIbWzbWAbXJbWzbXJbXJbVIbYvbYwbNnbYxbRZbYybYzbYAbTabYBbYCbYDbYEbYFbTabTabPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbPlbYabCCbYGbYHbYIbYJbYcbYcbYcaaeaaeaaebYKaaeaaeaaebYKaaeaaeaaebYKaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbYLbYMbWbbYLbYMbWbbWbbVtbYNbVtbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQybYObYPbYQbYRbYScqmcqNcybcydcycbYZbZabZbbTDbZcbZdbZebTDbTDbTDbTDcxvbZfbTDbTDbTCbZgbIqbGobBmbGpbHrbZhbZibYsbZjbZkbZlbYsbZmbZnbZobZpbZnbYsbZnbZqbZrbYsbPmbVIbWzbZsbXJbWzbXJbZtbVIbZubZvbNnbNnbNnbJTbNnbNnbTabTabTabZwbTabTabTacvUbZybZzbZAbZBbZCbOrbOrbOrbOrbOrbOrbOrbOrbZDbZEbZFbZGbZHbZIbZJbZKbZJbZLbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZMbZNbZObZObZPaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbZQbZRbZSbZTbZUbWbbWbbZVbZWbZXbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebZYbQybZZcaacabcaccadcaebIpbIpbIpcafcagcahcaibIpcajcakcalcyecancaocapcyfcarcarcarcasbIpbIqcatbBmcaubHrbHrbHrbYscavcawcaxbYscaycazcygcaBbZncaCbZnbZrbZrbYsbPmbVIbWzcaDcaEbWzbXJcaFbVIbVIbVIbVIbAecaGbAebAebAecaHbAebAebLIbAebAebAebAebLIbAebAebAecaIcaJcaKcaLcaMcaMcaMcaMcaMcaNcaObYbcaPcaQcaRbYcbYcbYcaaeaaeaaecaSaaeaaeaaecaSaaeaaeaaecaSaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbWbbWbbYLcaTcaUbZRbZSbZTcaVcaTcaTcaTcaTcaWbVsaaeaaeaaeaaebWdaaeaaeaaeaaebWdaaeaaebQycyhcaacaYcaZbVucaecbacbbcbccbdcbecbfcbgbIpcbhbYhcbibYhcbjbYhbYhcbkcblbYhbYhbYhbYhbIqcbmbBmcbnbHrcbocbpbYscbqbZncbrbYscbscbtcbucbvcbwbYsbZncbxbZrbYsbPmbVIbVIbVIbVIbVIbVIbVIbVIcbycbzbOrbOrcbAbOrbOrbOrbOrbOrbOrcbAbOrbOrbOrbOrcbBcbCcbCcbCcbCcbDcbEcbFcbGcbGcbGcbGcbGcbGcbGbYbbYbbYbbYbbYcaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmagmagnaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbZVcbIcbIcbJbZScbKcbIcbIcbIcbIcbIcbLbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQycbMcbNcbNcbObVucaebIpcbQcbRcbdcbecahcbSbIpcbTbYhcbUcbVcbWcbXcbYcbZbIpbYhccaccbcyibIqccdbONbTGcceccfccgbYscbscchcciccjcckcclccmccnccobYsbYsbYsbYsbYsccpccqbOrbOrbOrbOrbOrbOrbOrcbAcbBbAeccrccrccrccrccrccrccrccrccrccrccrbHuccsbHucbCcctccuccvccwccxccycbGcczccAccBccCccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtccFbWbbWbbWbbZSbZSccGccHbZSbZSbZSbZSbZSbZSbZSccIavbavbavbavbavbavbavbavbavbavbavbavbccJccKccLccLccMbVucwAccOccPccPccPccQccRcyjcarccTccUccVccWccXccYcbYccZbTDcdacdbbTDcdccddcdebBmbTGbHrcdfcdgbYscbqcdhcdicdjcdkcdlcdmbZncdnbYscdocdpcdqbYscdrcdsbAebCDcdtcducykbAebAebAebAecdvccrcdwcdwcdwcfacfbcfccdycdycdyccrcdzbAecdAcbCcdBcdCcdDcctcdEcdFcdGcdHcdIcdJcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagnaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbZVcbIcbIcbJbZScbKcbIcbIcbIcbIcbIcbLbVtaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebQycbMcbNcbNcbObVucaebIpcbQcbRcbdcbecahcbSbIpcbTbYhcbUcbVcbWcbXcbYcbZbIpbYhccaccbcyibIqccdbONbTGcceccfccgbYscbscchcciccjcckcclccmccnccobYsbYsbYsbYsbYsccpccqbOrbOrbOrbOrbOrbOrbOrcbAcbBbAeccrccrccrccrccrccrccrccrccrccrccrbHuccsbHucbCcctccuccvccwcxJccycbGcczccAccBccCccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaadaadaadaacaacaacaadaadaadaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtccFbWbbWbbWbbZSbZSccGccHbZSbZSbZSbZSbZSbZSbZSccIavbavbavbavbavbavbavbavbavbavbavbavbccJccKccLccLccMbVucwAccOccPccPccPccQccRcxScarccTccUccVccWccXccYcbYccZbTDcdacdbbTDcdccddcdebBmbTGbHrcdfcdgbYscbqcdhcdicdjcdkcdlcdmbZncdnbYscdocdpcdqbYscdrcdsbAebCDcdtcducykbAebAebAebAecdvccrcdwcdwcdwcfacfbcfccdycdycdyccrcdzbAecdAcbCcdBcdCcdDcctcdEcdFcdGcdHcdIcdJcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagnaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaadaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbWbbWbbWbbYLcdKcdKcdLbZScdMcdKcdKcdKcdKcdKcdKbVtaaeaaeaaeaaeaaeaaeaaeaaecdNcdNcdNcdNbQybVubVubVubVubVubYhbYhcahcahcbfcahbYhcylbIpcbTbYhcdPcdQcdRcdScbYcdTcdUcdVcdWcdXcymbIqcdZbBmbTGbYsbYsbYsbYsbYsbYsbYsbYsbYsceacebceccedbYsceebYscefccrccrcegcehccrccrccrccrccrccrccrccrccrccrceiceYcljcelcfTcelcgxcfSceoccrcdvbNocepcbCcctceqcercescescetceucevceucewcdJccDccEccEcbGaaeaaeaaeaaeaaeagmaaebUncbHbUpaaebUncbHbUpaaebUncbHbUpaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVsbVtbWbbWbbZVbZWbZXbZRbZSbZTcexbZWbZWbZWbZWceybVsaaeaaeaaeaaebWdaaeaaeaaecdNcezcezceAcezcezceBceCceCceCceBbSHbIpceDceEceFcyncyobIpcbTbYhcbicwBcbibYhbYhceJceKbYhbYhceLbYhbIqceMbBmbUDbYsceNceOcePceQbYsbZnbZnceRceSbZobZnceTceUbZnbZnbZnccrceVceWcelcdxceXcfUceZceZceZcelcelcdxcelcelcfdcelcelchccelcelcfebIrccrcfgcfgcfgcbGcbGcbCcbCcbCcbCcbCcbGcbGcbGcbGcbGcbGcbGcbGcbGaaeaaeaaeaaeaaeagmaaebUncfhbUpaaebUncfhbUpaaebUncfhbUpaaeagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbZQbZRbZSbZTbZUbWbbWbbYLcaTcaUbVtaabaaeaaeaaeaaeaaeaaeaaecdNcficfjcfjcfkcflcfmcflcflcflcfncfocfocfpcfqcfrcfqcypcfqcftcfucfvcyqcyrcfycfzcfAbVCbYhcfBcfCcfDbIqbGobBmcfEbYscfFcawcckcfGcfHcfIcckcckcfJcfKcfLcfMcfNcfOcfOcfOccrcfPcfQcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfRcfVcfRcfRcencfRcfWcenchgchdcelcfXcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbZVcgabWbbZVcgabWbbWbbVtbVtbVtbVtaabaabaabaaeaaeaaeaaeaaecdNcgbcgbcgbcgccgdcgdcgecgfcficeBbIpbIpcggcdUcghcgicyscarcarcgjcgkcytcarcarbUBcarcasbYhcfCcfCcfDbIqbGobBmbGpcecbZnbZncgncdicgocdiczjcdicgpcgqbZncgrcgscfOcgtcguccrcgvcgwcelcelcelcelcelcelcelcelcnXciDciNciMciEciMciMciMciMciFciMciMciGcelcgBcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnaaeagmagmagmagmagmagmagmagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbZVcgabWbbZVcgabWbbWbbVtbVtbVtbVtaabaabaabaaeaaeaaeaaeaaecdNcgbcgbcgbcgccgdcgdcgecgfcficeBbIpbIpcggcdUcghcgicghcarcarcgjcgkcytcarcarbUBcarcasbYhcfCcfCcfDbIqbGobBmbGpcecbZnbZncgncdicgocdiczjcdicgpcgqbZncgrcgscfOcgtcguccrcgvcgwcelcelcelcelcelcelcelcelcnXciDciNciMciEciMciMciMciMciFciMciMciGcelcgBcfYchTaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnaaeagmagmagmagmagmagmagmagmaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbWbbWbbVtbVtaabaabaabaabaabaabaabaabaabbrvbrvcdNcdNcdNcdNcyIcdNcdNcdNcdNcdNcdNcgEcbiczccbjcgEbIqbIqbIqbIqbIqbIqcggbIpbIpbVCcgIcgJbYhcfBcgKcfDbIqcgLbBmcgMcgNcgOcgPcgQcgPcgRcgPcgPcgPcgScgPcgPcgTcfOcfOcgUcgVccrcgWcgXcgYcgZcgZcgZcgZcffcgZcgZcejchaciHciLcejcgZcgZcgZcgZchbcgZciOcjCcelcgBcfZccraaeaaeaaeaaeaaeaaeavbaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbbWbbWbbWbbWbbVtbVtaabaabaabaabaabaabaabaabaabaabbrvchkchlchlchlbrvchmchnchochpchpchqchrcyuchschuckHcyvchxchychzchzchzchncywchBchBchCchBchBchDchDchDchDchDbGochEchFchGbZncfOchHcfOchIcfOcfOcfOchJchKcfOcfOcfOcfOchLchMccrcelcgwcgzchNchOchOchOchOchOchOchOcgzcjCchOchOchOchOchOchOchQchOciRcjCcelcgBcfYccraaeccrccrccrccrccraaecgCaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbVtbVtbWbchWbWbbVtbVtaabaabaabaabaabaabaabaabaabaabaabbrvchXchYchYchYbrvbsechnchZciachzcibciccidciecifcigcihciicijchzchzcikchncyxchBcilcimcinchBciocipciqciqchDbCxcirciscitcgOcgOciucgOcitcivbZnbZnciwcfNbZncixcfNcfOcgtcguccrcelcgwcgzciychOcizciAciBciCciCchOcgzcjCchOcjAcjDcjBciIciJciKchOckccjIcgZckgchechfcyychfclpcllclqccraaeagnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6954,11 +6954,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabbrvbrvbrvbrvbLxckDbLxbsebsebrvckichlchlchlbrvbsechnchochpchpckjckkciYchtciZchvcjacklckmchzchzchzchncyxchBcknckocjgckpchBckqckrckschDcktckuckvbYsbYsbYsbYsbYsbYsbYsbYsbYsbYtbYsbYsccrccrccrccrccrccrcelcgwcgzcgwcelcjvckwckwckwcjycmVcnucmWchTclmclncelcelcelclochOcnWcjCcelcgBcfYccraaeccrccrccrccrccrchScjEaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabbrvckCclzbrvbsebsebsebsebsebrvbrvbrvbrvbrvbrvbsechnchZciachzckFcicckGchtcjJchvckIciickJchzchzcikchncyAcyBckLcyCckNckOchBckrckrckPchDckQckRckSckTckUckUckUckVckWckXckYckZclaclbclccldcleclfclgclhclicnYchbcljcgwchOclkclkcoqclkclkchOchPcelchTcmbcmccelcelcmdcmechOcnWcjCcelcgBcfZccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbLxcvVclxbsebsebLxckDclyclAcxaclBbrvbsebsebsechnchzchzchzclCclDciYcyDcnfchvcjacjbclFchpchpcjdchnbGichBclGclGclGclHchBckrclIclJclKclLclMclNclOclOclOclOclOclOclOclOclPclQclRclSclTclUclVclWclXclYclVclZcmacgwchOchOchOchOchOchOchOcnZclVcmKcmLcmMcmNcmOcmOcmPchOcowcjCcelcgBcrhccraaeccrccrccrccrccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebLxckhbsebsecvWbsebrvbsechnchnchnchnchnchnchnchnciYcyDcnFcnEcoxcjHcjHcjHcjHcjHchnbGichBcmncmncmncmnchBckrckrckrchDcmrcmscmtcmucmvcmvcmvcmvcmvcmvcmvcmucmwcmxcmyccrcmzcmAcmBcmCchOcjzcfQcfRcgychOcmEcmFcmFcmGcmHchOcmIcjzchOchTchTckdchTchTchOchOcpjcoyciMcplcpmciQcyEciQchhchichjccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebLxckhbsebsecvWbsebrvbsechnchnchnchnchnchnchnchnciYcyDcnFcnEcyjcjHcjHcjHcjHcjHchnbGichBcmncmncmncmnchBckrckrckrchDcmrcmscmtcmucmvcmvcmvcmvcmvcmvcmvcmucmwcmxcmyccrcmzcmAcmBcmCchOcjzcfQcfRcgychOcmEcmFcmFcmGcmHchOcmIcjzchOchTchTckdchTchTchOchOcpjcoyciMcplcpmciQcyEciQchhchichjccraaeagmaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbLxcmXcmYbsebsebLxckhbsecmZcnacxbbrvbsechnchzchzcnbchzchncnccndcnecmmcnGclEcjacnhcnichzchzchzchnbGichBcnjcmncnkcmnchBcmocmpcmqchDcnlcnmcnncmvaabaaeaaeaaeaaeaaeaabcmvcmwcnocnpcnpcnqcnrcnscntchOcnvclZcnwcnwcnxcnwcnwcnwcnwcnwcnxcnwcnycelcelcelcelcelcelcelcpocpscppcqccqacfYchTaaechTchUchjchjccraaecjEaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcnzcnAbrvbsebsebsebsebsebLxbLxbLxbrvbsechnchzchzchzchzchncnBcnCcnDcnHcolcnHckIciicnIchzchzcikchnbGichBchBchBchBchBchBchDchDchDcqocyFckRcmtcmvaabaabaaeaaeaaeaaeaaecmvcnOcnPcnQcnRcnScnTcnUcnVchOcelcfQcqxcelcmhcmDcmDcmDcricmDcmDcmDcmDcmDcmDcmDcmDcmDcmDcmDcuUcnXcvEcwacvTcmTcmUcyGcmUcwdchjchjccraaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbsebsebsebsebsecvXcobbsebQvbsechncodchzcoecofcogcohcoicokcojchtcojcjacjbcoochpchpcjdchnbGibsebsecyHbsebsebsecnJbsecyJczdcnMcyKcmtcotcmvcmvcmvcmvcmvcmvcmvcmucnOcnPcoucovcelcelcelcpKcwccfRcgXcelcelcwecwfciMciMcwgciNciMciMciNciMciMciMciNciMciMciMciNcmWcelcwhcgBcfYccraaeccrccrccrccrccraaecgCaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcozcvZcoBbsebsebsebseckhcoCcoDcoEbrvbsechncoFcoGcoHchzchzcoIcoJcomciecoMchtconcjHcjHcjHcjHcjHchnbFnbIkbIkbIlbIkbIkbIkcyMcyLcyNcmucyOcoQcoRcoScoTcoUcoVcoWcoXcoYcoZcpacpbcpccpdcpecpfcpgcpfcphchOcpicwicprcwkcwjcwmcwlcwkcwjcwncpkcwkcwocwmcwpcwkcwocwmcpqcwkcwocwqcwqcwscwrcfYccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvcozcvZcoBbsebsebsebseckhcoCcoDcoEbrvbsechncoFcoGcoHchzchzcoIcoJcomciecoMchtconcjHcjHcjHcjHcjHchnbFnbIkbIkbIlbIkbIkbIkcyMcyLcyNcmucyOcoQcoRcoScoTcoUcoVcoWcoXcoYcoZcpacpbcpccpdcpecpfcpgcpfcphchOcpicwicpkcwkcwjcwmcpqcwkcwjcwncprcwkcwocwmcwlcwkcwocwmcwpcwkcwocwqcwqcwscwrcfYccraaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabbrvbrvbrvbrvbrvbrvbrvcpucpubrvbrvbrvbrvbsechnchzcpvchzchzcpwcpxcpycoKchtcnDchtcyPcoLcoNcoNcoNcoNchnbsecmucmucmucmucmucmucmucmucmucoOcrgckRcpPcpPcnPcpPcpPcpPcpQcnPcpRcpRcpScpTccrchTchTccrccrccrccrcfYcfYcpUcpZcwtcfYcwucwwcwvcwxcpUcpVcpWcfYcpUcpXcpWcfYcpUcpYcpWcfYcfYcfYcfYcfYccraaeagmagncgCagmagmcjEagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeaaecqdcqecqecqecqebsechnchzchzchzchzchncqfcqgcpzchtcnDchtcyRcyQcoNcoNcoNcpCchnbsecmucpFcpGcpHcpIcyScqycpLcpMcyTcpOcyUcqqcqrcqrcqrcqrcqrcqscqrcqrcqrcqtcqucmuaeHaeHaeHaeHaeHccrcqvcqzcqwcfYcwCcqvcqwcfYcwDczfcqwcfYcwEcqvcqwcfYcwFcqvcqwcfYcwGczgcfYcqvcfYcfYccraaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaabaabaabaabaabaabaaeaaeaaecqdcqdcqdcqCcqDcqEcqFbsechnchzchzcqGchzchncqHcqIcqhcpDcqichtcyVcqJcoNcoNcoNcoNchnbEicqlcyWcyYcyXcyZcyZcyYcyYczaczaczaczbcqOcpPcnPcpPcpPcpPcqMcnPcpRcpRcnPczhcmuaeHaeHaeHaeHaeHccrccrccrcqPchTcqQccrcwHcwJcwIccrcqPchTcqQccrcqPchTcqQccrcqPchTcqQccrccrccrccrcptccrccraeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6967,17 +6967,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeagmagmagmagnagmaaecqRaaeaaeaaeaaeaaecqdcqecqecqecqecrrbsebsebrvbrvbrvbrvbrvcxkcxlbsecxncxmcqZbsecxlbKicqjbrvbrvbrvbrvcrscrtcruaeHaeHaeHcrscrtcruaeGaeGaeGcrscrtcruaeHaeHaeHcrscrtcruaaaaaaaeHaeGaHHaeGaeGaeGaeGaeGcwPcrEcrFcrGcwPcwScwUcwTcwPcrvcrwcrxcwPcrycrzcrAcwPcrBcrCcrDcwPaeHaeHccrccrccrccraeHaeHaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeagnaaebrvbrvbrvbrvbrvaaaaaaaaabrvbrvbrvcpucpucpucpucpubrvbrvbrvbrvaaaaaacxocrHcrmcrIaeHaeHaeHcrHcrmcrIaeGaeGaeGcrHcrmcrIaeHaeHaeHcrHcrmcrIaaaaaaaeHaeHaeGaHHaHHaeGbnQaeGcwPcrPcrWcrQcwPclvcmjcwVcwPcrJcrTcrKcwPcrLcrUcrMcwPcrNcrVcrOcwPaeHaeHaeGaeHaeHaeHaeHaeHcxfcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsQcsPcsPczecsSczecsTaeHaeHcsUcsVcsUaeHaeHaeHcsUcsWcsUaeHaeHcsQcsXcsYcsXcsTaaaaeHaeHaeGaeHaeGaeHaHHaeGcwPcrPcrPcrPcwPclvclvclvcwPcrJcrJcrJcwPcrLcrLcrLcwPcrNcrNcrNcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeagnaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctcctbctectdctfcsTaeHcsUctgcsUaeHaeHaeHcsUctgcsUaeHaeHcticthctkctjctiaaaaeHaeHaHHaeHaeHaeHboHaeGcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeagnaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctcctbctectdctfcsTaeHcsUctgcsUaeHaeHaeHcsUctgcsUaeHaeHcticthctkctjctiaaaaeHaeHaHHaeHaeHaeHboHaeGcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPcwPaeHaeHaeGaeHaeHaeHaeHaeHaeGcxgaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeagmaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsQcsXctlctmctectectectfctncsXctoctgctpctqctqctqctoctgctpcsXcsXctcctrctkctjctfcsTaeHaeHaeHaeHaeHaeHcxhaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGaeGcxhaeGaeGaeGaeGaeGaeGcxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctictsctectectectucttctwctvctgctxctxctxctxctxctgctyctActzczecthctkctjctfctncsTaeHaeHaeHaeHaeHcxhbnQaeGaHHcxhaeGbnQcxhcxhbnQaeGbnQaeGcxicxhcxhbnQcxhbnQbnQaHHbnQcxhaeGbnQaeGbnQcxgcxicxgcxecxecxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctictsctectectectucttctwctvctgctxctxctxctxctxctgctyctActzczecthctkctjctfctncsTaeHaeHaeHaeHaeHcxhbnQaeGaHHcxhaeGbnQcxhcxhbnQaeGbnQaeGcxicxhcxhbnQcxhbnQbnQaHHbnQcxhaeGbnQaeGbnQcxgcxicxgcxecxecxeaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXctncsXcsXcsXcsXctBctgctgctgctgctgctgctgctgctgctgctgctgctgctCctkctkctkczectDctiaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaeHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectFctEctHctGctJctIctKctgctMctLctLctLctLctgctLctLctLctLctNctgczectOctkctkctCctkczeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectEctEctQctPctSctRctTctgctMctUctUctUctUctgctUctUctUctUctNctgctVcsXcsRcsXcsXczectcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaacaacaacaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagnaaecsccsccsccsccscaaecqRaaecsccsccsccsccscaaeagmaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectEctEctQctPctSctRctTctgctMctUctUctUctUctgctUctUctUctUctNctgctVcsXczecsXcsXczectcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaacaacaacaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecqRaaeaaeaaeaaeaaeaaeaaeagnaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczectWctEctYctXcuactZcubctgctMctxctxctxctxctgctxctxctxctxctNctgczecucctgctgcudctgczeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXcsPcsXcsXcsXcsXctmctgctgctgctgctgctgctgctgctgctgctgctgctgcuectgctgctgcsRcufctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaajaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZcticugctgctgctgcuhctgcuictyctEcujctLctLctLcukctEculctwctzczectgctgcumctfcsPcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaacaacaacaacaacaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecrRcrRcrRcrRcrRaaecqRaaecrRcrRcrRcrRcrRaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactfcsXcsPcsXcsXcsXcsXctmctgctgctgctgctgctgctgctgctgctgctgctgctgcuectgctgctgctqcufctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaajaacaacaacaacaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecrXcrYcrYcrYcrYcrZcqRcqScsacsacsacsacsbaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZcticugctgctgctgcuhctgcuictyctEcujctLctLctLcukctEculctwctzczectgctgcumctfcsPcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaecsccsccsccsccscaaecsfaaecsccsccsccsccscaaeagmaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuocsXctlcsPcuhcsPcuhctlcsPcsXcsXcsXcsXctqctqctqcsXcsXcsXcsXcsXctccupctgcuqctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecsgaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactacsZctccurcticurctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacticuscuucutctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaecsgaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyscsZctccurcticurctfcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacticuscuucutctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmagmagnagmagmaaeagmaaecsgaaeaaeagmagnagmagmagmagmaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuoctnctnczecuvczecunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacuocsXczecsXcunaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaecshaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeagmaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 8f8a80e0b8c..37960c92387 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -276,7 +276,7 @@ "afp" = (/obj/structure/cable/cyan{icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai{name = "\improper AI Core"}) "afq" = (/obj/structure/cable/cyan{icon_state = "4-8"},/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 4},/area/engine/engineering) "afr" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/engine/n20,/area/engine/engineering) -"afs" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/engine/engineering) +"afs" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/engine/engineering) "aft" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/n20,/area/engine/engineering) "afu" = (/obj/structure/lattice/catwalk,/obj/machinery/atmospherics/pipe/simple/general/visible{icon_state = "intact"; dir = 10},/turf/space,/area/space) "afv" = (/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/obj/item/clothing/head/cone,/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -2338,7 +2338,7 @@ "aSY" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/magnetic_controller{autolink = 1},/turf/simulated/floor/plating,/area/toxins/misc_lab) "aSZ" = (/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 9},/area/toxins/misc_lab) "aTa" = (/turf/simulated/floor/plasteel/warning{icon_state = "warning"; dir = 5},/area/toxins/misc_lab) -"aTb" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology) +"aTb" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology) "aTc" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel/vault{icon_state = "vault"; dir = 8},/area/toxins/xenobiology) "aTd" = (/obj/machinery/computer/operating,/turf/simulated/floor/plasteel/white,/area/toxins/xenobiology) "aTe" = (/obj/structure/flora/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/simulated/floor/plasteel/whitebot,/area/maintenance/fore{name = "Security Maintenance"}) diff --git a/_maps/map_files/DiscStation/DiscStation.dmm b/_maps/map_files/DiscStation/DiscStation.dmm index d7bdd21fff1..ee4fba18088 100644 --- a/_maps/map_files/DiscStation/DiscStation.dmm +++ b/_maps/map_files/DiscStation/DiscStation.dmm @@ -803,7 +803,7 @@ "apw" = (/turf/simulated/floor/plasteel{dir = 10; icon_state = "darkblue"},/area/hallway/primary/starboard) "apx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/black,/area/hallway/primary/starboard) "apy" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) -"apz" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"apz" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "apA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "apB" = (/obj/machinery/computer/area_atmos,/obj/machinery/firealarm{dir = 4; pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) "apC" = (/turf/simulated/floor/plasteel{tag = "icon-whitepurple (SOUTHWEST)"; icon_state = "whitepurple"; dir = 10},/area/toxins/lab) @@ -5048,7 +5048,7 @@ "bTd" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel/darkwarning,/area/atmos) "bTe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/darkwarning,/area/atmos) "bTf" = (/obj/machinery/suit_storage_unit/atmos,/turf/simulated/floor/plasteel/darkwarning,/area/atmos) -"bTg" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/darkwarning,/area/atmos) +"bTg" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/darkwarning,/area/atmos) "bTh" = (/obj/structure/window/reinforced/fulltile,/obj/structure/grille,/turf/simulated/floor/plasteel,/area/atmos) "bTi" = (/obj/machinery/alarm{frequency = 1439; locked = 0; pixel_y = 23},/turf/simulated/floor/plasteel,/area/atmos) "bTj" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) @@ -5536,7 +5536,7 @@ "ccx" = (/obj/machinery/atmospherics/pipe/simple/supply/visible{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "ccy" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 4},/area/atmos) "ccz" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) -"ccA" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/atmos) +"ccA" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/atmos) "ccB" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) "ccC" = (/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access_txt = "35"},/turf/simulated/floor/plating,/area/hydroponics) "ccD" = (/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{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen) @@ -5599,7 +5599,7 @@ "cdI" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/atmos) "cdJ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/atmos) "cdK" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{dir = 2; icon_state = "bot"},/area/atmos) -"cdL" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cdL" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cdM" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) "cdN" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) "cdO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/grille,/turf/simulated/floor/plating,/area/atmos) @@ -5863,7 +5863,7 @@ "ciM" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "ciN" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/atmos) "ciO" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) -"ciP" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"ciP" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "ciQ" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/atmos) "ciR" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "ciS" = (/obj/structure/closet/firecloset,/turf/simulated/floor/plasteel/neutral,/area/atmos) @@ -5943,7 +5943,7 @@ "cko" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 4; frequency = 1441; id = "n2_in"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "ckp" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/wall/r_wall,/area/atmos) "ckq" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (SOUTHWEST)"; icon_state = "red"; dir = 10},/area/atmos) -"ckr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = 2; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"ckr" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cks" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) "ckt" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "cku" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) @@ -6129,7 +6129,7 @@ "cnS" = (/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/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plasteel{icon_state = "blue"; dir = 8},/area/atmos) "cnT" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "cnU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cnV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cnV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cnW" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cnX" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cnY" = (/turf/simulated/wall/r_wall,/area/hallway/primary/aft) @@ -7169,6 +7169,7 @@ "cHS" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cHT" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cHU" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cHV" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7347,7 +7348,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcdjcdjcdjcjCcdjcdjcbRceqcfRcjDchcckWckWckXchcaaaadpckYckZcdqcdqclaclbclcclcclccldcleclfclcclcclgclhclicljclkckbcllclmclncloclpclqclrclscltcluckmaaaclvciHclwceRabmbUObUObUObUObUOabmbUNclxbXzcktclyclzbTlchIbTlcaWcaXcaYclAbWibWjbWkclBclCclCbUOabmbSZbQNbQObMAbNYckxbSaclDclDclDclDclDclDclDabmabmabmabmcdQcdQcdQcdQcdQcdWckDckEcdWclEclEclEclEclEclFclGclHclEclEclEclIcdWclJckHckIcjcckHcjcckIcjccjccjcckHclKclLclMclNckPckPckQckRcgUcgVcfJcfJcfJcfJcfJcgVclOckTbWLcjxckUcjzclPckVckVckVclQaaaaaaabmabmabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcbQcepcbQcbQcbQcbQcbQclRclScbQcipclTckWclUchcchgchgcdqclVclWclXclYclZcmacmbcmccmccmdcmecmccmccmfcdscmgcmhcmicmjcmkcmlcmmcmnckmcmocmpcmqcmrcmsckmaaaclvcmtchBceRabmbUOcmucmucmvchEbWjbWicmwcmxcmycmzbTlbTlcmAcmBcmCbXCbXzcmDbUNabmbXEcmEcmFcmGbUOabmbSZbQNbQObMAbRZckxcmHcmIcmJcmKcmLcmMcmNcmIcmOcmOcmOaaacdQcmPcmQcmRcmScmTcmUcmVcmWclEcmXcmYcmZclEcnacnbcnccndcneclEcnfcdWcngcnhcnicdWcnjcdQcnkcnlcnlcnlcnmbWLcnncnocnpcnqcnqcnrckRbYkcjucfJcfJcfJcfJcfJcjubYkbYkbWLcjxckUcjzciickVckVckVclQaaaabmabmabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccnsckWckWcntcitciucitcnucnvcnwcnxcnycnzcnAcnzcnBcnCcnAcnDcnEcnFcdscdsckbckbckbcnGcnHcnIcnJckmcnKcnLcnMcnNcnOckmaaaclvcnPchBceRabmbUOcmucnQcnRbXEabmbUNcnSbXzckscnTcnUcnUcnUcnUcmzccxcnVcnWbYXbYYbWkcnXclCclCbUOabmcnYcnZcoacnYbNYcobcoccodcoecofcogcohcohcoicojcokcmOaaacdQcolcomconcoocopcoqckEckyclEcorcorcorclEcoscotcouclEclEcdQchYcovcowcoxchYcoyciacdQcozcoAcoAcoAcoBbWLcoCcoDcoEbYkbYkbYkckRcgUcgVcfJcfJcfJcfJcfJbWLbWLbWLbWLcoFcoGcjzciicoHcoIciiciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccoJcoJcoJchcchgchgcdqcoKcoLcoMcoNcoOcoPcoQcoNcoOcoRcoQcoNcoOcoScdscdsckbckbckbcoTcoUckbckmckmcoVcoWcoXcnNcoYckmaaaclvcnPcoZceRabmbUOcmucpacpbckpbYYbYXcpcckrcktcpdcpdcpecpfcpfcpgbXCbXzcphbUNabmbUObUObUObUObUOabmcnYcpicpjcpkcplcpmcpncmIcpocppcpqcohcprcmIcpscptcmOaaacdQcdQcdQcdQcdQcdWckDckEcdWclEcpucpvcpwclEcoscorcorcpxcpycdQcpzcomcpAcdQcpzcomcpAcdQcpBcoAcoAcoAcpCbWLcpDcpEcpFcpGcpHcpIcpJcgUcgVcfJcfJcfJcfJcfJbWLcoFcpKcpLcpMcpNcpOciiclQclQciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbRceqcfRcjDchccoJcoJcoJchcchgchgcdqcoKcoLcoMcoNcoOcoPcoQcoNcoOcoRcoQcoNcoOcoScdscdsckbckbckbcoTcoUckbckmckmcoVcoWcoXcnNcoYckmaaaclvcnPcoZceRabmbUOcmucpacpbckpbYYbYXcpccHVcktcpdcpdcpecpfcpfcpgbXCbXzcphbUNabmbUObUObUObUObUOabmcnYcpicpjcpkcplcpmcpncmIcpocppcpqcohcprcmIcpscptcmOaaacdQcdQcdQcdQcdQcdWckDckEcdWclEcpucpvcpwclEcoscorcorcpxcpycdQcpzcomcpAcdQcpzcomcpAcdQcpBcoAcoAcoAcpCbWLcpDcpEcpFcpGcpHcpIcpJcgUcgVcfJcfJcfJcfJcfJbWLcoFcpKcpLcpMcpNcpOciiclQclQciiabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbQcpPciocbQcpQcpRcpRcpRcpSaaaadpckYcpTcpUcpVcpTcpWcpXcpYcoNcpZcqacqbcoNcqccqdcqecdsckbcqfcqgcqhcqicqjcqkckmckmckmckmckmckmckmaaaclvcnPcqlceRabmbUObUObUObUObUOabmbUNbXucqmcqncqocqocqocqocqocqpcqqcqrcqsbMAabmabmabmabmabmabmabmcnYcqtcqucqvcqvcqwcqxcqycqzcqAcqBcohcqCcmIcojcqDcmOaaacdQcmPcmQcmRcmScqEcmUcmVcqFclEcorcorcorclEcoscorcorclEclEcdQcolcomcqGcdQcolcomcqGcdQcqHcoAcqIcqJcqKbWLbWLbWLbWLbWLbWLcqLbWLbWLbWLcfJcfJcfJcfJcfJbWLckUcqMcqNcqOcpOaaaaaaaaaaaaaaaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbRcdjcbRaaaaaaaaacbQceqcfRcbQcdpcdpcdpcdpcdpcpTcpTcpTcpTcqPcqQcpTcqRcpXcqScoNcqTcqacqScoNcqUcqVcqScdsckbcqWcqXclncqiclncqYcqZckbaaaaaaabmabmaaaaaaclvcnPcraceRabmabmabmabmabmabmabmbUNcrbcrccrdcrecrfcrgcrhcricnTcrjcrkcrlcrmcrnabmabmabmabmabmabmcnYcrocrpcrpcrqcrrcrscrtcrucrvcrwcrxcrycmIcmOcmOcmOaaacdQcolcomconcrzcopcrAcrBcdWclEcmXcrCcorcrDcrEcrFcorcrGcrHcdQcdQcdQcdQcdQcdQcdQcdQcdQciicrIciiciiciiciicrJcrKcrLcrMcrNcrOcrPcrQbWLbWLbWLbWLbWLbWLbWLckUcrRciiciiabmabmabmabmabmabmabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbQcbQcepcbQcbQaaaaaacbQcrScfRcbQcrTcrUcrVcbQaaacrWcrXcrYcrZcsacsbcpTcdscsccoNcoNcoNcsdcoNcoNcoNcsecdscdsckbcsfcsgclncshclnclncsickbaaaclvcsjcsjclvclvclvcnPchBceRceRceRceRceRceRceRceRbMAbMAcskcslbMAbMAbMAcsmcsnbRXcsobMAbMAbMAcspcspcspcspcspcspcspcspcsqcsrcspcsscstcsucsvcsvcsvcsvcsvcsvcsvabmabmabmabmcdQcdQcdQcdQcdQcswcsxcsycszcsAcsAcsAcsAcsAcsAcsAcsAcsAcsAcsAcsBcsCcsCcsCcsCcsDcsEcsCcsFcsGcsHcsCcsIcsJcsJcsJcsJcsKcsJcsLcsMcsNcsNcsNcsNcsNcsNcsNcsOcsPcjzciiaaaabmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/DiscStation/z4.dmm b/_maps/map_files/DiscStation/z4.dmm index a6f4e5bfb0b..54f64a1625c 100644 --- a/_maps/map_files/DiscStation/z4.dmm +++ b/_maps/map_files/DiscStation/z4.dmm @@ -847,7 +847,7 @@ "qC" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) "qD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) "qE" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) -"qF" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) +"qF" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/airless{icon_state = "bot"},/area/derelict/storage/engine_storage) "qG" = (/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24"},/turf/simulated/floor/plating/airless,/area/derelict/storage/engine_storage) "qH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating/airless,/area/derelict/storage/equipment) "qI" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/button/door{id = "medpriv1"; name = "Privacy Shutters"; pixel_y = -25},/turf/simulated/floor/plasteel{icon_state = "white"},/area/derelict/medical) diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index b937096fed9..f6677256702 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -934,8 +934,8 @@ "arX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall,/area/maintenance/atmos_control) "arY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/meter,/turf/simulated/wall,/area/maintenance/atmos_control) "arZ" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) -"asa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/wall,/area/maintenance/atmos_control) -"asb" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/device/assembly/mousetrap/armed,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"asa" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"asb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "asc" = (/obj/machinery/light/small{dir = 8},/obj/machinery/power/apc{auto_name = 1; dir = 8; name = "Autoname APC West"; pixel_x = -25; pixel_y = 0},/obj/structure/cable/green,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "asd" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "atmospherics mix pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ase" = (/obj/machinery/atmospherics/components/binary/valve{dir = 1; name = "Incinerator to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) @@ -1004,7 +1004,7 @@ "atp" = (/obj/item/weapon/wirecutters,/turf/space,/area/space/nearstation) "atq" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "atr" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/space/nearstation) -"ats" = (/obj/structure/lattice,/obj/item/stack/tile/plasteel,/turf/space,/area/space/nearstation) +"ats" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/device/assembly/mousetrap/armed,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "att" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/engineering) "atu" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "atv" = (/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"; tag = ""},/area/engine/engineering) @@ -1253,7 +1253,7 @@ "aye" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ayf" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ayg" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"ayh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) +"ayh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ayi" = (/turf/simulated/wall,/area/atmos) "ayj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/machinery/light_switch{pixel_x = -24; tag = "w"},/turf/simulated/floor/plasteel,/area/atmos) "ayk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/turf/simulated/floor/plasteel,/area/atmos) @@ -1487,9 +1487,9 @@ "aCE" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel/warning{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/atmos) "aCF" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{dir = 8; icon_state = "escape"},/area/atmos) "aCG" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) -"aCH" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) +"aCH" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) "aCI" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) -"aCJ" = (/obj/item/trash/popcorn,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aCJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aCK" = (/turf/simulated/wall/rust,/area/maintenance/atmos_control) "aCL" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aCM" = (/obj/item/stack/sheet/metal{amount = 2},/obj/structure/girder/displaced,/turf/simulated/floor/plating,/area/maintenance/atmos_control) @@ -1559,9 +1559,9 @@ "aDY" = (/obj/effect/spawner/structure/window,/turf/simulated/floor/plating,/area/atmos) "aDZ" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port Mix to Filling Ports"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "aEa" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port Mix to Temperature Ports"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"aEb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "escape"},/area/atmos) +"aEb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "escape"},/area/atmos) "aEc" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) -"aEd" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aEd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aEe" = (/turf/simulated/wall/mineral/wood,/area/maintenance/atmos_control) "aEf" = (/obj/structure/girder/displaced,/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aEg" = (/obj/structure/reagent_dispensers/watertank,/obj/structure/cable/green{tag = "icon-2-5"; icon_state = "2-5"},/turf/simulated/floor/plating,/area/maintenance/fore) @@ -1627,7 +1627,7 @@ "aFo" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "aFp" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "aFq" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel/warning{dir = 8},/area/atmos) -"aFr" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aFr" = (/obj/item/trash/popcorn,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aFs" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"; tag = "icon-wood-broken"},/area/maintenance/atmos_control) "aFt" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/maintenance/atmos_control) "aFu" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/wood,/area/maintenance/atmos_control) @@ -1686,7 +1686,7 @@ "aGv" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "tox_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "aGw" = (/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "aGx" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) -"aGy" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aGy" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aGz" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/wood,/area/maintenance/atmos_control) "aGA" = (/obj/structure/table/wood/poker,/turf/simulated/floor/carpet,/area/maintenance/atmos_control) "aGB" = (/obj/structure/table/wood/poker,/obj/item/toy/cards/deck{pixel_x = 2},/turf/simulated/floor/carpet,/area/maintenance/atmos_control) @@ -1850,7 +1850,7 @@ "aJD" = (/obj/structure/sign/nosmoking_2,/turf/simulated/wall,/area/atmos) "aJE" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "aJF" = (/obj/machinery/atmospherics/components/unary/cold_sink/freezer{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) -"aJG" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "purple"},/area/atmos) +"aJG" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel{dir = 10; icon_state = "purple"},/area/atmos) "aJH" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "aJI" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken6"; tag = "icon-wood-broken6"},/area/maintenance/atmos_control) "aJJ" = (/obj/structure/bed/chair/comfy/lime{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/simulated/floor/wood,/area/maintenance/atmos_control) @@ -2140,11 +2140,11 @@ "aPh" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 Outlet Pump"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "aPi" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 10; initialize_directions = 10},/turf/simulated/floor/plasteel,/area/atmos) "aPj" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel/warning{tag = "icon-warning (EAST)"; icon_state = "warning"; dir = 4},/area/atmos) -"aPk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel{tag = "icon-caution (SOUTHWEST)"; icon_state = "caution"; dir = 10},/area/atmos) +"aPk" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel{tag = "icon-caution (SOUTHWEST)"; icon_state = "caution"; dir = 10},/area/atmos) "aPl" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/atmos) "aPm" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) -"aPn" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/atmos_control) -"aPo" = (/obj/structure/cable/green{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aPn" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aPo" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aPp" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aPq" = (/obj/structure/cable/green{tag = "icon-2-8"; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aPr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/atmos_control) @@ -2226,11 +2226,11 @@ "aQP" = (/turf/simulated/wall/r_wall,/area/engine/chiefs_office) "aQQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0; tag = "w"},/turf/simulated/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (NORTH)"; icon_state = "neutralcorner"; dir = 1},/area/hallway/secondary/entry) "aQR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/obj/machinery/light,/turf/simulated/floor/plasteel,/area/atmos) -"aQS" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; on = 1},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/atmos) +"aQS" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHWEST)"; icon_state = "red"; dir = 9},/area/atmos) "aQT" = (/obj/machinery/atmospherics/pipe/simple/green/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10; initialize_directions = 12},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTH)"; icon_state = "red"; dir = 1},/area/atmos) "aQU" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel/red/side{tag = "icon-red (NORTHEAST)"; icon_state = "red"; dir = 5},/area/atmos) "aQV" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 6},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) -"aQW" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/atmos) +"aQW" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel{dir = 9; icon_state = "blue"},/area/atmos) "aQX" = (/obj/machinery/atmospherics/pipe/simple/green/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10; initialize_directions = 12},/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")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "blue"},/area/atmos) "aQY" = (/obj/machinery/atmospherics/pipe/manifold/cyan/visible{dir = 8; initialize_directions = 11},/turf/simulated/floor/plasteel{dir = 5; icon_state = "blue"},/area/atmos) "aQZ" = (/obj/machinery/atmospherics/components/trinary/mixer{node1_concentration = 0.8; node2_concentration = 0.2},/turf/simulated/floor/plasteel/barber,/area/atmos) @@ -2453,7 +2453,7 @@ "aVi" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/meter{frequency = 1443; id = "mair_in_meter"; name = "Mixed Air Tank In"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "aVj" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos) "aVk" = (/obj/structure/rack,/obj/item/weapon/stock_parts/capacitor,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/atmos_control) -"aVl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aVl" = (/obj/structure/girder,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aVm" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/atmos_control) "aVn" = (/obj/effect/spawner/structure/window/reinforced,/obj/structure/cable/green{tag = "icon-0-4"; icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech) "aVo" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (SOUTHWEST)"; icon_state = "darkblue"; dir = 10},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/obj/structure/cable/green{tag = "icon-6-9"; icon_state = "6-9"},/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/green{tag = "icon-1-6"; icon_state = "1-6"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (SOUTHWEST)"; icon_state = "warningline"; dir = 10},/area/storage/tech) @@ -2563,7 +2563,7 @@ "aXo" = (/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 0; frequency = 1443; icon_state = "in"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "aXp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "aXq" = (/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg2"},/area/maintenance/atmos_control) -"aXr" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/atmos_control) +"aXr" = (/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/yellow{tag = "icon-4-9"; icon_state = "4-9"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "aXs" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-4-10"; icon_state = "4-10"},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech) "aXt" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-2-5"; icon_state = "2-5"},/obj/structure/cable/green{tag = "icon-2-9"; icon_state = "2-9"},/obj/structure/cable/green{tag = "icon-2-4"; icon_state = "2-4"},/obj/structure/cable/green{tag = "icon-2-8"; icon_state = "2-8"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech) "aXu" = (/turf/simulated/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; icon_state = "darkblue"; dir = 1},/obj/structure/cable/green{tag = "icon-6-8"; icon_state = "6-8"},/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/camera{c_tag = "Secure Technical Storage"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/storage/tech) @@ -3095,9 +3095,9 @@ "bhA" = (/obj/effect/spawner/structure/window,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/engine/break_room) "bhB" = (/obj/machinery/door/airlock/maintenance{name = "maintenance access"; req_access_txt = "12"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft) "bhC" = (/turf/simulated/wall,/area/hallway/primary/central) -"bhD" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"bhE" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/primary/central) -"bhF" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central) +"bhD" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"bhE" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"bhF" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering) "bhG" = (/turf/simulated/wall,/area/hallway/primary/fore{name = "Fore Starboard Hallway"}) "bhH" = (/obj/machinery/door/airlock/maintenance{name = "maintenance access"; req_access_txt = "12"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "bhI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/hallway/primary/fore{name = "Fore Starboard Hallway"}) @@ -3335,7 +3335,7 @@ "bmg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/wall,/area/maintenance/fore) "bmh" = (/obj/machinery/space_heater,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "bmi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/wall/r_wall,/area/security/transfer) -"bmj" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/security/transfer) +"bmj" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10},/area/security/transfer) "bmk" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel/darkred/side,/area/security/transfer) "bml" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; layer = 2.4},/obj/machinery/door/window/southleft{base_state = "right"; dir = 2; icon_state = "right"; name = "Additional Transfer Methods"; req_access_txt = "2"},/turf/simulated/floor/plasteel/darkred/side{tag = "icon-darkred (SOUTHEAST)"; icon_state = "darkred"; dir = 6},/area/security/transfer) "bmm" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape) @@ -6735,7 +6735,7 @@ "czA" = (/obj/structure/shuttle/engine/propulsion/burst,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/turf/simulated/floor/plating/airless,/area/shuttle/mining) "czB" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/mining) "czC" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"czD" = (/obj/structure/cable/green{tag = "icon-1-10"; icon_state = "1-10"},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"czD" = (/obj/structure/cable/green{tag = "icon-1-9"; icon_state = "1-9"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "czE" = (/obj/structure/bed/chair,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "czF" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs/cable/green,/obj/item/weapon/restraints/handcuffs/cable/green,/obj/item/toy/owl,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "czG" = (/obj/structure/closet/firecloset/full,/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -6878,7 +6878,7 @@ "cCn" = (/obj/structure/cable/pink{tag = "icon-1-2"; icon_state = "1-2"},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cCo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitepurple"},/area/medical/research{name = "Research Division"}) "cCp" = (/obj/machinery/vending/cigarette,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"cCq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel/bar,/area/crew_quarters/bar) +"cCq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall/rust,/area/maintenance/atmos_control) "cCr" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTH)"; icon_state = "whitepurple"; dir = 1},/obj/structure/cable/pink{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/area/medical/research{name = "Research Division"}) "cCs" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHEAST)"; icon_state = "whitepurple"; dir = 5},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHEAST)"; icon_state = "warningline"; dir = 5},/area/medical/research{name = "Research Division"}) "cCt" = (/obj/machinery/vending/coffee,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light,/obj/machinery/camera{c_tag = "Science Hallway East"; dir = 1; network = list("SS13","Sci")},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -7083,7 +7083,7 @@ "cGk" = (/obj/effect/spawner/structure/window,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cGl" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg3"},/area/maintenance/asmaint2) "cGm" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel/bot,/area/toxins/storage) -"cGn" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel/bot,/area/toxins/storage) +"cGn" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel/bot,/area/toxins/storage) "cGo" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/bot,/area/toxins/storage) "cGp" = (/obj/machinery/computer/area_atmos,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = 26; pixel_y = -2; tag = "EAST"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) "cGq" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 6; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) @@ -7220,7 +7220,7 @@ "cIR" = (/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/obj/machinery/conveyor{dir = 1; id = "QMLoad"; tag = "cargoshuttledown"},/turf/simulated/floor/plating,/area/shuttle/supply) "cIS" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/turf/simulated/floor/plating,/area/shuttle/supply) "cIT" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dir = 2; dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 2; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/simulated/floor/plating,/area/shuttle/supply) -"cIU" = (/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/obj/machinery/conveyor{dir = 1; id = "QMLoad2"; tag = "cargoshuttleup"},/turf/simulated/floor/plating,/area/shuttle/supply) +"cIU" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "cIV" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) "cIW" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/supply) "cIX" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) @@ -7349,7 +7349,7 @@ "cLq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/apmaint) "cLr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{broken = 1; icon_state = "platingdmg1"},/area/maintenance/apmaint) "cLs" = (/obj/effect/spawner/lootdrop{loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; name = "random material damage spawner"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/maintenance/apmaint) -"cLt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint) +"cLt" = (/obj/structure/cable/green{tag = "icon-1-4"; icon_state = "1-4"},/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/atmos_control) "cLu" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/apmaint) "cLv" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/closet/wardrobe/cargotech,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cLw" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/apmaint) @@ -7627,14 +7627,14 @@ "cQI" = (/obj/machinery/camera{active_power_usage = 0; c_tag = "Bomb Test Site"; desc = "A specially-reinforced camera with a long lasting battery, used to monitor the bomb testing site."; dir = 1; invuln = 1; light = null; name = "Hardened Bomb-Test Camera"; network = list("Toxins"); start_active = 1; use_power = 0},/obj/item/target/alien{anchored = 1},/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/toxins/test_area) "cQJ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating/airless{dir = 6; icon_state = "warnplate"},/area/toxins/test_area) "cQK" = (/turf/indestructible{desc = "A wall impregnated with Fixium, able to withstand massive explosions with ease"; icon_state = "riveted"; name = "hyper-reinforced wall"},/area/toxins/test_area) -"cQL" = (/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/carpet,/area/chapel/main) -"cQM" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/obj/structure/flora/tree/festivus,/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/medical/research{name = "Research Division"}) +"cQL" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/wall,/area/maintenance/atmos_control) +"cQM" = (/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/atmos_control) "cQN" = (/obj/structure/cable/green{tag = "icon-1-6"; icon_state = "1-6"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cQO" = (/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/item/weapon/wirerod,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cQP" = (/obj/structure/cable/yellow{tag = "icon-6-9"; icon_state = "6-9"; d1 = 4; d2 = 8},/obj/structure/grille,/obj/structure/cable/green{tag = "icon-5-8"; icon_state = "5-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cQQ" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/engine/engineering) +"cQP" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) +"cQQ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "cQR" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cQS" = (/obj/structure/cable/yellow{tag = "icon-4-10"; icon_state = "4-10"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cQS" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{tag = "icon-1-2"; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/plasteel,/area/hallway/primary/central) "cQT" = (/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},/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plating/airless,/area/engine/engineering) "cQU" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (WEST)"; dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "cQV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/turf/simulated/floor/plasteel/warning{dir = 8},/area/engine/engineering) @@ -7643,9 +7643,9 @@ "cQY" = (/obj/structure/cable/green{tag = "icon-1-9"; icon_state = "1-9"},/obj/structure/cable/green{tag = "icon-4-9"; icon_state = "4-9"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cQZ" = (/obj/structure/cable/green{tag = "icon-4-8"; icon_state = "4-8"},/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cRa" = (/obj/structure/cable/green{tag = "icon-5-8"; icon_state = "5-8"},/obj/structure/cable/green{tag = "icon-1-8"; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cRb" = (/obj/structure/cable/yellow{icon_state = "4-8"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cRc" = (/obj/structure/cable/yellow{tag = "icon-4-9"; icon_state = "4-9"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cRd" = (/obj/structure/cable/yellow{tag = "icon-5-8"; icon_state = "5-8"; d1 = 4; d2 = 8},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) +"cRb" = (/turf/simulated/floor/plasteel/whitepurple/side{tag = "icon-whitepurple (NORTHWEST)"; icon_state = "whitepurple"; dir = 9},/turf/simulated/floor/plasteel/warningline{tag = "icon-warningline (NORTHWEST)"; icon_state = "warningline"; dir = 9},/area/medical/research{name = "Research Division"}) +"cRc" = (/obj/machinery/conveyor{dir = 1; id = "QMLoad2"; tag = "cargoshuttleup"},/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/shuttle/supply) +"cRd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/apmaint) "cRe" = (/obj/machinery/door/airlock/external{glass = 1; name = "Cargo Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/hallway/secondary/exit) "cRf" = (/obj/machinery/door/airlock/external{glass = 1; name = "Cargo Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/hallway/secondary/exit) "cRg" = (/obj/machinery/door/airlock/external{glass = 1; name = "Escape Airlock"; opacity = 0},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplate"},/area/hallway/secondary/exit) @@ -7754,40 +7754,40 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaeaiTaiUaiUaiVaiWaiXaiYaiZajaajaajbafvafvaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaeakEakyakyakyakyakyakyakyalgakyakyakyakyakyakyalNalNakyakyakyalOalPakyakyalQalRakyalSalTajTalUalValUalUalUalUalUalUaiualWalXalXalXalXalXalYaiualZalZalZalZalZamaambalcamcamdamealcamfakZalMalJamgamhamiamjalcaaealcalcalHalcalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaeaiTaiUaiUaiVaiWaiXaiYaiZajaajaajbaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeajoajoajoajoajpaaeaiXaaeajpajqajqajqajqafvaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaeaaeaaaaaaaaeakEakyakyakyamkamlammamnakyakyakyampammaneanbakyakyamqamramsamtamuamvamwamxamyamzakyakyalTajTalUamAamBamCamDamEamEalUamFamGamHamIamJamKamLamMamNamOamPamQamRalZamaamSalcamcamTamdalcalcakZalcamUalIakZakZamValcaaealcamWamXamYalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeajoajoajoajoajpaaeaiXaaeajpajqajqajqajqaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaiXaaaaaaaaaaaaaaaaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeakEakyakyaouanaanTamZanaancammandanaamZanTanaaowanganfanganhanianjankanlanlamyanlanmakyalTajTalUannanoanpanqanransantanuanvanwanxanyanzanAanBanCanDanEanFanGalZamaanHalcamdameamcalcanIakZalcalbanJanKanLanManNaaealcalbakZanOalcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaanPaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanQaaaaaaaaaaaaaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanSanRanSanRanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeakEakyakyalNanaanTameamcanaamZamZamZanaamcameanTamZakyakyakyanUanlanVanWanXanlamyanlanYakyalTajTalUanZamEaoaaobaocamEaodaoeaofaogaogaogaogaoganBanCaohaoiaojaokalZamaaolalcalcalcalcalcakZakZalcalcalcalMalcalcalcalcalcaomaonaonaonaonaonaonaonaonaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaooaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaioaaaaaaaaaaaeaaeaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaopaoqaoraosaotanSaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaeaaeaaaakEakyamZalNaptameameameapuamcaovamcapuameameameaqeakyaoxaoyaozanlaoAaoBaoCaoDaoEaoFaoGakyalTaoHalUaoIanoaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoZapaalZamaapbapcapdalMapeakZapfakZalMapgakZakZakZapfakZalIanIakZaonaphapiapjapkaplapmaonaaeaaeaaeaaaaaaaaaapnaaaaaaaaaaaaaaeaaeaaaaaaaaaaooaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaioaaaaaaaaeaaeaaaaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRapoappapqaprapsanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaamrakyamZaqkamcarfameameameamcaovamcameameameameamcapvapwapxaozanlapyapzapAaniapBapCapDakyalTapEalVapFapGapHapIamEamEalUapJapKahvahvahvahvahvapLahMalZapMapNalZalZamaapOapPapQapRapSapRapRapRapRapRapRapTapRapUapRapRapRapVaonapWapXapYapYapZaqaaonaaaaonaqbaonafvafvaqcaaaaaaaaaaaaaaaaaeaaeaaaaaaaooaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaqdatoaqdaaeaaeaaaaaaaaaafvafvafvafvaaeaaaaaaaaaaaaanRanRanRanRanRanRanRaqfaqgaqhaqiaqjanRanRanRanRanSanRanRanRaaeaaeaaeaaaaaaaaaakEakyamZatqameameatsameameamcaovawvameameatsameameapvapwaqlaqmaqnaqoaqpaqpaqqaqrapCaqsakyalTajTalUalUalUalUalUalValUalUaqtaquaqvaqwaqxaqyaqzaqAaqBaqCaqDaqEaqFaqGaqHaqIaqJaqKaqLaqMaqNaqOaqNaqPaqNaqNaqNaqQaqNaqRaqNaqNaqSaqTaqUaqVaqWaqXaqYaqZaraaraaraarbaraafvarcardarcaaeaaeaaaaaaaaaaaeaaeareaxPareaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaqdargaqdaaeaaaaaaaaaaaaaaeaaaanRarhanRaaaaaaaaeaaeanRariarjarkarlarjarmarmarmarnaroarmarmarjarjarjarparqarranRaaeaaeaaeaaaaaaaaaakEakyarsatqameatsatsamcamcazsaovazsamcamcatsatsameapvapwaruaozanlarvarwarxaryaqrapCakyakyarzarAarBarCalnalnarDalnarEarFahMarGarHarIarJarKalwarLahMarMarNarOarParParParQarRarSarTarUarVarWarVarXarXarXarYarZarZarXarXasaasbaonascapXasdapYaseasfasgashasgasiaraaraaraardarcarcaaeaaeaaaaaaaaaaaeareasjareaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaaaqdaqdatoaqdaqdaaaaaaaaaaaaaaeaaaanRaskanRaaeaaeaaeaabaslasmasnasnasnasnasnasnasnasoaspasnasnasnasnasnasnasqasranRaaeaaeaaeaaaaaaaaaakEakyakyatqameameazuaztaDzazxaDzaEPaDzaztaFSassameapvapvakyakyastakyakyamrasuasvaswakyasxasyaszasAasAasAasAasAasAasBarMasCahMahMasDajUasEahMaiCasFarMasGasHasHasHasHasHasHasIasJasKasHasLasHasHameamcameameameamcameasMasNaonasOasPasQasRasSasTasUasVasWasXasYasZataatbatcarcaaeaaeaaeaaeaaeareareaxPareareaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRanSanSanSanSanRanRanRanRanRanRanRanRatdateatfatgatdanRanRanRanRanRanRanRathatiatiatiatiatiatjatkatlatlatlatlatlatlatlatlatlatlatlatlatlanRanRatmatnanSaaaaaaaaeaaeaaaaaaakEakyamZaFTameatpamcaFUartamdamdamdartaFUamcameameapvattatuatvatwatwatxakyatyatzatAakyatBatCatDatEatEatEatEatEatFatGatHatIatIatIatJatKatLatIatIatIatMasGasHatNatOatPatQatRatSatTatUatVatWatXatYameatZatZatZatZatZamcasMasNaonauaaubaucaudaueaufasgaugasgauharaaraaraauiarcarcaaeaaeaaaaaaaaaaujaukaulaumaujaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRaunauoauoaupauqaurausautauuauvauwauxatdauyauzauAatdauBauqauqauCauDauEanRauFauGasnasnasnasnauHauIatlauJauKauLauMauNauOauPauQauRauSauTatlauUauVatmaqianSaaaaaaaaaaaeaaeaaaakEakyamZaFTamcamcamcaFUamdauXauYauZamdaFUamcamcamcapvavbavcaJcavdaveavfakyavgaqravhakyaviavjatEavkavlavmavnatEatEavoavpavqavqavravsavtavuavvarParParPavwasHavxavyavzavAatRavBavCavDavEavFavGavHavIavJavKavLavLatZameavMasNaonaonaonaonavNavOaonaraaraaraaraaraafvarcauiavPaaeaaeaaaaaaaaaaaaaujavQavRavSaujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRauqavTavUauqanRavVanRanRanRanRanRauvatdavWavXavYatdavZauqausawaawbawcauVawdaweauqauPauPawfauPauPatlawgawhawiawjawkawlauPawmawnawoawpatlanRanRatmaqianSaaaaaaapnaaaaaeaaeamrakyawqaFTameaJdaovaFUamdavaaJeauWamdaFUaovaJdameapvavbawrawsawtawuaJfawwawxawyawzawAawBawCawDawEawFawGawHawIatEawJawKakLajQahvawLajUawMasHasHasHasHasHasHawNavyavyawOatRawPawQawRawSawTawUawVamcatRawWavLawXatZameavMawYawZaxaawZaxbaxbaxcaxdaxdaxdaxdaxdaxdaxdaxdaxeaaaaaaaaaaaaaaaaaaaaeaujaxfaxgaxhaujaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRaxianRaxjaxkaxlaxmanRaxnaxlaxoauqaxpaxqaxratdatdaxsatdatdaxtauqaxuaxvaxuaxuanRaxwaxxauqaxyaxzaxAaxBaxCatlaxDaxEaxEaxFaxGaxHauPaxIaxJaxKaxIatlamcanSatmaqianSaaaaaaaxLaaeaaeaaaakEakyamZaFTamcamcamcaFUamdaxMatraxNamdaFUamcamcamcapvavbaxOatwatwatwatwakyaJgaxQaxRaxSaxTaxUaxVaxWaxXaxYaxZayaatEawJawKaybakKahvaycaydawMasHayeayfaygayhayiayjaykaylaymaynayoaypayqayraysaytayuayvaywayxavLayyatZameavMayzayAayBaonaaeaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaaaabaaaaaeaaeaujaujayCaujaujaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRayEanRayFayGanRanRanRauqayHayIauqayJaxqayKayLayMayNayOayPayLayQayRaySayLayLayLayTayUarjayVayWayXayYayZatlazaazbawiazcazdazeazfazgazhaziazjazkazlazmaznazoazpazqazqazraaeaaaaaaakEakyamZaFTameameamcaFUartamdamdamdartaFUamcameameapvazvazwaJhatwatwazyakyazzazAazBakyatBatCatEazCazDazEazFazGatEawJawKazHazIahvazJajUazKasHazLayfaygayhayiazMazNazOazPazQazRazSazTazTazUazVazWameatZatZatZatZatZamcavMayzazXazXazXazXazXazXazXazXazXazXazXazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaAbaAcaAdazYazYazYazYazYazYazYazYazYazYazYazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRanRanRaAeaqhanRaAfanRaAgaosaAhauqaAiaxqaAjaAkaAlaAlaAlaAlaAlaAlaAlaAmaAmaAmaAmaAnaAoaApaAqatlaAratlatlatlaAsaAtaAuaAvaAwaAxaAyaAzaAwaAAaABaACameanSatmaqianSaaaaaeamdaaaaaaaaaakEakyakyatqameameazuaJiaDzaJjaKIaKHaDzazxaFSameameapvapvakyakyaADakyakyamraAEasvaswakyaAFaAGatEaAHaAIaAJaAKaALatEaAMawKaANahvahvaAOaAPaAQaARaASaATaAUaAVayiaAWazNaAXavyavyaAYaAZaBaaBbaBcaBdaBeaBfaBgaBhaBiaBiatZameavMaBjapRapRapRapRapRapRapRaBkapRapRapRaBlaBmapRapRapRaBmaBmaBmaBmaBmaBmaBmaBmaBnaBoaBpaBoaBoaBoaBqaBraBsaBtazYaBuaBvaBwazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaBxaxlaByanRaBzaBAauVaBBanRauqaxlaxlauqaBCaxqaAjaqiaBDaBEaBFaBDaBGaBHaBDaxlauqaBIauqaBJaBKaBLaBMaBNaBOaBPaBQaBRaxEaxEaxEaBSaBTaBUauPauPaBVaBWauPatlamcanSatmaqianSaaeaaeaBXamdamdaaeakEakyaBYatqameatsatsamcamcaKJaFUaKJamcamcatsatsameapvapwapxaBZaCaaCbaCcaCdaCeaqrapCakyaCfaAGatEaCgaChaCiaCjaCkatEawJawKaClahvaCmaCnaCoaCpaCqaCraCsaCtaCuaCvaCwaCxaCyaCzaCAaCBaCCaCDavyaCEaCFawVamcatRaCGaCHaCIatZameavMayzaCJazXaCKaCLazXaCMaCNazXazXapPaCOazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaCPaCQazYaCPaCRazYazYazYazYaCSaCTazYaCUaCVaCVazYaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaCWauqauqaCXaCYaCZarmarmarmarmarmarmarmarmarmaDaaDbaBDaDcaDdaDeaDdaDfaDgaDgaDgaDgaDgaDgaDgaDhaDiaDjaDkaDlaDmaDnaDoaAzaDpaDqaDraDsauPaDtaDuaDvaDwatlanRanRatmaqianSaaeamdamdaDxaaaaaaakEakyamZatqameaKKatsameameamcaFUamcameameatsameameapvapwaqlaDybugaDAaDAaDAaDBaDCaDDakyaDEaAGatEaDFaDGaDHaDIaDJatEawJaDKaDLahvaDMaDNaDOaDPaDQaDRaDSaDTaDUaDQaDVaDWaDXayiaDYaDZavyaEaavyaCEaEbayuayvaywaEcaBiaBiatZameavMayzaEdaEeaEeaEeaEeaEeaEeaEeazXapPaEfazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaeaaaazYaCQazYaEgaEhaEiaCVaEjazYaCSazYazYaCPaEkazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabanRanRanRanRanRaElaEmasnasnasnasnasnasnasnasnasnaEnaEoaBDaEpaEqaBDaEraEsaDgaEtaEuaEvaEwaExaEyaEzaEAatlaEBaECaEDatlaEEawkaEFaEGaEHaEIauPaEJaEKaELaEMatlaENanRatmaqianSaaeaaeaaaamdaaaaaaamrakyamZbuiamcameameameameamcaFUamcameameameameamcapvapwaruaEObysaoDaEQaERaESaETaEUakyaEVaAGatEaEWaEXaEYaEXaEZatEawJaFaaFbahvaFcaFdaFeaFfaFgaFhaFiaFjaFkaFgaFlaFmaFnaDYaFoaCDavyaCBaFpaCEaFqawVameatZatZatZatZatZamcavMayzaFraEeaFsaFtaFuaFvaFwaEeaCKapPaFxazZaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaaAaaCQazYaFyazYazYazYazYazYaFzaBmaBmaBmaBsaFAaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeanRaqhaFDaFEaFEaFEaFEaFEaFEaFEaFEaFEaFFaFGaBDaFHaFIaBDaFJaFKaDgaFLaFMaFNaFOaFPaEyaEzaFQatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlauVanRatmaFRanSaaaaaeaaeaaeaabaaaakEakyamZalNbytameameamebNLamcaFUamcbNLameameamebNMakyaFVaoyaFWcvvanXamyaFYaFZaFZaFZaGaaGbaGcaxVaxVaxVaxVaxVaGdatEaGeaFaaGfahvaGgaGhaGiawMasHaGjaGkaGlaGmaGnaGoazNaGpaDYaFoaGqaGraGsaFpaGtaGuaBeaBfaBgaGvaGwaGxatZameavMayzaGyaEeaGzaGAaGBaGCaGDaEeapPaFxapPazZaaeaaaaaaaaeaGEaGFamdaaeaaaaaeaaeaAaaCQazYaGGaGHaGIaGJaGKazYazYaCPazYaGLaCSaGMaFBaGNaCVaGOaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeanRaqhaFDaFEaGPaGQaGRaGSaGTaGUaGVaBDaGWaGXaGYaGZaHaaHbaHaaHcaHdaHeaHfaHgaHhaHiaHdaHjaHkaHlaHmaHnaHoaHoaHpaHqaHnaHraHsaHtaHsaHuaHvaHwaHxaHxaHxaHxaHyaHzanRaaaaaaaaeaaeaaaaaaakEakyakyalNanaaHAameamcanaamZcyFamZczDamcamecGLamZakyakyakyaHBcGMaHDamyaHEaFZaHFaHGaHHaGaaHIaHJaHKaHJaHJaHJaHLaHJaHMaHNajQahvaHOaHPaHQaHRasHasHaHSaHTatRasHaHUazNaHVaDYaFoaCDaHWaCBaFpaCEaHXawVamcatRaHYaHZaIaatZameavMayzaIbaEeaIcaIdaGAaIeaIfaIgaIhaIiapPazZaaaaaaaabamdamdaIjaIkamdaaaaaaaaaaAaaIlazYaImaCVaInaCVaCVazYaEhaIoazYaIpaCSaIqaFBaCVaIraIsaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaanRaItaFDaFEaIuaIvaIwaIxaIxaIyaIzaIAaIBaICaIDaIEaIFaIGaIFaIHaIIaIJaIJaIKaILaIMaINaIOaIPaIQaHmaHnaHoaIRaIRaISaITaIUaIVaIWaIXaIYaHvaIZanRanRanSaslaJaanRaJbaJbaJbaJbaJbaJbaJbaJbalNakyakycQNanaaHAamZcQOamoammcQPamZamZcQQamZcQScQRcQTcQRcQVcQUcQXcQWaJkaJlaJmaJnaJoaGaakyakyakyakyakyakyaJpaJqaJraJsaJtatIaJuaJvaJwaJxaGnaJyaJzaJAaJBasHaJCazNaDYaJDaDYaJEavyaCBaJFaCEaJGayuayvaywaJHaGwaGwatZameavMayzapPaEeaGDaJIaJJaJKaGDaEeaJLapPaJMazZaaeaaeaaaaaeaIkaDxamdaaeaaaaaeaaeaAaaCQazYaJNaJOaJPaJQaCVaJRaCVaJSazYaJTaCSaJUaJVaEiaJWaJXaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaanRaqhaFDaFEaJYaJZaKaaKbaKcaKdaKeaKfaKgaKdaKhaKiaKjaKdaKdaKkaKlaKmaKnaKoaKpaKqaKlaKraKsaKtaHmaHnaIRaHoaHoaKuaHnaKvaIWaIWaIWaKwaHvaKxaJbameamcaKyameaJbaKzaKAaKBaKCaKDaKEaKCaKFaKGakyakyakycQYcQZammcRaakyakyakycRccRbcRbcRdakyakyaKLalgaKMaFXaKNaKOaKPaKQaKRaKSaKTaKUaKVaKWaKXaKYaKZakyaLaaLbaLcaLdaLeaLfaLgaLhaLiaLjaLkaLlaLmaLnaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaLyaCEaFqawVameatZatZatZatZatZamcavMayzapPaEeaLzaLAaLBaLCaLDaEeaLEapPaLFazZaaaaaaaaaaaeaaaaaaaaaaaeaaaaaeaaaaAaaCQazYazYazYazYazYazYazYaLGazYazYaCVaCSaLHaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaanRaqhaFDaFEaLIaLJaLKaLLaLMaLNaLOaBDaLPaLPaLPaLQaLRaBDaLPaLPaDgaEyaLSaDgaLSaEyaDgaLTaLUaLVaHnaHvaHnaHnaHnaHnaHvaLWaLXaIWaLYaLZaHvaKxaJbameamcaKyameaJbaKFaKFaMaaJbaMbaKFaJbaMcaMdaMeakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyalNaMfaMgaMhamyaMiaFZaFZaFZaFZaFZaMjaMkaMlaMmaMnakyakyajQaAMaMoajQahvahvaMpaMqaMraCvaMsaMtaMuaMvasHaMwaMxaMyaMzaMzaMAavyavyavyaMBaMCaBeaBfaBgaMDaMEaMEatZameavMayzazXaEeaEeaEeaEeaEeaEeaEeazXapPaCLazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaazYaCQazYaEjaCVaEiaCVaMFaGLaCVaLHazYaCVaMGazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanRaMHaMIaFEaBDaBDaMJaMKaMLaMKaMKaBDaMMaMNaLPaMOaHaaMPaMQaMRaBDaMSaMTaMUaMTaMVaBDaMWaMXaHnaMYaMZaNaaNbaNcaNdaHnaNeaNfaNgaNhaNiaHvaKxaKCaJbaNjaNkaJbaJbaJbaNlaJbaJbaJbaKCaJbaJbaJbaJbakyakyalgakyakyakyaNmaNnaNoakyakyakyalgakyaNpaNqakyapyaHCanlamyaFYaNranlanlanlaFYaNranVaNsaCaaNtaNuaxSaNvaNwaNxajQazHahvaNyaNzaNAayiaNBayiasHasHasHaNCaNDaNEaNFaNFaNGaNFaNFaNFaNHaNIaNJamcatRaNKaNLaNMatZameavMayzaCKazXazXazXazXazXazXazXazXapPaIbaCKazXazZazZazZazZazZazZazZazZazZazXazYaCQazYazYaGGaCPazYazYazYazYazYazYaCVaCSaCVazYaaaaabaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaabaaaanRaNNaNOaBDaNPaNQaNRaNSaNTaNUaNUaNVaNUaNWaNXaNYaNZaIxaIxaIxaOaaObaOcaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaOoaOpaOqaOraOsaOtaOuaOvaOwaOxaOyaOzaOAaOBaOzaOzaOzaOzaOCaOzaOzaOzaODaOzaOzaOzaOzaOzaOEaOFaOGaOHaOIaOJaOHaOHaOKaODaOzaOzaOLaOzaOMaONaOOaOPaOQaOPaORaOSaOPaOPaOPaOTaOUaOVaOPaOWaOPaOXavqaOYaOZakLalSahvaPaajUawMahvaPbaPcaPdaPeaMzaMzaPfaPgaDSaDSaPhaDSaPiavyaPjaPkaPlayvaywaPmaMEaMEatZameaPnaPoaPpaPpaPpaPpaPpaPpaPpaPpaPpaPqarVarVaPrarVarVaPsaPpaPtarVarVaPuaPvaPsaPwaPxaPyaPyaPzaPyaPyaPyaPAaPyaPyaPyaPyaPBaPCazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanSaPDaPEaBDaPFaPGaPHaPIaPJaPKaPLaPMaPMaPNaPOaPPaPQaKbaKbaKbaPRaPSaPTaPUaPVaPSaPRaPWaPXaPYaPZaQaaQaaQbaQcaQdaQeaQfaQgaQhaQaaQaaQiaQjaQkaQlaQmaQnaQoaQpaQpaQpaQqaQraQpaQsaQtaQuaQvaQwaQlaQxaQyaQzaQzaQzaQzaQzaQzaQzaQAaQBaQlaQlaQCaQlaxSaQDaQEaQFaQGaQHaQIaQJaCaaCaaQKaQLaQMaQNaQOanlanlaQPaQPaQPaQPaQPaQPaQPaQQajUawMahvaPbaCLasHaQRaQSaQTaQUaQVaQWaQXaQYaDSaQZaRaaRbaRcatRameatZatZatZatZatZameasMayzazXazXazZazZazZazZazZazXazXaPbazXazXazXazXazXaRdazXaReaRfaRgaRhaRhaRiaCPaRjazYaMFaRkaCVaRlaRmaJUaCVaCVaCPazYaRnaRoazYazYazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaanRaRpaRqaBDaBDaDeaRraRsaBDaBDaBDaBDaBDaBDaBDaRtaRuaRvaMQaMRaBDaRwaRxaRyaRxaRzaBDaRAaRBaHnaRCaRDaREaRFaRGaRHaHvaRIaRJaRKaRLaRMaHvaRNaROaRPaRPaROaRQaRPaRRaRSaRTaRUaRVaRVaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXaRXaRXaRXaRYaRZakyaSaaSbaScakyakyakyakyaSdaSdaSdaSeaSfaSgaSdaSdaSdaShaSiaSjaSkaSlaSmaQPaSnaydaSoahvaPbaCKasHasHaSpaSqayuaSraSpaSqayuaPlayuaPlayuaSratRameamcameameameamcameasMayzazXameamcamcameamcamcameazXaSsazXaStapPaStapPaRdazXaSuaSvaSwaCLaSxaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyazYazYazYaRnaSzazYaSAaSBazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaanRaqhaFDaBDaSCaSDaSEaSFaSGaLPaSHaSIaBDaSJaBDaLQaLRaBDaLPaLPaBDaBDaLPaLPaLPaBDaBDaSKaLUaLVaHnaHnaHnaHnaSLaSMaHvaHvaHvaHvaHvaHvaHvaKxaROaSNaSOaSPaSQaRPaRRaRSaSRaRUaRVaSSaSSaSSaRVaRWaSTaSUaSVaSTaSWaSTaSXaSYaSTaSZaTaaTbaTcaRXaRYaKFakyaTdaTeaTfakyaTgajDakyaThaTiaTjaTkaTlaTmaTnaToaQKaTpaTqaTraTsaTtaTuaTvaPaajUawMahvaPbazXameameaTwamcaTxameaTwamcaTxameaTxamcaTxameameameazXazXazZazZazXazXasMayzazZamcaTyaTzaTzaTzaTAamcazZaPbazZapPaTBapPapPaRdazXaTCaTCaTCaTCaTCaSyaTDaTEaTFaTGaTHaTIaTJaTKaTLaTMaTNaTOazYaTPaTQaTRaTSaTTaTUazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeanRanRanRanRanRaqhaFDaBDaTVaTWaTXaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUiaUjaUjaUkaUlaUlaUmaUnaUjaUoaUpaUqaUraUsaUtaUuaUjaUvaUwaUxaUyaUzaQlaQxaQlaQlaUAaROaRPaRPaSPaUBaRPaRRaRSaSRaUCaRVaUDaUDaUEaRVaRWaSTaUFaUGaUHaUIaUHaUJaUKaSTaSZaULaUMaUNaRXaRYaUOakyaUPaUQaURakyakJaUSaOMaUTaUTaUUaUVaUWaUXaOPaUYaUZaVaaVbaVcaVdaVeaVfaTvaPaajUawMahvaPbazXamcatZaVgatRaVhatZaVgatRaVhatZaViatRaVjatZamcazXaCKaVkapQapRapRapRaVlaVmazZamcaVnaVoaVpaVqaVramcazZaPbazXaStapPaStazXaRdaVsaTCaVtaVuaVvaVwaSyaVxaVxaVyaVzaVAaVBaVCaVDaVEaSyaTNaTNazYaRnaVFaCPaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanRaVHaVIaVJanRaqhaFDaBDaVKaVLaVMaVNaVOaPOaVPaVQaVRaVSaVTaVUaVVaVWaVWaVXaVYaVZaWaaWbaWcaWdaWeaWfaWgaWhaWiaVWaWjaWkaWlaWmaWnaWoaWpaWqaWraWqaWsaWtaWuaWvaWwaWxaWyaRPaRRaRSaSRaRUaRVaWzaWAaWBaRVaRWaWCaSTaSTaWDaWEaWFaSTaSTaWGaSZaWHaWIaWJaRXaWKaWLakyaWMaWNaWOakyaWPatGakyaWQaWRaWSaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaTvaPaajUawMahvaXfazXameatZaXgaXhaXiatZaXjaXkaXlatZaXmaXnaXoatZameazXaSvaXpaXqaPpaPpaPpaXraRiazXameaVnaXsaXtaXuaVrameazXaPbazXazXapPaCKazXaRdapPaXvaXwaXxaXyaXwaXzaVxaVxaXAaVxaXBaXCaXDaVxaVxaSyaXEaXFazYaRnaSzazYaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanQaaaaaaaaaaaaaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanSanRanSanRanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeakEakyakyalNanaanTameamcanaamZamZamZanaamcameanTamZakyakyakyanUanlanVanWanXanlamyanlanYakyalTajTalUanZamEaoaaobaocamEaodaoeaofaogaogaogaogaoganBanCaohaoiaojaokalZamaaolalcalcalcalcalcakZakZalcalcalcalMalcalcalcalcalcalcaomaonaonaonaonaonaonaonaonaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaooaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaioaaaaaaaaaaaeaaeaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaopaoqaoraosaotanSaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaeaaeaaaakEakyamZalNaptameameameapuamcaovamcapuameameameaqeakyaoxaoyaozanlaoAaoBaoCaoDaoEaoFaoGakyalTaoHalUaoIanoaoJaoKaoLaoMaoNaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXaoYaoZapaalZamaapbapcapdalMapeakZapfakZalMapgakZakZakZapfakZalIanIakZakZaonaphapiapjapkaplapmaonaaeaaeaaeaaaaaaaaaapnaaaaaaaaaaaeaaeaaaaaaaaaaooaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaioaaaaaaaaeaaeaaaaaaafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRapoappapqaprapsanRaaeaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaamrakyamZaqkamcarfameameameamcaovamcameameameameamcapvapwapxaozanlapyapzapAaniapBapCapDakyalTapEalVapFapGapHapIamEamEalUapJapKahvahvahvahvahvapLahMalZapMapNalZalZamaapOapPapQapRapSapRapRapRapRapRapRapTapRapUapRapRapRapVakZaonapWapXapYapYapZaqaaonaaaaonaqbaonafvafvaqcaaaaaaaaaaaaaaeaaeaaaaaaaooaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaqdatoaqdaaeaaeaaaaaaaaaafvafvafvafvaaeaaaaaaaaaaaaanRanRanRanRanRanRanRaqfaqgaqhaqiaqjanRanRanRanRanSanRanRanRaaeaaeaaeaaaaaaaaaakEakyamZatqameameamcameameamcaovawvameameamcameameapvapwaqlaqmaqnaqoaqpaqpaqqaqrapCaqsakyalTajTalUalUalUalUalUalValUalUaqtaquaqvaqwaqxaqyaqzaqAaqBaqCaqDaqEaqFaqGaqHaqIaqJaqKaqLaqMaqNaqOaqNaqPaqNaqNaqNaqQaqNaqRaqNaqNaqSasaaqTaqUaqVaqWaqXaqYaqZaraaraaraarbaraafvarcardarcaaeaaeaaaaaaaaeaaeareaxPareaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaqdargaqdaaeaaaaaaaaaaaaaaeaaaanRarhanRaaaaaaaaeaaeanRariarjarkarlarjarmarmarmarnaroarmarmarjarjarjarparqarranRaaeaaeaaeaaaaaaaaaakEakyarsatqameamcamcamcamcazsaovazsamcamcamcamcameapvapwaruaozanlarvarwarxaryaqrapCakyakyarzarAarBarCalnalnarDalnarEarFahMarGarHarIarJarKalwarLahMarMarNarOarParParParQarRarSarTarUarVarWarVarXarXarXarYarZarZarXarXarXatsasbaonascapXasdapYaseasfasgashasgasiaraaraaraardarcarcaaeaaeaaaaaaaaeareasjareaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaaaqdaqdatoaqdaqdaaaaaaaaaaaaaaeaaaanRaskanRaaeaaeaaeaabaslasmasnasnasnasnasnasnasnasoaspasnasnasnasnasnasnasqasranRaaeaaeaaeaaaaaaaaaakEakyakyatqameameazuaztaDzazxaDzaEPaDzaztaFSassameapvapvakyakyastakyakyamrasuasvaswakyasxasyaszasAasAasAasAasAasAasBarMasCahMahMasDajUasEahMaiCasFarMasGasHasHasHasHasHasHasIasJasKasHasLasHasHameamcameameameamcameazXasNaYOaonasOasPasQasRasSasTasUasVasWasXasYasZataatbatcarcaaeaaeaaeaaeareareaxPareareaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRanSanSanSanSanRanRanRanRanRanRanRanRatdateatfatgatdanRanRanRanRanRanRanRathatiatiatiatiatiatjatkatlatlatlatlatlatlatlatlatlatlatlatlatlanRanRatmatnanSaaaaaaaaeaaeaaaaaaakEakyamZaFTameatpamcaFUartamdamdamdartaFUamcameameapvattatuatvatwatwatxakyatyatzatAakyatBatCatDatEatEatEatEatEatFatGatHatIatIatIatJatKatLatIatIatIatMasGasHatNatOatPatQatRatSatTatUatVatWatXatYameatZatZatZatZatZamcazXasNaYOaonauaaubaucaudaueaufasgaugasgauharaaraaraauiarcarcaaeaaeaaaaaaaujaukaulaumaujaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRaunauoauoaupauqaurausautauuauvauwauxatdauyauzauAatdauBauqauqauCauDauEanRauFauGasnasnasnasnauHauIatlauJauKauLauMauNauOauPauQauRauSauTatlauUauVatmaqianSaaaaaaaaaaaeaaeaaaakEakyamZaFTamcamcamcaFUamdauXauYauZamdaFUamcamcamcapvavbavcaJcavdaveavfakyavgaqravhakyaviavjatEavkavlavmavnatEatEavoavpavqavqavravsavtavuavvarParParPavwasHavxavyavzavAatRavBavCavDavEavFavGavHavIavJavKavLavLatZameazZasNaYOaonaonaonaonavNavOaonaraaraaraaraaraafvarcauiavPaaeaaeaaaaaaaaaaujavQavRavSaujaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRauqavTavUauqanRavVanRanRanRanRanRauvatdavWavXavYatdavZauqausawaawbawcauVawdaweauqauPauPawfauPauPatlawgawhawiawjawkawlauPawmawnawoawpatlanRanRatmaqianSaaaaaaapnaaaaaeaaeamrakyawqaFTameaJdaovaFUamdavaaJeauWamdaFUaovaJdameapvavbawrawsawtawuaJfawwawxawyawzawAawBawCawDawEawFawGawHawIatEawJawKakLajQahvawLajUawMasHasHasHasHasHasHawNavyavyawOatRawPawQawRawSawTawUawVamcatRawWavLawXatZameazZawYaCJawZaxaawZaxbaxbaxcaxdaxdaxdaxdaxdaxdaxdaxdaxeaaaaaaaaaaaaaaaaaeaujaxfaxgaxhaujaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeanRaxianRaxjaxkaxlaxmanRaxnaxlaxoauqaxpaxqaxratdatdaxsatdatdaxtauqaxuaxvaxuaxuanRaxwaxxauqaxyaxzaxAaxBaxCatlaxDaxEaxEaxFaxGaxHauPaxIaxJaxKaxIatlamcanSatmaqianSaaaaaaaxLaaeaaeaaaakEakyamZaFTamcamcamcaFUamdaxMatraxNamdaFUamcamcamcapvavbaxOatwatwatwatwakyaJgaxQaxRaxSaxTaxUaxVaxWaxXaxYaxZayaatEawJawKaybakKahvaycaydawMasHayeayfaygayhayiayjaykaylaymaynayoaypayqayraysaytayuayvaywayxavLayyatZameazZayzaYOayAayBaonaaeaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaaaabaaeaaeaujaujayCaujaujaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaanRayEanRayFayGanRanRanRauqayHayIauqayJaxqayKayLayMayNayOayPayLayQayRaySayLayLayLayTayUarjayVayWayXayYayZatlazaazbawiazcazdazeazfazgazhaziazjazkazlazmaznazoazpazqazqazraaeaaaaaaakEakyamZaFTameameamcaFUartamdamdamdartaFUamcameameapvazvazwaJhatwatwazyakyazzazAazBakyatBatCatEazCazDazEazFazGatEawJawKazHazIahvazJajUazKasHazLayfaygayhayiazMazNazOazPazQazRazSazTazTazUazVazWameatZatZatZatZatZamcazZayzasMazXazXazXazXazXazXazXazXazXazXazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaAbaAcaAdazYazYazYazYazYazYazYazYazYazYazYazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanRanRanRanRanRaAeaqhanRaAfanRaAgaosaAhauqaAiaxqaAjaAkaAlaAlaAlaAlaAlaAlaAlaAmaAmaAmaAmaAnaAoaApaAqatlaAratlatlatlaAsaAtaAuaAvaAwaAxaAyaAzaAwaAAaABaACameanSatmaqianSaaaaaeamdaaaaaaaaaakEakyakyatqameameazuaJiaDzaJjaKIaKHaDzazxaFSameameapvapvakyakyaADakyakyamraAEasvaswakyaAFaAGatEaAHaAIaAJaAKaALatEaAMawKaANahvahvaAOaAPaAQaARaASaATaAUaAVayiaAWazNaAXavyavyaAYaAZaBaaBbaBcaBdaBeaBfaBgaBhaBiaBiatZameazZaBjaEdapRapRapRapRapRapRaBkapRapRapRaBlaBmapRapRapRaBmaBmaBmaBmaBmaBmaBmaBmaBnaBoaBpaBoaBoaBoaBqaBraBsaBtazYaBuaBvaBwazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaBxaxlaByanRaBzaBAauVaBBanRauqaxlaxlauqaBCaxqaAjaqiaBDaBEaBFaBDaBGaBHaBDaxlauqaBIauqaBJaBKaBLaBMaBNaBOaBPaBQaBRaxEaxEaxEaBSaBTaBUauPauPaBVaBWauPatlamcanSatmaqianSaaeaaeaBXamdamdaaeakEakyaBYatqameamcamcamcamcaKJaFUaKJamcamcamcamcameapvapwapxaBZaCaaCbaCcaCdaCeaqrapCakyaCfaAGatEaCgaChaCiaCjaCkatEawJawKaClahvaCmaCnaCoaCpaCqaCraCsaCtaCuaCvaCwaCxaCyaCzaCAaCBaCCaCDavyaCEaCFawVamcatRaCGaCHaCIatZameazZayzaFrazXaCKaCLazXaCMaCNazXazXapPaCOazXazYazZazZazZaAaaAaaAaaAaaAaaAaazYaCPaCQazYaCPaCRazYazYazYazYaCSaCTazYaCUaCVaCVazYaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanSaCWauqauqaCXaCYaCZarmarmarmarmarmarmarmarmarmaDaaDbaBDaDcaDdaDeaDdaDfaDgaDgaDgaDgaDgaDgaDgaDhaDiaDjaDkaDlaDmaDnaDoaAzaDpaDqaDraDsauPaDtaDuaDvaDwatlanRanRatmaqianSaaeamdamdaDxaaaaaaakEakyamZatqameaKKamcameameamcaFUamcameameamcameameapvapwaqlaDybugaDAaDAaDAaDBaDCaDDakyaDEaAGatEaDFaDGaDHaDIaDJatEawJaDKaDLahvaDMaDNaDOaDPaDQaDRaDSaDTaDUaDQaDVaDWaDXayiaDYaDZavyaEaavyaCEaEbayuayvaywaEcaBiaBiatZameazZayzaGyaEeaEeaEeaEeaEeaEeaEeazXapPaEfazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaeaaaazYaCQazYaEgaEhaEiaCVaEjazYaCSazYazYaCPaEkazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabanRanRanRanRanRaElaEmasnasnasnasnasnasnasnasnasnaEnaEoaBDaEpaEqaBDaEraEsaDgaEtaEuaEvaEwaExaEyaEzaEAatlaEBaECaEDatlaEEawkaEFaEGaEHaEIauPaEJaEKaELaEMatlaENanRatmaqianSaaeaaeaaaamdaaaaaaamrakyamZbuiamcameameameameamcaFUamcameameameameamcapvapwaruaEObysaoDaEQaERaESaETaEUakyaEVaAGatEaEWaEXaEYaEXaEZatEawJaFaaFbahvaFcaFdaFeaFfaFgaFhaFiaFjaFkaFgaFlaFmaFnaDYaFoaCDavyaCBaFpaCEaFqawVameatZatZatZatZatZamcazZayzaPnaEeaFsaFtaFuaFvaFwaEeaCKapPaFxazZaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaaAaaCQazYaFyazYazYazYazYazYaFzaBmaBmaBmaBsaFAaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeanRaqhaFDaFEaFEaFEaFEaFEaFEaFEaFEaFEaFFaFGaBDaFHaFIaBDaFJaFKaDgaFLaFMaFNaFOaFPaEyaEzaFQatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlatlauVanRatmaFRanSaaaaaeaaeaaeaabaaaakEakyamZalNbytameameamebNLamcaFUamcbNLameameamebNMakyaFVaoyaFWcvvanXamyaFYaFZaFZaFZaGaaGbaGcaxVaxVaxVaxVaxVaGdatEaGeaFaaGfahvaGgaGhaGiawMasHaGjaGkaGlaGmaGnaGoazNaGpaDYaFoaGqaGraGsaFpaGtaGuaBeaBfaBgaGvaGwaGxatZameazZayzaPoaEeaGzaGAaGBaGCaGDaEeapPaFxapPazZaaeaaaaaaaaeaGEaGFamdaaeaaaaaeaaeaAaaCQazYaGGaGHaGIaGJaGKazYazYaCPazYaGLaCSaGMaFBaGNaCVaGOaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeanRaqhaFDaFEaGPaGQaGRaGSaGTaGUaGVaBDaGWaGXaGYaGZaHaaHbaHaaHcaHdaHeaHfaHgaHhaHiaHdaHjaHkaHlaHmaHnaHoaHoaHpaHqaHnaHraHsaHtaHsaHuaHvaHwaHxaHxaHxaHxaHyaHzanRaaaaaaaaeaaeaaaaaaakEakyakyalNanaaHAameamcanaamZcyFamZanaamcamecGLamZakyakyakyaHBcGMaHDamyaHEaFZaHFaHGaHHaGaaHIaHJaHKaHJaHJaHJaHLaHJaHMaHNajQahvaHOaHPaHQaHRasHasHaHSaHTatRasHaHUazNaHVaDYaFoaCDaHWaCBaFpaCEaHXawVamcatRaHYaHZaIaatZameazZayzaVlaEeaIcaIdaGAaIeaIfaIgaIhaIiapPazZaaaaaaaabamdamdaIjaIkamdaaaaaaaaaaAaaIlazYaImaCVaInaCVaCVazYaEhaIoazYaIpaCSaIqaFBaCVaIraIsaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaanRaItaFDaFEaIuaIvaIwaIxaIxaIyaIzaIAaIBaICaIDaIEaIFaIGaIFaIHaIIaIJaIJaIKaILaIMaINaIOaIPaIQaHmaHnaHoaIRaIRaISaITaIUaIVaIWaIXaIYaHvaIZanRanRanSaslaJaanRaJbaJbaJbaJbaJbaJbaJbaJbalNakyakycQNanaaHAamZcQOamoammaXrbhEbhDbhFbhDbhDcQRcQTcQRcQVcQUcQXcQWaJkaJlaJmaJnaJoaGaakyakyakyakyakyakyaJpaJqaJraJsaJtatIaJuaJvaJwaJxaGnaJyaJzaJAaJBasHaJCazNaDYaJDaDYaJEavyaCBaJFaCEaJGayuayvaywaJHaGwaGwatZameazZayzaYOaEeaGDaJIaJJaJKaGDaEeaJLapPaJMazZaaeaaeaaaaaeaIkaDxamdaaeaaaaaeaaeaAaaCQazYaJNaJOaJPaJQaCVaJRaCVaJSazYaJTaCSaJUaJVaEiaJWaJXaFBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaanRaqhaFDaFEaJYaJZaKaaKbaKcaKdaKeaKfaKgaKdaKhaKiaKjaKdaKdaKkaKlaKmaKnaKoaKpaKqaKlaKraKsaKtaHmaHnaIRaHoaHoaKuaHnaKvaIWaIWaIWaKwaHvaKxaJbameamcaKyameaJbaKzaKAaKBaKCaKDaKEaKCaKFaKGakyakyakycQYcQZammcRaakyakyakyczDakEakEakEakyakyaKLalgaKMaFXaKNaKOaKPaKQaKRaKSaKTaKUaKVaKWaKXaKYaKZakyaLaaLbaLcaLdaLeaLfaLgaLhaLiaLjaLkaLlaLmaLnaLoaLpaLqaLraLsaLtaLuaLvaLwaLxaLyaCEaFqawVameatZatZatZatZatZamcazZayzaYOaEeaLzaLAaLBaLCaLDaEeaLEapPaLFazZaaaaaaaaaaaeaaaaaaaaaaaeaaaaaeaaaaAaaCQazYazYazYazYazYazYazYaLGazYazYaCVaCSaLHaFBaFCaFBaFBaFBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaanRaqhaFDaFEaLIaLJaLKaLLaLMaLNaLOaBDaLPaLPaLPaLQaLRaBDaLPaLPaDgaEyaLSaDgaLSaEyaDgaLTaLUaLVaHnaHvaHnaHnaHnaHnaHvaLWaLXaIWaLYaLZaHvaKxaJbameamcaKyameaJbaKFaKFaMaaJbaMbaKFaJbaMcaMdaMeakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyakyalNaMfaMgaMhamyaMiaFZaFZaFZaFZaFZaMjaMkaMlaMmaMnakyakyajQaAMaMoajQahvahvaMpaMqaMraCvaMsaMtaMuaMvasHaMwaMxaMyaMzaMzaMAavyavyavyaMBaMCaBeaBfaBgaMDaMEaMEatZameazZayzasMaEeaEeaEeaEeaEeaEeaEeazXapPaCLazXaaaaaeaaaaaeaaaaaaaaaaaeaaaaaaaaaazYaCQazYaEjaCVaEiaCVaMFaGLaCVaLHazYaCVaMGazYazYaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaanRaMHaMIaFEaBDaBDaMJaMKaMLaMKaMKaBDaMMaMNaLPaMOaHaaMPaMQaMRaBDaMSaMTaMUaMTaMVaBDaMWaMXaHnaMYaMZaNaaNbaNcaNdaHnaNeaNfaNgaNhaNiaHvaKxaKCaJbaNjaNkaJbaJbaJbaNlaJbaJbaJbaKCaJbaJbaJbaJbakyakyalgakyakyakyaNmaNnaNoakyakyakyalgakyaNpaNqakyapyaHCanlamyaFYaNranlanlanlaFYaNranVaNsaCaaNtaNuaxSaNvaNwaNxajQazHahvaNyaNzaNAayiaNBayiasHasHasHaNCaNDaNEaNFaNFaNGaNFaNFaNFaNHaNIaNJamcatRaNKaNLaNMatZameazZayzcCqazXazXazXazXazXazXazXazXapPaIbaCKazXazZazZazZazZazZazZazZazZazZazXazYaCQazYazYaGGaCPazYazYazYazYazYazYaCVaCSaCVazYaaaaabaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaabaaaanRaNNaNOaBDaNPaNQaNRaNSaNTaNUaNUaNVaNUaNWaNXaNYaNZaIxaIxaIxaOaaObaOcaOdaOeaOfaOgaOhaOiaOjaOkaOlaOmaOnaOoaOpaOqaOraOsaOtaOuaOvaOwaOxaOyaOzaOAaOBaOzaOzaOzaOzaOCaOzaOzaOzaODaOzaOzaOzaOzaOzaOEaOFaOGaOHaOIaOJaOHaOHaOKaODaOzaOzaOLaOzaOMaONaOOaOPaOQaOPaORaOSaOPaOPaOPaOTaOUaOVaOPaOWaOPaOXavqaOYaOZakLalSahvaPaajUawMahvaPbaPcaPdaPeaMzaMzaPfaPgaDSaDSaPhaDSaPiavyaPjaPkaPlayvaywaPmaMEaMEatZameazZcLtcIUaPpaPpaPpaPpaPpaPpaPpaPpaPqarVarVaPrarVarVaPsaPpaPtarVarVaPuaPvaPsaPwaPxaPyaPyaPzaPyaPyaPyaPAaPyaPyaPyaPyaPBaPCazYaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanSaPDaPEaBDaPFaPGaPHaPIaPJaPKaPLaPMaPMaPNaPOaPPaPQaKbaKbaKbaPRaPSaPTaPUaPVaPSaPRaPWaPXaPYaPZaQaaQaaQbaQcaQdaQeaQfaQgaQhaQaaQaaQiaQjaQkaQlaQmaQnaQoaQpaQpaQpaQqaQraQpaQsaQtaQuaQvaQwaQlaQxaQyaQzaQzaQzaQzaQzaQzaQzaQAaQBaQlaQlaQCaQlaxSaQDaQEaQFaQGaQHaQIaQJaCaaCaaQKaQLaQMaQNaQOanlanlaQPaQPaQPaQPaQPaQPaQPaQQajUawMahvaPbaCLasHaQRaQSaQTaQUaQVaQWaQXaQYaDSaQZaRaaRbaRcatRameatZatZatZatZatZameazXayzasMazXazZazZazZazZazZazXazXaPbazXazXazXazXazXaRdazXaReaRfaRgaRhaRhaRiaCPaRjazYaMFaRkaCVaRlaRmaJUaCVaCVaCPazYaRnaRoazYazYazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaanRaRpaRqaBDaBDaDeaRraRsaBDaBDaBDaBDaBDaBDaBDaRtaRuaRvaMQaMRaBDaRwaRxaRyaRxaRzaBDaRAaRBaHnaRCaRDaREaRFaRGaRHaHvaRIaRJaRKaRLaRMaHvaRNaROaRPaRPaROaRQaRPaRRaRSaRTaRUaRVaRVaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXaRXaRXaRXaRYaRZakyaSaaSbaScakyakyakyakyaSdaSdaSdaSeaSfaSgaSdaSdaSdaShaSiaSjaSkaSlaSmaQPaSnaydaSoahvaPbaCKasHasHaSpaSqayuaSraSpaSqayuaPlayuaPlayuaSratRameamcameameameamcameazXayzasMameamcamcameamcamcameazXaSsazXaStapPaStapPaRdazXaSuaSvaSwaCLaSxaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyaSyazYazYazYaRnaSzazYaSAaSBazYazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaaanRaqhaFDaBDaSCaSDaSEaSFaSGaLPaSHaSIaBDaSJaBDaLQaLRaBDaLPaLPaBDaBDaLPaLPaLPaBDaBDaSKaLUaLVaHnaHnaHnaHnaSLaSMaHvaHvaHvaHvaHvaHvaHvaKxaROaSNaSOaSPaSQaRPaRRaRSaSRaRUaRVaSSaSSaSSaRVaRWaSTaSUaSVaSTaSWaSTaSXaSYaSTaSZaTaaTbaTcaRXaRYaKFakyaTdaTeaTfakyaTgajDakyaThaTiaTjaTkaTlaTmaTnaToaQKaTpaTqaTraTsaTtaTuaTvaPaajUawMahvaPbazXameameaTwamcaTxameaTwamcaTxameaTxamcaTxameameameazXazXazZazZazXazXazXayzavMamcaTyaTzaTzaTzaTAamcazZaPbazZapPaTBapPapPaRdazXaTCaTCaTCaTCaTCaSyaTDaTEaTFaTGaTHaTIaTJaTKaTLaTMaTNaTOazYaTPaTQaTRaTSaTTaTUazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeanRanRanRanRanRaqhaFDaBDaTVaTWaTXaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUiaUjaUjaUkaUlaUlaUmaUnaUjaUoaUpaUqaUraUsaUtaUuaUjaUvaUwaUxaUyaUzaQlaQxaQlaQlaUAaROaRPaRPaSPaUBaRPaRRaRSaSRaUCaRVaUDaUDaUEaRVaRWaSTaUFaUGaUHaUIaUHaUJaUKaSTaSZaULaUMaUNaRXaRYaUOakyaUPaUQaURakyakJaUSaOMaUTaUTaUUaUVaUWaUXaOPaUYaUZaVaaVbaVcaVdaVeaVfaTvaPaajUawMahvaPbazXamcatZaVgatRaVhatZaVgatRaVhatZaViatRaVjatZamcazXaCKaVkapQapRapRapRapRaVmavMamcaVnaVoaVpaVqaVramcazZaPbazXaStapPaStazXaRdaVsaTCaVtaVuaVvaVwaSyaVxaVxaVyaVzaVAaVBaVCaVDaVEaSyaTNaTNazYaRnaVFaCPaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaanRaVHaVIaVJanRaqhaFDaBDaVKaVLaVMaVNaVOaPOaVPaVQaVRaVSaVTaVUaVVaVWaVWaVXaVYaVZaWaaWbaWcaWdaWeaWfaWgaWhaWiaVWaWjaWkaWlaWmaWnaWoaWpaWqaWraWqaWsaWtaWuaWvaWwaWxaWyaRPaRRaRSaSRaRUaRVaWzaWAaWBaRVaRWaWCaSTaSTaWDaWEaWFaSTaSTaWGaSZaWHaWIaWJaRXaWKaWLakyaWMaWNaWOakyaWPatGakyaWQaWRaWSaWTaWUaWVaWWaWXaWYaWZaXaaXbaXcaXdaXeaTvaPaajUawMahvaXfazXameatZaXgaXhaXiatZaXjaXkaXlatZaXmaXnaXoatZameazXaSvaXpaXqaPpaPpaPpaPpcQMcQLameaVnaXsaXtaXuaVrameazXaPbazXazXapPaCKazXaRdapPaXvaXwaXxaXyaXwaXzaVxaVxaXAaVxaXBaXCaXDaVxaVxaSyaXEaXFazYaRnaSzazYaVGaCVaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaanRauqaXGaVJanRaXHaFDaBDaXIaXJaXKaXLaXMaLPaXNaXOaXPaXPaXQaXRaXSaXPaXPaXPaXTaXUaXVaXWaXXaXYaXTaXTaIQaXZaYaaIQaYbaYcaYdaYeaYcaYcaYcaYcaYcaYcaYcaKxaRPaRPaRPaSPaUBaRPaYfaYfaYgaYhaYiaYjaYkaYlaYmaRWaYnaWCaYoaYpaYqaYraYsaWGaSZaSZaSZaYtaYuaRXaYvaYwaYxaYyaYzaYAaYxaYwatGakyakyakyakyaYBaYBaYBakyakyakyaShaYCaYDaYEaYFaYGaQPaPaajUawMahvaPbazZameatZaYHaYIaYHatZaYJaYKaYJatZaYLaYMaYNatZameazZaSwaYOayzaYPaYPaYPaYPaYPaYPaYPaYQaYRaYSaYTaYUaYPazXaXfazXaYVaYWapPaFxaYXaYYaTCaYZaZaaZbaZcaSyaVxaZdaZeaVxaZfaXCaZgaZhaVxaSyaTNaZiazYaZjaSzazYaZkaTTaZlazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaanRaoqauqaZmanRaqhaZnaBDaBDaFFaZoaBDaBDaBDaBDaBDaXPaZpaZqaZraZsaZtaZuaZvaZwaZxaZyaZzaZAaZBaZCaXTaZDaZEaZFaZGaZHaYcaZIaZJaZKaZLaZMaZNaZOaZNaYcaKxaRPaWvaZPaSPaZQaRPaZRaYlaZSaZTaZUaZVaZWaYlaZXaRWaZYaZZbaababbacbadbaebafbagbahbaibajbakaRXaYvaYwbalbambanbaobapaYwatGakybaqbaqbaqatwatwatwbarbasbatakybauaQPaQPaQPaQPaQPbavajUbawahvaPbazZameatZaYHbaxaYHatZaYJbayaYJatZaYNbazaYNatZameazZapPaYOayzaYPbaAbaBbaCbaBbaBbaDbaEbaFbaGbaHbaIaYPbaJbaKaRgaRhbaLaRhaRhaRiaTCaTCbaMbaNbaOaTCaSyaVxbaPbaQbaRbaSbaTbaUbaVaVxaSybaWbaXazYaRnbaYazYbaZbbaaCVazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaanRaxmauqausbbbbbcbbdbbearjbbfbbgbbhbbibbjarjbbkbblbbmbbnbbobbpbbpbbqbbrbbsaUybbtbbubbvbbwbbxbbybbzbbAbbBbbyaYcaYcbbCbbDbbEaZNbbEaZNbbEaZNaYcaKxaRPaRPaRPaSPaUBaRPaZRaYlbbFbbGbbHbbIbbJaYlbbKaRWbbLbbMbbNbbObbPbbQbbRbbSaSZbbTaSZbbUbbVaRXaYvaYwbbWbbXbbYbbZbcaaYwatGakyatwatwatwatwatwatwatwatwatwakybcbbccajDbcdbcdahtaPaaJwbceahvaPbazXamcatZatZatZatZatZatZatZatZatZatZatZatZatZamcazXapPaYOayzaYPbcfbcgbchbcibcjbckbclbcmbckbcnbcoaYPbcpbcpbcpbcpaPbazXaCLazXaTCbcqbcraZaaZbbcsaSybctbctbctbctbcubcvbctbctbctaSyaTNaZiazYaRnaSzazYaZkaTTbcwazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaabaaaaaaanRbcxbcyauqanRauqbczbcAaAmbcBbcCbcDbcEaAmaAmbcFbcGbcHbcIbcJbcKbcLbcMbcNbcObcPbbtbcQbcRbcSaIQbbzbcTbcUbcVbbybcWaYcbcXbcYbcZbcZbcZbcZbcZbcZbdabdbaRPaWvbdcbddbdeaRPbdfaYlbdgbdhbdibdjbdkaYlbdlaRWbdmaSTaSTbdnaUHbdoaSTaSTbbSbdpbdqbdrbdsaRXaYvaYwbdtbdubdvbdwbdxbdyatGakybdzbdzbdzbdzbdAbdBbdBbdBbdBakyajDaAGajDalSbdCahvaPaajUbdDahvaPbazXameamcameameameamcameameameamcameameameamcameazXapPaYOayzaYPbdEbaBbaBbdFbaBbdGbdHbdHbdIbaBbdJaYPbdKbdLbdMbcpaPbaCKapPbdNaTCbdObdPbdQbdRbdSaSybdTbdUbdUbdUbdVbdWbdUbdUbdTaSybdXbdYazYaRnaSzaCPaVGbdZaMFazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeanRanSanRanRanRauqbeabebbecbedbeeauqbefauqauuauvaXPbegbehbcHbeibcHbejbekbelbemaKsbenbeobepaIQbbzbeqberbesbbybetaYcbeuaZNbbEaZNbbEaZNbbEaZNaYcaKxaRPaRPaRPaSPaUBaRPbevaYlaYlaRUbewbexbeyaYlbezaRWaSTbeAbeBaUHbeCaUHbeDbeEaSTbdpbeFbeGbeHaRXaYvaYwbeIbeJbeKbalbeLaYwatGakyakyakyakyakyakyakyakyakyakyakyajPbeMbeNbeObePbeQbeRbeSbeTbeUaPbazXazXazXbeVarZarZarZarZarZarZarZarZarZarZarXarXarXbeWbeXbeYaYPbeZbfabfbbfcbfdbfebffbfgbfgbfhbfiaYPbfjbfkbflbcpaPbazXapPbfmaXvaXwbfnbfobfpbfqaSybfrbdUbdUbdUbfsbftbfubfubfvaSybfwaZiazYaRnaSzazYbfxaMFaMFazYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaeanRauqbfybefbfzbfAaweauqbfBbfCbfDbfEaXPbfFbfGbfHbfIbfJbfKaZvbfLbfMbfNbfObfPbfQbfRbbzbfSbfTbfUbbybfVaYcbfWbfXbfYbfZbgaaZNbgbaZNaYcaKxaRPaWvbgcaSPaSQaRPaZRaYlbgdaRUaYkbgebgfaYlbggaRWaSTbghbgiaSTbgjaSTbgkbglaSTbgmbgnbeGbgoaRXaYvaYwbgpbgqbgrbgsbgtaYwatGbguajQajQajQakLakKbgvajQajQajQajQajQajQajDajGajSahvbgwbgxbgyahvaReaRhbgzaRhbgAbgBaqJaqJaqJaqJaqJbgCaqJaqJaqJaqJaqJaqJaqJbgDbgEaYPbgFbaBbgGbgHbdHbgIbgJbgKbgLbgMbgNaYPbgObgPbgQbcpaPbazXbgRbgSaTCbgTaXwbgUaZbbgVaSybgWbgXbgYbgZbhabhbbhcbdTbdTaSybfwbdYazYaRnaTQaTRbhdbhebhfazYaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaanRanRanRauqbfybefbhgbhhbhibhgbhgbhgbhgbhgaXPaXPaXPaXPaXPaXPaXPbhjbhkbhkbhlbhmbhnbhkbhkbhobbybbybbybbyaYcaYcaYcbhpaYcaYcaYcaYcaYcaYcaYcbhqaRPaRPaRPaRObhraRPaRVaRVaRVbhsbhtbhuaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXbhvbhwaRXaRQaYwbhxbhybhzbhybhAaYwbhBbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhCbhDbhEbhFbhCbhGbhGbhGbhGbhHbhIbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGaYPaYPaYPbhJbhKaYPaYPaYPaYPaYPaYPaYPaYPbhLbhMbhNbcpbhOazXazXazXaTCbhPbhPbhQbhRbhPaSyaSyaSyaSybhSbhTbhUaSyaSyaSyaSybhVbhWazYaRnbhXazYbhYbhZazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaanRanRanRauqbfybefbhgbhhbhibhgbhgbhgbhgbhgaXPaXPaXPaXPaXPaXPaXPbhjbhkbhkbhlbhmbhnbhkbhkbhobbybbybbybbyaYcaYcaYcbhpaYcaYcaYcaYcaYcaYcaYcbhqaRPaRPaRPaRObhraRPaRVaRVaRVbhsbhtbhuaRVaRVaRVaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRWaRXbhvbhwaRXaRQaYwbhxbhybhzbhybhAaYwbhBbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhgbhCcQPcQScQQbhCbhGbhGbhGbhGbhHbhIbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGbhGaYPaYPaYPbhJbhKaYPaYPaYPaYPaYPaYPaYPaYPbhLbhMbhNbcpbhOazXazXazXaTCbhPbhPbhQbhRbhPaSyaSyaSyaSybhSbhTbhUaSyaSyaSyaSybhVbhWazYaRnbhXazYbhYbhZazYazYaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabaaaaaaaaaaaeaaaaaaaaaaaaaaeaaaaaaaaeaaeaaeaaeanRbiaanRbibbfybicbhgbidbiebifbigbigbihbiibigbijbijbijbijbijbijbijbikbilbimbilbinbilbiobipbiobiqbiobiobirbiqbijbimbiobisbitbigbigbigbigbiubiibigbigbivbiwbixbiybigbizbiAbiBbiCbixbigbigbigbigbiDbiEbigbiFbigbigbigbiybiGbiGbiHbiIbiGbiJbiGbiJbiGbiKbiLbiMbiNbiObiLbiLbiLbiPbiLbigbigbigbiibigbihbigbigbigbigbiybiQbiRbiSbiTbiUbiVbiWbiWbiWbiXbiYbiWbiWbiZbjabjbbiWbiWbiWbiWbiWbjcbiWbiWbiWbjdbjebiWbjfbjgbjhbiWbiVbiWbiWbjdbiWbiWbiWbjibjjbjkbiWbjlbiWbjmbiWbjnbiWbjobjpbjqbiWbjrbjsbjtbjubjvbjwbjxbjybjzbjAahvbjBbjCaCPbjDbjEbjFbjFbjFbjFaaaaaaaaeaaeaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvafvarhauqarhauqbfyaxmbhgbjGbjHbjIbjIbjIbjIbjJbjIbjKbjIbjIbjIbjIbjIbjIbjLbjIbjMbjIbjNbjIbjIbjObjIbjIbjIbjIbjJbjIbjKbjMbjIbjIbjIbjIbjIbjIbjIbjPbjQbjRbjRbjSbjRbjTbjUbjRbjRbjQbjVbjWbjXbjRbjRbjRbjRbjRbjYbjRbjRbjRbjRbjRbjUbjRbjRbjZbjSbjRbkabjXbjQbjRbkbbjIbjMbjIbkcbjIbjIbjIbjIbjIbjIbjIbjIbjLbjIbjIbjIbjIbjIbjIbkdbkebkfbkgbkhbkebkibkjbkjbkjbkkbkjbkjbklbkjbkmbknbkjbkjbkjbkjbkjbkjbkjbkjbkjbkobkjbkjbkjbkpbkqbkjbkrbkjbkmbknbkjbkjbkjbkqbklbkjbkjbkpbkjbkpbkjbkjbkjbkjbkjbkqbksbktbkubkobkjbkjbkjbkqbkjbkjbkvbkwbkxbkybkwbkzbkAbkBbkCbkDbjFaaaaabaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeafvaaeaaeaaaanRanRanRauBbkEbkFbhgbkGbkHbkIbkJbkJbkKbkLbkMbkNbkJbkJbkJbkObkJbkJbkJbkJbkPbkQbkRbkSbkTbkUbkTbkTbkVbkTbkWbkTbkXbkYbkTbkTbkZbkTbkTbkTbkTblablbblcbldbkXbkTblebkUblfblgbkWblhblibljblfbkTblkbkTbkTbllbkTbkTbkTbkTblmbkUbkTblnbkTbkXbkTblobkXblpblqblrblsbkYbkTbkXbkTbkTbkTbkTbkTblhblhblhbkTbltblubkVbkTbkTbkTbkUblvblwblxblyblzblAblBblCblDblEblFblBblGblHblIblJblKblBblBblCblBblBblLblBblBblBblBblBblBblBblMblNblAblOblPblQblBblBblBblMblRblSblOblTblUblBblOblTblUblBblOblVblTblWblXblYblZbmabmbbmcblZbmabmbbmdbmebmfbmgbmhbmibmjbmkbmlbjFbjFbjFbjFbjFbjFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7807,7 +7807,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbpRbyrbLZbLZbLZbMabwsbwsbwsbwubwvbnCbnCbnCbwwbnCbMbbwybnCbnDbMcbMdbqabMebMfbMgbmtbMhbMhbnKbnLbIMbIMbnSbnSbMibMjbnSbMkbmtbMlbwJbMmbMnbnXbEtbKubMobMpbMqbMpbMrbKubAFbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbAGbMsbAGborborboqborbosborborbMtbmHbMubmHbmHbmHbmIbMvbmIbmHbMwbmHbMxbMyboOboKboFbMzbMzbMzbMAbMzbMzbMzbMBbtnameamebxjbJwbJwbxlbJwbJwbxjameameamcameamcbxmbxnbxoboQbMCbJCbMDbMEbMFbMGbMHbJCbMIbMJbMKbMLbMMbMNbMObMPbMKbMQbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbtCamebzYbNdbNebNfbNgbNhbNibNjbNkbNlbNmbDFbNnbNobNobNobNpbNqbNrbNsbNtbNtbLLbNubNvbNwbNxbNybLLbNzbNAbNBbNCbNDbNEbNFbyhbyibNGbykbykbykbykbykbypbwfaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbpRbyrbLZbAsbNHbpPbNIbNIbNJbNKcRibuhbuhcRjbNNbNObNPbNQbNObNRbnDbNSbqabMebNTbsmbsnbsobsobspbsqbNUbNUbNUbNVbNWbnSbNXbNYbmtbsBbNZbsCbsBbOabObbKtbOcbOdbOebOfbOgbKtbOhbOibOjbOkbOibOlbOmbnXbnXbOnbOobmHbOpbopbOqbOrborborboqborbosborborborbOsbOsbOtbOubOvbOwbOxbOybOwbmHbmHboKbOzboObOAbOBbMzbOCbODbODbOEbOFbMzbMBbtnameameamcameameameameameamcameamebtnbtnbtnbhCbhCboPboQbMCbJCbOGbMFbMFbOHbOIbJCbOJbOKbOLbOMbONbOObOPbOQbMJbORbJGbOSbOTbOUbOUbOUbOVbOWbOWbOXbOYbOZbtCbPabPbbPcbPdbPebPfbPfbPfbPfbDDbPgbPhbPfbPibNtbNtbPjbPkbPlbPmbPnbNtbPobLLbPpbPqbPrbPsbPtbPubPvbPwbPxbPybPzbPAbAkbPBbAmbwfbykbykbPCbPDbPEbPFbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbpRbyrbyrbyrbyrbPGbNJbNJbPHbpTbnCbnCbnCbnCbPIbPJbPKbPLbPMbPNbPObPPbqabuqbqcbPQbutbuubuubuvbPRbIMbIMbnSbPSbPTbPUbPVbPWbmtbnXbnWbnXbnXbnXbEtbKubPXbPYbPZbQabQbbKtbQcbnXbQdbsCbyIbqkbQebsCbsCbsCbsCbmHbQfbCFbOqbQgbsVbsVbQhbsVbHebsVbsVbsVbQibQibQibQjbQkbQlbQmbQnbQobmHbQpboKbQqbQrbQsbQtbMzbQubQvbQwbQxbQybMzbMBbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnbtnboKbQzbQAbhCboPboQbQBbJCbQCbQDbQEbQFbQGbJCbQHbMLbMLbJGbQIbQJbQKbQLbQMbQNbJGbtCbQObQPbQObQObQObQObQQbQObtGbtCbtCbQRbQSbQTbQUbQVbQWbQWbQWbQWbQXbQYbQZbRabRbbRcbRdbRebRfbRgbNtbNtbNtbNtbLLbRhbRibRjbRkbRlbLLbNzbRmbRnbRobRpbRqbwfbwfbBNbwfbRrbRsbBNbwfbwfbwfbwfaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbRtbpSbpRbyrbRubpPbRvbRvbRvbpTaaaaaeaaabnCbRwbRxbRybRzbRxbRAbnDbRBbRCbRDbqcbREbmtbRFbnSbnKbnLbqgbqgbqgbqgbqgbqgbqgbqgbRGbnXbnXbnXbnXbEsbEtbKtbOcbRHbRIbRJbOgbKubRKbRLbRLbRLbRLbRMbRNbRObRObRPbnXbmHbOpbopbOqbRQbqFbqFbqGbqFbqHcCqbqFbqFbRRbRRbRRbRRbRSbRTbRUbRUbRVbmHboKboKboKboObRWbRXbMzbRYbRZbODbSabSbbMzbScbSdbzebSebzebzebSfbzebzebzebSgbzebzebzebShbzebzebSibSjbSkbSlbSmbSnbSobSpbSqbSrbJDbSsbStbSubJGbSvbSwbSxbSybMQbSzbJGameamcameamcameameamcameamcameazYbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSKbSLbSMbSNbJTbSObSObSPbSQbSRbSSbSTbSTbSTbLLbSUbSVbSWbPtbSXbLLbSYbSZbTabudbTbbTcbwfbTdbTebTfbTgbThbwfaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpPbRtbpSbpRbyrbRubpPbRvbRvbRvbpTaaaaaeaaabnCbRwbRxbRybRzbRxbRAbnDbRBbRCbRDbqcbREbmtbRFbnSbnKbnLbqgbqgbqgbqgbqgbqgbqgbqgbRGbnXbnXbnXbnXbEsbEtbKtbOcbRHbRIbRJbOgbKubRKbRLbRLbRLbRLbRMbRNbRObRObRPbnXbmHbOpbopbOqbRQbqFbqFbqGbqFbqHbqFbqFbqFbRRbRRbRRbRRbRSbRTbRUbRUbRVbmHboKboKboKboObRWbRXbMzbRYbRZbODbSabSbbMzbScbSdbzebSebzebzebSfbzebzebzebSgbzebzebzebShbzebzebSibSjbSkbSlbSmbSnbSobSpbSqbSrbJDbSsbStbSubJGbSvbSwbSxbSybMQbSzbJGameamcameamcameameamcameamcameazYbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSKbSLbSMbSNbJTbSObSObSPbSQbSRbSSbSTbSTbSTbLLbSUbSVbSWbPtbSXbLLbSYbSZbTabudbTbbTcbwfbTdbTebTfbTgbThbwfaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabTibTjbwsbTkbTlbwsbnAbwsbwsbTjbTmaaaaaeaaabnCbnCbnCbnDbnDbnDbnDbnDbnDbnDbnFbnGbnHbmtbTnbTobnKbTpbTqbTrbTsbTtbTubPVbTvbnNbmtbTwbTwbTxbnXbnXbEtbKubTybTzbTAbTBbTCbKtbqkbTDbnXbTEbTEbTEbTEbTEbTEbTFbOibTGbTHbTHbTIbTJborborboqborbTKbTHbTHbTLbTMbTNbTObTPbTQbTRbTSbTTbOwbTUboKboKbTVbTWboKboFbMzbMzbTXbTYbTZbMzbMzboMboKboKbUaboJbTEbTEbTEbTEbTEbUbboKboKboKbTVbUcboKbhCboPboQbUdbJCbUebUfbUgbUhbUibJCbJGbJGbJGbJGbMQbMQbUjbUkbUlbUmbJGbUnbUobUobUobUobUobUobUobUobUnbUnbUpbUqbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbzWbJTbJTbJTbJTbJTbJTbJTbJTbJTbJTbLLbUrbUsbUtbUubUvbLLbwfbwfbwfbudbUwbUxbwfbBNbwfbwfbwfbwfbwfaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbUybUzbyrbUAbUBbUCbUDbpTaaaaaeaaeaaebUEbUFbUGbUHbUGbUHbUGbUIbUJbTEbUKbULbUMbmtbmubmtbmvbmwbmtbmubmtbmtbmtbmtbmtbmtbmtbTEbTEbTEbTEbTEbUNbKubUObUPbUQbURbUObKubUSbTEbTEbTEbUTbUUbUVbUWbTEbUXbTEbmHbmHbmHbmHbmHbmHbmIbmJbmIbUYbmIbmLbmHbmHbmHbmHbmHbmHbmHbmHbmHbmHbmHbTEbTEbTEbTEbTEbmNbTEbUZbVabVbbVcbVdbTEbTEbTEbTEbTEbTEbTEbVebVfbVgbTEbTEbhCbrdbhCbhCbhCbhCbhCbVhbVibVjbJCbJCbJCbJCbJCbVkbJCbVlbVmbVnbJGbJGbJGbJGbJGbJGbJGbJGbVobVpbVpbVpbVpbVpbVpbVpbVpbVqbUnbVrbVsbUnbUnaaaaaeaaaaaeaaaaaaaaaaaaaaaaaaaaeaaaaaeaaabVtbVubVtaaaaaeaaebLLbVvbVvbVvbVvbVvbLLafvbVwbVxbVwbVxbwfbVybVzbVzbVAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpTbVBbUzbyrbyrbyrbVCbVDbpTaaaaaaaaeaaabUEbVEbVFbVGbVFbVGbVHbUIbVIbTEbVJbVKbVLbVMbVMbVNbVObVPbVQbVMbVMbVMbVRbVMbVMbVSbVTbVMbVMbVMbVMbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbVMbVMbVMbWebWebWebWebVSbWfbVMbWgbVMbVSbVMbVUbWhbWibVObWebWjbWkbVMbVMbVMbVMbVMbVSbVSbVMbVMbWlbVMbVUbWgbVMbVMbVMbVMbWmbVMbVMbVObVMbWnbVMbWobVMbWpbVMbVMbVMbWqbWebWebWebVMbVUbiQbWrbWsbWtbWsbWubWsbWvbCYbWwbWxbWybWzbWAbWBbWCbWDbWEbWFbWFbWGbWHbWIbWGbWGbWGbWGbWGbWJbWGbWGbWKbWKbWGbWGbWGbWGbWLbWMbWNbWObWPbUnbUnbUnbUnbUnbUnbUobUobUobUobUnbUnbUnbUnbUnbUnaaaaaeaaaaaaaaeaaeaaaaaaaaeaaaaaaaaeafvbwfbwfbwfbWQbUwbWRbWSbWTbWUbWVaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7818,7 +7818,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaebUIbUIbUIccWccXccYccWccWccWccWccWccZbZIcdacdbcdacdccdacdccbgcddcbacdebUIcdfcbjcdgcdgcdgcdhcbjcdicdjcdkcdlcdmbKtcdncdocdpcdqcdrbKucbsbZWcdscdtcducdvcducducbzcdwbZWcdxcaacdycdzcdAcdBcdCcdDcdEcdFcdCcdGcdHcdIcdJcaacdKcdLcdMcdNcaecbScdOcbUcdPcdQcdRcdScdTcdUcbUcdVcdWcdXccacdYcdZceacebceccedceecefcegcehceicejcekcelcemamcamcameamecenceocepameameamcamcceqcercaEcescaEcetceucevcewcewcewcewcewcexceycezceAceAceBcczcewcewceCcaEceDceEceFceGceEceHceIceJceKccKceLceLceLceMccKceNcaSceOcePceOceOceQceRceSceTccVaaaaaaafvaaeaaeaaeafvaaeaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaccWceUceVceWceXceYceZcfaccZbZIcfbcfccfbcfccfbcfccbgcbhcfdcfebUIcdfcbjcffcfgcfhcficfjcfkcflcdxcfmcfnbKtcfocfpcfqcfrcfsbKucbscftcfucdtcducducfvcducbzcfwbZWcdxcaacaacaacaacaacfxcfycfzcfAcfBcaacaacaacaacaacfCcfDcfEcfFcaecbScfGcbUcfHcfIcfJcfKcfLcfMcbUcfNcfOcfPccacfQcfRcfRcfScfTcfUcfVcfWcfXcfYcfZcgaccfcelcemamcamcamcamecenceocepameamcamcamcceqcercaEcgbcaEcgccewcewcgdcgecgfcewcewcggcaHcghcewcgicgjcgkcglcgmcgncaEcgocgpccDccCccCcgqcgoccCccCccKcgrcgscgtcguccKcgvcaScgwcgxcgycgzcgAcgBcgCcgDccVaaaaaaaaaaaaaaeaaeafvaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWceUcgEcgFcgGcgHcgFcgIcgJcgKcgLcgLcgLcgLcgLcgLcgMcbhcgNcgNbUIcdfcbjcbjcbjcbjcbjcbjcgOcgPcgQcgRcgObKubKubKtbKubKubKtbKucbsbZWcgScgTcgUcducdvcgVcgWcgXbZWcdxcaacgYcgZchacbFchbchcchdchechfcbFchgchhcbNcaachicfDchjchkcaecbSchlcbUchmcfIchnchochpchqcbUcamchrcaoccachschtchuchuchvchwchxchychzchAchBchCccfcelcemameamcchDchDchEchFchGchDchDamcameceqcercaEchHchIcewcewcewcczcewchJchKchKchLchMchNchOchOchPchQchKchKchKchRchSchTchUchVchWchXchYchZciaccKccKccKccJccKccKcibciccidciecifcigcihccVccVccVciiaaaaaaaaaaaaaaaaaeafvaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcijcikcilcimcinccZciocgNcgNcgNcgNcgNcgNcbgcbhcQLcgNbUIcipciqcirciscisciscisciscitciucivcivcivcivciwcixciycizciAciBciCciDciEciFciGciHciIciJciKciLciMcaacdycdzcdAciNcdCciOciPciQcdCciRcdHcdIcdJcaaciSciTcagcaecaecbScdOcbUciUciVciWciWciWciWciXciYciZcjacjbcjccjdcjecjfcjgcjhcjicjjcjkcjlcjmcjnccfcelcemameamechDcjocjpcjqcjrcjschDameameceqcercaEchHcjtcewcewcjucjvcjwcjxcjxcjycjzcjAcjBcjCcjDcjxcjEcjxcjxcjFcjGcjHcjIcjJcjKcjLcjLcjLcjLcjLcjMcjNcjOcjNcjNcjNcjPcaScjQcjRcjScjTcjUcjVcjWcjXcjYaaaaaaaaaaaaaaaaaeaaeaaeaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcijcikcilcimcinccZciocgNcgNcgNcgNcgNcgNcbgcbhcgNcgNbUIcipciqcirciscisciscisciscitciucivcivcivcivciwcixciycizciAciBciCciDciEciFciGciHciIciJciKciLciMcaacdycdzcdAciNcdCciOciPciQcdCciRcdHcdIcdJcaaciSciTcagcaecaecbScdOcbUciUciVciWciWciWciWciXciYciZcjacjbcjccjdcjecjfcjgcjhcjicjjcjkcjlcjmcjnccfcelcemameamechDcjocjpcjqcjrcjschDameameceqcercaEchHcjtcewcewcjucjvcjwcjxcjxcjycjzcjAcjBcjCcjDcjxcjEcjxcjxcjFcjGcjHcjIcjJcjKcjLcjLcjLcjLcjLcjMcjNcjOcjNcjNcjNcjPcaScjQcjRcjScjTcjUcjVcjWcjXcjYaaaaaaaaaaaaaaaaaeaaeaaeaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWcjZckackbckcckdckeckfcbackgckhckgckhckgckhckickjcfdcfebUIcdfckkcklckmckncknckmckmckockpckqckrckscksckscktcksckuckvckwbZWbZWbZWbZWbZWbZWbZWbZWbZWbZWckxcaacaacaacaacaackyckzckAcfAckBcaacaacaacaacaackCckDckEcdOcdOcbScdOckFckGckHckIckJckKckLckMckNckOckPckQckRckSckTckUckVckWcjbckXckYckZclaclbccfclccldbztbztcleclfclgclhclicljclebztbztclkcercaEchHcllclmclncaEcaEcaEcaEclocaEclpcaHclqclrclscaHcltcltcltclucluclvclwclxclychXchXchXclzchXclAclBclBclCclBclDclEcaScaScaSclFcaSciiciicihciiciiaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeccWclGclHclIclJceZcinbZIclKcfbcfcclLcfccfbcfcclMclNclOclPbUIclQckxcgOamcamcameamcclRclSclRclRclTclRclSclRclRclUclVclWclXclYclYclZcmacmbcgOcmccmdcmecmfcmgcaacbCcmhcmicbFcmjcbHcbIcbJcmkcbFcmlcmmcmncaacmocmpcmqcmrcmrcmscdOcbUcmtcmucmvcmwcmxcmycmzcmAcmBcmCcmDcmEcmFcmGcmHcmIcmJccacmKcmKcmKcmKcmKcmKccgcmLamccmMchDcmNcmOcmPcmQcmRchDamcamccmScmTcaEcmUcmVcmVcmVcmWcmXcmYcmZcnacaEcnbcnccndcnecnfcngcltcnhcnicnjclucnkcnlcnmccCccCccCccCccCccCccCccCccCccCcnncnocgvclvcnpcnpchZciaccCcnqchZcnrcnsaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccWccWccWcntcnuccWcnvccWcnwbUIcbebZIbZIcnxcnybZIcbgcbhbZIcbebUIcdfckxcgOamcameamcamcclRcnzcnAcnBcnCcnDcnEcnFclRcnGcnHcnIcnJcnKcnKcnLcnMcnNcnOcnPcnQcnQcnRcnScaacdycdzcdAcnTcnUcdDcnVcdFcdCcnWcdAcnXcdycaacnYckDcnZcdOcdOcoacobcbUcoccodcoecofcogcohcoicojcokcolcomconcoocopcoqcorcoscotcoucovcowcoxcoycozcoAcoBbKWbKWcoCcoDcoEcoFcoGcoHcoCbKWbKWcoIcoJcaEcaEcaEcaEcaEcaEcaEcaEcoKcoLcoMcoNcoOcoPcoQcoRcoScoTcoUcoVcoWclucoXcoYcoZcoXaaaaaeaaaaaaaaaaaaaaaaaaccCchZcpacpbclBcpccpdcpecpecpfcpecpgchZcnsaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -7831,20 +7831,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecyCcyDcdlcdlcyCaaeaaaaaaaaecgOcdlcdlcqVcgOaaaaaaaaacyEcyEcRlcyEcyEaaaaaaaaacgOcdlclRclRclRclSclRclRclRclRclRcnGcwhcyGcnGcnGcnGcpFcrrcdlcyHcwlcxCcxDcxDcxDcxDcxDcxCcyIcyJcyKcyLcyKcyMcyNcyOcyPcwlcdOcwrcpPccgcyQcpPcpPcpPcpQcpQcyRcyScpQcxUcxUcxUcxUcyTcyUcyVcyWcyXcyXcyYcyZcyXcrTcrUczaczbczcczdczecrVccgczfczgczgczgczgczgcpPcnscnscnscnscnsccCcclcqoczhcziczjczkcqoczlczmczncznczoczpczqczrczscztczuczuczvczwczxczyczvaaaaaaaaaaaaaaeaaaczzcqIczAcqIczBaaaafvafvafvaaeaaaaaaaaaaaaczCczCcRmczCczCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncdlczEczFcxnaaeaaeaaaaaecgOczGczHczIcgOaaaaaaaaaaaecyEczJcyEaaeaaaaaaaaacgOcvLczKcdlczHcdlcyDcdlczLcdlczKcdlcdlczMczNczOczPczQczRcwlcwlcwlcxCcxDcxDcxDcxDcxDcxCcxFczSczTczUczUczVczWczXczYcwlcdOczZcpPccgcpPcAacqdcqdcAbcAccAdcAecAfcAgcAgcAgcAhcAicAjcAkcAlcAlcAmcAncAocAlcApcAqcArcAscAtcAucAvcAwcAxcAyameameamcamcamcamcamcamcamcameamecnscclcqocqocAzcAAcqocqocABczmczncznczncACcADcAEcAFcAFcAFcAFcAGcAHcAIcAJczvaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaaaaaaaeczCcAKczCaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncALcAMcANcxnaaaaaeaaeaaecgOcgOcpscgOcgOaaaaaaaaeaaecyEcRlcyEaaeaaeaaaaaecgOcgOcgOcpscpscpscgOcpscpscpscgOcgOcgOcAOcgOcgOcgOcAPcrrcwlcAQcARcAScxDcxDcxDcxDcxDcAScxFczScATcAUcAUcAVcAWcAXcAYcwlcdOcwrcpPccgcpPcAZcBacBbcBccBdcBecBfcBgcBecBecBecBhcBicBjcBkcBecBecBecBlcBmcBecBncBocBpcBqcBrcBscBtcBucBvcBwamcameameamcamdamdamdamccBxameamccnscclcqucBycBzcBAcBBcBCcBDcBDcAFcBEcBFcBGcBHcBIcBJcBKcBKcBKcBLcBMcBNcBOczvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaaaaeaaeczCcRmczCaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncxncxncxncxnaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaacBPaaaaaaaaeaaeaaeaaeaaaaaeaaaaaaaaaaaaaaaaaeaaeaaaaaacgOcBQcgOaaeaaacBRcBScBTcBUcBVcBWcxDcxDcxDcxDcxDcBXcBYcBZcATcAUcCacCbcCccCdcCecwlcCfcwrcpPcCgcpPcChcwrcCicCjcCjcCkcClcClcClcClcClcClcCmcCncCocxUcCpcQMcCrcCscCtcxUcrVcCucCvcCwcCxcCycrVcCzcAyamcameamdamdamdaDxamdamdamdameamccnscclcqucCAczncCBcCCcCDcCEcCFcCGcCHcCGcCGcCIcCJcCKcCLczncCMczvcCNcCOcCPczvaaeaaeaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaeaaeaaaaaacCQaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecxncxncxncxncxnaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaaaaacBPaaaaaaaaeaaeaaeaaeaaaaaeaaaaaaaaaaaaaaaaaeaaeaaaaaacgOcBQcgOaaeaaacBRcBScBTcBUcBVcBWcxDcxDcxDcxDcxDcBXcBYcBZcATcAUcCacCbcCccCdcCecwlcCfcwrcpPcCgcpPcChcwrcCicCjcCjcCkcClcClcClcClcClcClcCmcCncCocxUcCpcRbcCrcCscCtcxUcrVcCucCvcCwcCxcCycrVcCzcAyamcameamdamdamdaDxamdamdamdameamccnscclcqucCAczncCBcCCcCDcCEcCFcCGcCHcCGcCGcCIcCJcCKcCLczncCMczvcCNcCOcCPczvaaeaaeaaeaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaaaaeaaeaaaaaacCQaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaeaaeaaaaaaaaacBPaaaaaaaaaaaeaaeaaaaaaaaeaaaaaaaaaaaaaaeaaeaaeaaeaaecgOcCRcgOaaeaaacgOcCScCTcCUcCVcCWcxDcxDcxDcxDcxDcCXcCYcCZcDacDbcDbcDccAWcDdcDecwlcdOcwrcyQcDfcDgcDhczfcpPcDicDjcCkcDkcDlcDmcDncDlcClcDocDpcDqcDrcDscDtcDucDvcDscDrcDwcrVcrVcrVcrVcrVcrVcDxcDycDwcDrcDrcDrcDrcDrcDwcnsccCccCccCccCcclcqucDzcCKcDAcDBcDCcDDcDEcDFcDGcDHcDHcDHcDIcDJcDKcDLcDMczvcDNcDOcDPczvaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaaaaeaaeaaaaaaaaacDQaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaaaaaaaacBPaaaaabaaaaaaaaeaaeaaaaaeaaaaaaaaaaaeaaeaaaaaaaaaaaeaaaafvaaaaaeaaacgOcdxcwlcDRcDScDTcxDcxDcxDcxDcxDcDTcxFczScDUcDVcDVcDVcDWczXcDXcwlcDYcDZcEacEbcEccEdctjcEecDicEfcCkcEgcEhcEicEjcEkcElcEmcBjcEncDtcEocEpcEqcErcEscEtcEucEvcEwcExcDwcEycEzcEAcEBcECcEDcEEcEFcEGcEHcDwcsnchZchZcEIctUcclcqucqucqucqucEJcqucEKcELcEMcENcENcEOczncEPcENcENcEQcERcyvcyvczvcEScyvaaeaaeaaeafvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaeaaeaaaaaaaaaaaacETaaaaabaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaeaacaaeaaeaaaaaaaaaaaaaaacBPaaaaaaaaaaaaaaaaaeaaeafvafvafvafvafvafvafvafvafvafvafvafvafvafvaaacgOcdxcEUcwlcwlcEVcxDcxDcxDcxDcxDcEVcEWcEXcEYcEYcEYcEYcEYcEZcFacwlcFbcFccFdcFecpPcdOcFfcdOcDicyQcCkcFgcFhcFicFjcFkcFlcFmcFncFocDtcFpcFqcFrcFscFtcFtcFtcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFEcFFcFGcFHcDwcFIcpecFJcFKcFLcFMcFNcFNcFOcFNcFPchZcqucFQcFQcFQcFRcFScFTcFUcFVcFVcFVcDMcFWaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaeaaeaaaaaaaaaaaaaaacETaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecFZaaecFYcGacGacGacGaaaeafvaaaaaeaaeaaaaaaaaaaaaaaaaaaaaeaaeaaeaaaaaacgOcGbcdlcGccwlcEVcxDcxDcxDcxDcxDcEVcwlcGdcGecxFcGfcxFcxFcGgcwlcwlcGhcpPcGicGjcpPcGkcpPcpPcDicGlcCkcGmcGncGocGocGpcClcGqcokcFocDtcGrcGscGtcGucGvcGwcGxcGycGzcGAcDwcGBcDrcDrcDycDwcGCcGDcGEcGFcGGcDwcnsccCcGHccCccCccCcgpccCctUctUcGIcGJcqucFWcFWcFWcGKcRncFWcRocGNcFWcFWcFWcFWaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZafvafvafvaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcdlcgOcwlcEVcxDcxDcxDcxDcxDcEVcwlcwlcwlcwlcwlcwlcwlcHacwlcdOcGhcpPcwrcCzcpPcHbcHccpPcHdcHecCkcGmcGncGocGocHfcClcHgcpUcHhcDrcDrcDwcDwcDwcDwcHicDwcHjcHkcHlcDwccgchlcdOcHmcDwcHncGDcHocDrcDrcDramdccCcGHcnsamccnscHpchZcHqchZchZchZccCaaaaaacFWcHrcHscFWcHtcHucFWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafvafvafvcHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecHDcHDcHDcHDcHEaaecHFaaecHEcHGcHGcHGcHGaaeaacaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcdlcgOamccHHcHIcHIcHJcHIcHIcHKamccpPcHLcdOcHMcHNcHNcHOcHPcHPcHQcpPcwrcCzcpPcpPcpPcpPcpPcpPcCjcxUcxUcxUcxUcxUcxUcHRcpUcFocDtamccHScHTcHUcHVcHWcHVcHXcHYcHZcDwccgcfGcdOcIacDwcIbcIccIdcIecIfcDramdccCcIgcnsamecnscIhchZchZchZchZchZccCaaaaaacIicGKcRncFWcRocGNcIiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaecIjcIjcIjcIjcIkaaecETaaecIkcIlcIlcIlcIlaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacgOcdxcvLcgOamcamcameameameameameamcamccpPcdOcpPcImcIncpPcIocpPcIncpPcyQcIpcIqcpPcHbcIrcpPcIscHbcCjcItcIucIvcIwcIxcIycIzcuPcEncDtamccHScIAcIAcIBcICcIDcIEcIFcIGcDwccgcdOcdOcIHcDwcIIcGCcIJcDtcIKcDramcccCcILcnsamecnscsrchZcIMcINchZchZcIOcIPcIQcIQcIRcIScIQcITcIUcIQcIVcIWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaacgOcdxcvLcgOamcamcameameameameameamcamccpPcdOcpPcImcIncpPcIocpPcIncpPcyQcIpcIqcpPcHbcIrcpPcIscHbcCjcItcIucIvcIwcIxcIycIzcuPcEncDtamccHScIAcIAcIBcICcIDcIEcIFcIGcDwccgcdOcdOcIHcDwcIIcGCcIJcDtcIKcDramcccCcILcnsamecnscsrchZcIMcINchZchZcIOcIPcIQcIQcIRcIScIQcITcRccIQcIVcIWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaeaaaaaaaaaaaaaaaaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdxcIYcgOcgOcgOcpscpscpscpscpscgOcgOcpPcdOcpPcpPcIncFfcyQcIZcJacpPcpPcJbcBvcEccJccEccJdcJecGkcCjcJfcJgcJhcJicJjcJkcJlcJmcFocDtamccHScIAcJncHVcJocHVcJpcJqcJrcDwccgcdOcdOcJscDwcJtcJucJvcDtcJwcDramcccCcJxcnsamccnscsqchZchZchZccEchZcIOcJycJzcJzcJzcJzcJAcJzcJzcJzcJBcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScJEcGUcGVcGWcGXcGYcGYcGZaaeaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcdicmfcJFcmfcJGcdlcdlcvLcdlcdlcJHcdlcJIcdOcJJcdOcdOcdOcdOcdOcdOcdOcJKcJLcJMcJNcJOcJOcJOcJPcJQcJRcJhcJScJTcJUcJVcJWcJXcJYcJZcDwcDwcDwcDwcDwcDwcKacDwcDwcKbcDwcDwcKccKdcGkcKecDwcDrcDrcDtcDrcKfcDramcccCcKgccCccCccCccCccCcKhcKicGIcGJcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcKkcHycETcHzcHAcHBcHBcHCaaeaaecKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecHDcHDcHDcHDcHEaaecGVaaecHEcHGcHGcHGcHGaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgOcgOcgOcgOcgOcgOcpscpscpscpscpscgOcgOcpPcdOcyQcDicDicDicDicDicDicDicKmcKncKncDicDicDicDiczfcCzcCjcCjcCjcCjcCjcCjcCjcCjcKocaocDicKpcqdcqdcqdcqdcKqcKrcqdcqdcqdcqdcKscdOcwtcwrczgamcamcamcavaamdauWamcccCcKtcKuchZchZcKvclvchZchZchZchZcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecIjcIjcIjcIjcIkaaecETaaecIkcIlcIlcIlcIlaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaabaaaaaaaaeaaacpPcdOcdOcDicdOcdOcKwcdOcGkcdOcdOcdOcdOcKxcpPcKycKzcKAcKBcKCcKCcKDcKCcKCcKCcKEcKFcKGcKHcKIcKJcKKcHPcHPcHPcKLcKMcKNcKNcKNcKNcKOcEdcEdcuEcpPcpPccCcnscnscKPcnscnsccCcKQccCcvyccCccCccCccCcgpcaQccCcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRaaeaaeaaeaaeaaeaaeaaecpPcdOckCcKScdOcKTcKUcdOcKVcdOcdOcdOcdOcKWcpPcdOcdOcKXcKYcKZcqdcqdcqdcLacqdcLbcLccLdcLecLbcLfcpPcpPcpPcpPcLgcIncLhcLicLjcpPcLkcLlcLlcLmcLncLncLocLpcLqcLrcLscLtcLocLucgpcxgccCaaaaabccCcLvchZcLwcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcLxcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZaaeaaeaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcdOcdOcDicKwcLycKTcdOcpPcoacdOcdOcLzcLAcyQcKwcLBcpPcdOckDcHbcLCcoacobcLDcDicLEcLFcLGcDicdOcLHcLIcLJcpPcLgcpPcpPcpPcpPcpPcpPcyQcpPcpPcpPcpPccCcnscnscKPcnscnsccCccCccCcvyccCaaaaaaccCclvcqNcLKcIOcLLcIQcIQcIQcIQcIQcIQcIQcIQcLMcLNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacGVaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaabaaaaaaaaeaaacpPcdOcdOcDicdOcdOcKwcdOcGkcdOcdOcdOcdOcKxcpPcKycKzcKAcKBcKCcKCcKDcKCcKCcKCcKEcKFcKGcKHcKIcKJcKKcHPcHPcHPcKLcKMcKNcKNcKNcKNcKOcEdcEdcuEcpPcpPccCcnscnscKPcnsccCccCcKQccCcvyccCccCccCccCcgpcaQccCcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcJzcKjcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaaaaaaaaaaaaaaaaacETaaaaaaaaaaaeaaeaaaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecFXcFXcFXcFXcFYaaecGVaaecFYcGacGacGacGaaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRaaeaaeaaeaaeaaeaaeaaecpPcdOckCcKScdOcKTcKUcdOcKVcdOcdOcdOcdOcKWcpPcdOcdOcKXcKYcKZcqdcqdcqdcLacqdcLbcLccLdcLecLbcLfcpPcpPcpPcpPcLgcIncLhcLicLjcpPcLkcLlcLlcLmcLncLncLocLpcLqcLrcLscRdcLocLucgpcxgccCaaaaabccCcLvchZcLwcIOcJycJzcJzcJzcJzcJzcJzcJzcJzcLxcJCcJDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaecGOcGOcGOcGOcGPaaecETaaecGPcGQcGQcGQcGQaaecIXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecGRcGScGScGTcGUcGVcGWcGXcGYcGYcGZaaeaaeaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcdOcdOcDicKwcLycKTcdOcpPcoacdOcdOcLzcLAcyQcKwcLBcpPcdOckDcHbcLCcoacobcLDcDicLEcLFcLGcDicdOcLHcLIcLJcpPcLgcpPcpPcpPcpPcpPcpPcyQcpPcpPcpPcpPccCcnscnscKPcnsccCccCccCccCcvyccCaaaaaaccCclvcqNcLKcIOcLLcIQcIQcIQcIQcIQcIQcIQcIQcLMcLNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaeaaecHvcHwcHwcHxcHycETcHzcHAcHBcHBcHCaaeaaeaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacHDcHDcHDcHDcHEaaecLOaaecHEcHGcHGcHGcHGaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPchlcdOcKmcdOcLPcKwcdOcpPcobcdOcdOcdOcLQcDicDicDicDicfGckDcLRcLRcLRcLRcLRcLRcLScLTcLUcLRcLRcLRcLRcLRcLRcLgcpPcLVcpPcLWcKwcdOcLXcLYczgaaaaaaaaaaaeamdatramdaaeaaaaaaaaaafvaaeaaeaaeccCcLZcMacMbccCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacIjcIjcIjcIjcIkaaecMcaaecIkcIlcIlcIlcIlaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaeaaaaaacBPaaaaaaaaeaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaeaaaaaaaaacpPcMdcMecDicDicDicGkcGkcDiczgczgczgczgcpPcpPcMfcMgcDicpPcMhcLRcMicMjcMjcMkcMlcMmcMncMocMpcMqcMrcMrcMrcLRcLgcyQcMscpPcMtcdOcMucdOckCczgaaaaaaaaeaaeaaeaaaaaeaaeaaeaaaaaaafvaaaaaaaaeccCcnscnscnsccCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaeaaaaaacCQaaaaaaaaeaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaacaacaacaaeaaeaaaaaacBPaaaaaaaaeaaeaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaacpPcdOcdOcdOcdOcyQcLHcwscpPaaaaaeaaaaaecMvcDicDicDicDicMwckDcLRcMxcMycMrcMzcMAcMBcMCcMDcMEcMFcMrcMycMGcLRcLgcpPcpPcpPcpPcpPcpPcMHcMHcpPaaaaaeaaeaabaaaaaaaaaaaaaaeaaeaaaafvaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaaeaaeaaaaaacCQaaaaaaaaeaaeaacaacaadaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/MetaStation/MetaStation.v41I.dmm b/_maps/map_files/MetaStation/MetaStation.v41I.dmm index 8b18832a2b5..4e308026709 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41I.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41I.dmm @@ -245,7 +245,7 @@ "aeK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "aeL" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) "aeM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarport) -"aeN" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"}) +"aeN" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "aeO" = (/obj/item/weapon/tank/internals/oxygen/red{pixel_x = -4; pixel_y = -1},/obj/item/weapon/tank/internals/oxygen/red{pixel_x = 4; pixel_y = -1},/obj/item/weapon/tank/internals/anesthetic{pixel_x = 2},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "aeP" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9},/obj/machinery/space_heater,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/prison/solitary{name = "Prisoner Education Chamber"}) "aeQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{dir = 2; icon_state = "redcorner"},/area/security/prison) @@ -613,7 +613,7 @@ "alO" = (/obj/item/weapon/grown/log,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alP" = (/obj/machinery/light_construct/small{dir = 4},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/disk/data,/obj/item/weapon/grenade/flashbang,/obj/effect/spawner/lootdrop/maintenance,/obj/item/weapon/grenade/smokebomb,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alQ" = (/turf/simulated/wall,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"alR" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore) +"alR" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore) "alS" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine,/obj/item/weapon/reagent_containers/glass/bottle/charcoal,/obj/item/weapon/reagent_containers/syringe,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{dir = 10; icon_state = "whitered"},/area/security/brig) "alT" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteredcorner"},/area/security/brig) "alU" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/security/brig) @@ -4547,7 +4547,7 @@ "bJw" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bJx" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bJy" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"bJz" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) +"bJz" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 2},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bJA" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) "bJB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/atmos) "bJC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) @@ -4619,7 +4619,7 @@ "bKQ" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bKR" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bKS" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"bKT" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) +"bKT" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bKU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/atmos) "bKV" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "bKW" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Air to External Air Ports"; on = 1},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) @@ -4722,7 +4722,7 @@ "bMP" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/simulated/floor/plasteel{dir = 4; icon_state = "escape"},/area/atmos) "bMQ" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "bMR" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) -"bMS" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) +"bMS" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller{valve_open = 1},/turf/simulated/floor/engine/n20,/area/atmos) "bMT" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) "bMU" = (/obj/structure/grille,/obj/structure/lattice,/obj/structure/lattice,/turf/simulated/wall/r_wall,/area/space) "bMV" = (/obj/machinery/telecomms/processor/preset_two,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) @@ -4804,7 +4804,7 @@ "bOt" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "bOu" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos) "bOv" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel,/area/atmos) -"bOw" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) +"bOw" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) "bOx" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "bOy" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) "bOz" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - N2O"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine/n20,/area/atmos) @@ -5115,7 +5115,7 @@ "bUs" = (/obj/structure/fireaxecabinet{pixel_x = -32; pixel_y = 0},/obj/machinery/camera{c_tag = "Atmospherics - Port"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) "bUt" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/obj/machinery/portable_atmospherics/canister,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"; dir = 1},/area/atmos) "bUu" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel,/area/atmos) -"bUv" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "purplefull"},/area/atmos) +"bUv" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "purplefull"},/area/atmos) "bUw" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "bUx" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - Toxins"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "bUy" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) @@ -5382,7 +5382,7 @@ "bZz" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{color = "#330000"},/obj/machinery/meter{color = ""},/turf/simulated/floor/plasteel,/area/atmos) "bZA" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Pure to Fuel Pipe"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "bZB" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"bZC" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/atmos) +"bZC" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "vault"},/area/atmos) "bZD" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "bZE" = (/obj/machinery/camera{c_tag = "Atmospherics Tank - CO2"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "bZF" = (/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) @@ -5577,11 +5577,11 @@ "cdm" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cdn" = (/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cdo" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) -"cdp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 2; on = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos) +"cdp" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "n2"; on = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos) "cdq" = (/obj/structure/window/reinforced,/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{color = "#330000"},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos) "cdr" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "Nitrogen Outlet"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "redfull"},/area/atmos) "cds" = (/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/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) -"cdt" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos) +"cdt" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos) "cdu" = (/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/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos) "cdv" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Airmix"; on = 1},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bluefull"},/area/atmos) "cdw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/machinery/door/window/northleft{dir = 1; icon_state = "left"; name = "Inner Pipe Access"; req_access_txt = "24"},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) @@ -6661,7 +6661,7 @@ "cye" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cyf" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cyg" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) -"cyh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"cyh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "cyi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/toxins/storage) "cyj" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage) "cyk" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage) @@ -6713,7 +6713,7 @@ "cze" = (/obj/structure/closet/secure_closet/RD,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "czf" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "czg" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) -"czh" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"czh" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "czi" = (/obj/item/weapon/cigbutt,/obj/machinery/light_switch{pixel_y = -23},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/toxins/storage) "czj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/toxins/storage) "czk" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/toxins/storage) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 4b8c4b00b81..ef4cc3d43a5 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -206,7 +206,7 @@ "adX" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) "adY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/lattice/catwalk,/turf/space,/area/solar/auxstarboard) "adZ" = (/obj/structure/cable,/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/auxport) -"aea" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer) +"aea" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/security/transfer) "aeb" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer) "aec" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/security/transfer) "aed" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/button/ignition{id = "executionburn"; pixel_x = 24; pixel_y = 5},/obj/machinery/button/door{id = "executionfireblast"; name = "Transfer Area Lockdown"; pixel_x = 25; pixel_y = -5; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/general/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/security/transfer) @@ -821,7 +821,7 @@ "apO" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "apP" = (/obj/structure/grille,/obj/structure/window/fulltile{health = 35},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "apQ" = (/obj/structure/lattice,/turf/space,/area/space/nearstation) -"apR" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plating,/area/security/processing) +"apR" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plating,/area/security/processing) "apS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/security/processing) "apT" = (/turf/space,/obj/machinery/porta_turret/syndicate,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "apU" = (/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/security/detectives_office) @@ -3907,7 +3907,7 @@ "bxg" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bxh" = (/obj/structure/bed/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "bxi" = (/obj/machinery/computer/aifixer,/obj/machinery/requests_console{announcementConsole = 1; department = "Research Director's Desk"; departmentType = 5; name = "Research Director RC"; pixel_x = -2; pixel_y = 30},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) -"bxj" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("RD"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) +"bxj" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office."; name = "Research Monitor"; network = list("RD","MiniSat"); pixel_x = 0; pixel_y = 2},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/hor) "bxk" = (/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "warnwhite"; dir = 1},/area/crew_quarters/hor) "bxl" = (/obj/structure/rack,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel{dir = 9; icon_state = "warnwhite"},/area/crew_quarters/hor) "bxm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/flora/tree/pine/xmas,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) @@ -4497,7 +4497,7 @@ "bIy" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/engine,/area/toxins/xenobiology) "bIz" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "bIA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) -"bIB" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) +"bIB" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/toxins/storage) "bIC" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/toxins/storage) "bID" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bIE" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4665,7 +4665,7 @@ "bLK" = (/turf/simulated/wall/r_wall,/area/atmos) "bLL" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bLM" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"bLN" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) +"bLN" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "bLO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/heavy,/obj/machinery/door/airlock/maintenance{name = "Atmospherics Maintenance"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/atmos) "bLP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/atmos) "bLQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall/r_wall,/area/atmos) @@ -5140,7 +5140,7 @@ "bUR" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/turf/simulated/floor/plasteel,/area/atmos) "bUS" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plasteel,/area/atmos) "bUT" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 4},/area/atmos) -"bUU" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/engine/n20,/area/atmos) +"bUU" = (/obj/machinery/portable_atmospherics/canister/nitrous_oxide,/turf/simulated/floor/engine/n20,/area/atmos) "bUV" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "n2o_sensor"},/turf/simulated/floor/engine/n20,/area/atmos) "bUW" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/engine/n20,/area/atmos) "bUX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5199,7 +5199,7 @@ "bVY" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "bVZ" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "bWa" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel,/area/atmos) -"bWb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 4; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"bWb" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "n2o"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "bWc" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "escape"; dir = 6},/area/atmos) "bWd" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "n2o_in"; pixel_y = 1},/turf/simulated/floor/engine/n20,/area/atmos) "bWe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5389,7 +5389,7 @@ "bZG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel,/area/atmos) "bZH" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/item/weapon/wrench,/turf/simulated/floor/plasteel,/area/atmos) "bZI" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) -"bZJ" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"bZJ" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "plasma"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "bZK" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/atmos) "bZL" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "tox_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "bZM" = (/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint) @@ -5440,8 +5440,8 @@ "caF" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera{c_tag = "Atmospherics Central"; dir = 4; network = list("SS13")},/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Port to Filter"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "caG" = (/obj/machinery/atmospherics/components/unary/heat_reservoir/heater{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "caH" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/structure/bed/stool,/turf/simulated/floor/plasteel,/area/atmos) -"caI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"caJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"caI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"caJ" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/space,/area/space/nearstation) "caK" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint) "caL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "caM" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5493,7 +5493,7 @@ "cbG" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "CO2 Outlet Pump"; on = 0},/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) "cbH" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cbI" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) -"cbJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cbJ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/maintenance/asmaint) "cbL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "cbM" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5589,10 +5589,10 @@ "cdy" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "cdz" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 4},/obj/machinery/atmospherics/components/binary/pump{dir = 1; name = "O2 to Pure"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) "cdA" = (/obj/machinery/atmospherics/components/trinary/mixer{dir = 4; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 0; target_pressure = 4500},/turf/simulated/floor/plasteel,/area/atmos) -"cdB" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = 3; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cdB" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 1; filter_type = "co2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cdC" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cdD" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8; frequency = 1441; id = "co2_in"; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) -"cdE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cdE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cdF" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cdG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cdH" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5642,7 +5642,7 @@ "cez" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) "ceA" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 9},/turf/simulated/floor/plating,/area/atmos) "ceB" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) -"ceC" = (/obj/machinery/power/apc{dir = 2; name = "Incinerator APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/incinerator) +"ceC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/maintenance/asmaint) "ceE" = (/obj/structure/sign/fire{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ceF" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5674,7 +5674,7 @@ "cff" = (/obj/machinery/vending/tool,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellowcorner"},/area/engine/engineering) "cfg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) "cfh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/engine/break_room) -"cfi" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = 2; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cfi" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 2; filter_type = "n2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cfj" = (/turf/simulated/wall,/area/maintenance/incinerator) "cfk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/atmos{name = "Turbine Access"; req_access_txt = "32"},/turf/simulated/floor/plating,/area/maintenance/incinerator) "cfl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/incinerator) @@ -5709,13 +5709,13 @@ "cfO" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor/plasteel,/area/atmos) "cfP" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "cfQ" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/cyan/visible,/turf/simulated/floor/plasteel,/area/atmos) -"cfR" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) +"cfR" = (/obj/machinery/atmospherics/components/trinary/filter{dir = 4; filter_type = "o2"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cfS" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos) "cfT" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "cfU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/wall,/area/maintenance/incinerator) -"cfV" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/simulated/wall,/area/maintenance/incinerator) -"cfW" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cfX" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "atmospherics mix pump"},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cfV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cfW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cfX" = (/obj/machinery/power/apc{dir = 2; name = "Incinerator APC"; pixel_x = 0; pixel_y = -24},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/floor/plating,/area/maintenance/incinerator) "cfY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/incinerator) "cfZ" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 26},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cga" = (/obj/machinery/power/smes{capacity = 9e+006; charge = 10000},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/decal/cleanable/cobweb{icon_state = "cobweb2"},/turf/simulated/floor/plating,/area/maintenance/incinerator) @@ -5780,8 +5780,8 @@ "chh" = (/obj/machinery/atmospherics/components/unary/tank/toxins{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "chi" = (/obj/machinery/atmospherics/pipe/manifold4w/general{level = 2},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "chj" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "plasma tank pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"chk" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"chl" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Mix to Incinerator"; on = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"chk" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/simulated/wall,/area/maintenance/incinerator) +"chl" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "atmospherics mix pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "chm" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{desc = "This particular atmos control unit appears to have no access restrictions."; dir = 8; icon_state = "alarm0"; locked = 0; name = "all-access air alarm"; pixel_x = 24; req_access = "0"; req_one_access = "0"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "chn" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cho" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 5},/turf/simulated/floor/bluegrid{name = "Killroom Floor"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/xenobiology) @@ -5849,8 +5849,8 @@ "ciy" = (/obj/structure/sign/nosmoking_2{pixel_x = -28},/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4; name = "input gas connector port"},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ciz" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ciA" = (/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "input port pump"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ciB" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/obj/item/weapon/cigbutt,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ciC" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ciB" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ciC" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/turf/space,/area/space/nearstation) "ciD" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{name = "output gas connector port"},/obj/machinery/portable_atmospherics/canister,/obj/structure/sign/nosmoking_2{pixel_x = 28},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ciE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ciF" = (/obj/structure/table,/obj/item/weapon/cartridge/medical,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5889,7 +5889,7 @@ "cjm" = (/obj/machinery/door/airlock/command{name = "MiniSat Access"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/engine/engineering) "cjn" = (/obj/item/weapon/weldingtool,/turf/simulated/floor/plating/airless,/area/space/nearstation) "cjo" = (/obj/item/stack/sheet/metal,/turf/simulated/floor/plating/airless,/area/space/nearstation) -"cjp" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/incinerator) +"cjp" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/structure/reagent_dispensers/fueltank,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cjq" = (/obj/machinery/atmospherics/components/binary/valve{name = "Mix to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cjr" = (/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "cjs" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) @@ -5933,9 +5933,9 @@ "cke" = (/obj/structure/bed/stool,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ckf" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/maintenance/incinerator) "ckg" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ckh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cki" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"ckj" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ckh" = (/obj/machinery/atmospherics/components/binary/pump{dir = 8; name = "Mix to MiniSat"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cki" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"ckj" = (/obj/item/weapon/cigbutt,/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 10},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ckk" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/components/binary/valve{dir = 4; name = "Incinerator to Space"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "ckl" = (/obj/machinery/portable_atmospherics/canister,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/asmaint) "ckm" = (/obj/machinery/door/airlock/maintenance{name = "Biohazard Disposals"; req_access_txt = "12"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -5981,12 +5981,12 @@ "cla" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "air_sensor"; output = 7},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "clb" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 1; frequency = 1443; id = "air_in"},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) "clc" = (/obj/machinery/atmospherics/components/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 0; frequency = 1443; icon_state = "vent_map"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos) -"cld" = (/obj/structure/reagent_dispensers/fueltank,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cle" = (/obj/machinery/computer/turbine_computer{id = "incineratorturbine"},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"clf" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -31},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"clg" = (/obj/machinery/button/door{id = "auxincineratorvent"; name = "Auxiliary Vent Control"; pixel_x = 6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/button/door{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = -6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"clh" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the turbine vent."; dir = 1; name = "turbine vent monitor"; network = list("Turbine"); pixel_x = 0; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cli" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/button/ignition{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cld" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/binary/pump{dir = 4; name = "Mix to Incinerator"; on = 0},/mob/living/simple_animal/mouse,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cle" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 2},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"clf" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"clg" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/incinerator) +"clh" = (/obj/machinery/light/small,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -31},/obj/machinery/computer/turbine_computer{id = "incineratorturbine"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"cli" = (/obj/machinery/button/door{id = "auxincineratorvent"; name = "Auxiliary Vent Control"; pixel_x = 6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/button/door{id = "turbinevent"; name = "Turbine Vent Control"; pixel_x = -6; pixel_y = -24; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "clj" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "clk" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "cll" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/components/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) @@ -6358,20 +6358,20 @@ "csn" = (/obj/structure/transit_tube,/turf/space,/area/space) "cso" = (/obj/structure/transit_tube,/obj/structure/lattice,/turf/space,/area/space) "csp" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/space,/area/space) -"csq" = (/obj/structure/transit_tube{icon_state = "W-SE"},/turf/space,/area/space) -"csr" = (/obj/structure/transit_tube{icon_state = "D-SW"},/obj/structure/lattice,/turf/space,/area/space) +"csq" = (/obj/machinery/computer/security/telescreen{desc = "Used for watching the turbine vent."; dir = 1; name = "turbine vent monitor"; network = list("Turbine"); pixel_x = 0; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) +"csr" = (/obj/machinery/doorButtons/airlock_controller{idExterior = "incinerator_airlock_exterior"; idSelf = "incinerator_access_control"; idInterior = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = 6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/button/ignition{id = "Incinerator"; pixel_x = -6; pixel_y = -24},/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/machinery/meter,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/maintenance/incinerator) "css" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "cst" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "csu" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "csv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"csw" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/obj/structure/lattice,/turf/space,/area/space) +"csw" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space) "csx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "csy" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating/airless,/area/space/nearstation) "csz" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space/nearstation) "csA" = (/obj/machinery/field/generator{anchored = 1; state = 2},/turf/simulated/floor/plating/airless,/area/space/nearstation) "csB" = (/obj/item/weapon/wirecutters,/obj/structure/lattice,/turf/space,/area/space/nearstation) "csC" = (/turf/simulated/floor/plating/airless{dir = 1; icon_state = "warnplate"},/area/space/nearstation) -"csD" = (/turf/simulated/wall/r_wall,/area/aisat) +"csD" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "csE" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) "csF" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall/r_wall,/area/engine/engineering) "csG" = (/obj/machinery/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) @@ -6380,207 +6380,207 @@ "csJ" = (/obj/item/weapon/crowbar,/turf/space,/area/space/nearstation) "csK" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) "csL" = (/obj/structure/transit_tube{icon_state = "D-NE"},/turf/space,/area/space) -"csM" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/aisat) -"csN" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/aisat) -"csO" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/aisat) +"csM" = (/obj/structure/transit_tube,/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space) +"csN" = (/obj/structure/transit_tube,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"csO" = (/obj/structure/window/reinforced/fulltile,/obj/structure/transit_tube,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) "csP" = (/obj/machinery/power/grounding_rod,/turf/simulated/floor/plating/airless,/area/space/nearstation) "csQ" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/space/nearstation) "csR" = (/obj/machinery/the_singularitygen,/turf/simulated/floor/plating/airless{dir = 8; icon_state = "warnplate"},/area/space/nearstation) "csS" = (/obj/item/weapon/weldingtool,/turf/space,/area/space/nearstation) -"csT" = (/obj/structure/transit_tube{icon_state = "NW-SE"},/turf/space,/area/space) -"csU" = (/obj/structure/transit_tube{icon_state = "D-NE"},/obj/structure/lattice,/turf/space,/area/space) -"csV" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat) -"csW" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat) -"csX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/aisat) +"csT" = (/obj/structure/transit_tube{dir = 8; icon_state = "Block"},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"csU" = (/obj/structure/transit_tube/station{reverse_launch = 1},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"csV" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/turret_protected/aisat_interior) +"csW" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/turret_protected/aisat_interior) +"csX" = (/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/plating,/area/turret_protected/aisat_interior) "csY" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) "csZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/lattice/catwalk,/turf/space,/area/solar/starboard) -"cta" = (/obj/structure/transit_tube{icon_state = "S-NW"},/obj/structure/lattice,/turf/space,/area/space) -"ctb" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctc" = (/obj/machinery/camera{c_tag = "MiniSat Teleporter"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctd" = (/obj/machinery/button/door{id = "teledoor"; name = "AI Satellite Teleport Shutters Control"; pixel_x = 25; pixel_y = 0; req_access_txt = "17;65"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) +"cta" = (/obj/machinery/door/airlock/external{name = "MiniSat External Access"; req_access = null; req_access_txt = "65;13"},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctb" = (/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctd" = (/obj/structure/lattice/catwalk,/obj/machinery/atmospherics/pipe/simple/yellow/visible,/turf/space,/area/space) "cte" = (/obj/item/device/radio/off,/turf/simulated/floor/plating/airless,/area/engine/engineering) "ctf" = (/turf/simulated/floor/plating/airless{dir = 2; icon_state = "warnplate"},/area/space/nearstation) -"ctg" = (/turf/simulated/wall,/area/aisat) -"cth" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/aisat) -"cti" = (/obj/machinery/door/airlock/hatch{name = "Teleporter Room"; req_access_txt = "17;65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/aisat) -"ctk" = (/obj/machinery/door/poddoor/shutters{id = "teledoor"; name = "AI Satellite Teleport Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) +"ctg" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"cth" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"cti" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/sign/securearea{pixel_y = -32},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctj" = (/obj/machinery/camera{c_tag = "MiniSat Pod Access"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 2; on = 1},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctk" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/wall,/area/turret_protected/aisat_interior) "ctl" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/engine/engineering) "ctm" = (/turf/simulated/floor/plating/airless{dir = 10; icon_state = "warnplate"},/area/space/nearstation) "ctn" = (/obj/structure/grille,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"cto" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/aisat) -"ctp" = (/obj/structure/transit_tube{icon_state = "N-S"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/aisat) -"ctq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat) -"cts" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"ctt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) -"ctu" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/aisat) +"cto" = (/obj/machinery/door/airlock/hatch{name = "MiniSat Foyer"; req_one_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctp" = (/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/turret_protected/aisat_interior) +"ctq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/turret_protected/aisat_interior) +"ctr" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/folder{pixel_x = 3},/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/pen,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"cts" = (/obj/structure/rack{dir = 1},/obj/machinery/light/small{dir = 1},/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/item/device/radio/off{pixel_y = 4},/obj/item/weapon/screwdriver{pixel_y = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"ctt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) "ctv" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"ctw" = (/obj/structure/transit_tube/station{dir = 4; icon_state = "closed"; reverse_launch = 1},/turf/simulated/floor/plating,/area/aisat) -"ctx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat) -"cty" = (/obj/machinery/door/airlock/external{name = "MiniSat External Access"; req_access = null; req_access_txt = "65;13"},/turf/simulated/floor/plating,/area/aisat) -"ctz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) -"ctA" = (/turf/simulated/floor/plating,/area/aisat) +"ctw" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"ctx" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"cty" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctz" = (/obj/machinery/door/poddoor/shutters{id = "teledoor"; name = "MiniSat Teleport Access"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "ctB" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/starboard) "ctC" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity West"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering) "ctD" = (/obj/machinery/camera/emp_proof{c_tag = "Singularity East"; dir = 1; network = list("Singularity")},/turf/simulated/floor/plating/airless,/area/engine/engineering) -"ctE" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/aisat) -"ctF" = (/obj/structure/transit_tube{dir = 1; icon_state = "Block"},/turf/simulated/floor/plating,/area/aisat) -"ctG" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctH" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat) -"ctI" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"ctJ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) -"ctK" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/structure/closet/emcloset,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/aisat) -"ctL" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/camera{c_tag = "MiniSat Entrance"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/power/apc{dir = 8; name = "MiniSat External Power APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/aisat) -"ctN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) -"ctO" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/aisat) -"ctP" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/aisat) +"ctE" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctF" = (/obj/machinery/button/door{id = "teledoor"; name = "MiniSat Teleport Shutters Control"; pixel_x = 0; pixel_y = 25; req_access_txt = "17;65"},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior) +"ctG" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctH" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -31},/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"ctI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctJ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctK" = (/obj/machinery/door/airlock/hatch{name = "MiniSat Teleporter"; req_access_txt = "17;65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctL" = (/obj/machinery/teleport/station,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctM" = (/obj/machinery/bluespace_beacon,/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior) +"ctN" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 10},/obj/structure/lattice,/turf/space,/area/space) +"ctO" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/yellow/visible{icon_state = "intact"; dir = 5},/turf/space,/area/space) +"ctP" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctQ" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = 0; pixel_y = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) "ctR" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 0},/turf/simulated/wall,/area/engine/engineering) -"ctS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/aisat) -"ctT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat) -"ctU" = (/obj/machinery/computer/security/telescreen{dir = 1; name = "MiniSat Monitor"; network = list("MiniSat"); pixel_x = 0; pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat) -"ctV" = (/obj/machinery/turretid{control_area = "AI Satellite Antechamber"; enabled = 1; icon_state = "control_standby"; name = "Antechamber Turret Control"; pixel_x = 0; pixel_y = -24; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/aisat) -"ctW" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/aisat) -"ctX" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) -"ctY" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/wall,/area/aisat) -"ctZ" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light/small{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/turf/simulated/floor/plating,/area/aisat) +"ctS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctT" = (/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "grimy"},/area/turret_protected/aisat_interior) +"ctU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/turret_protected/aisat_interior) +"ctV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "MiniSat Foyer APC"; pixel_x = 27; pixel_y = 0},/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"ctW" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/turret_protected/aisat_interior) +"ctX" = (/obj/machinery/camera{c_tag = "MiniSat Teleporter"; dir = 1; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 4},/area/turret_protected/aisat_interior) +"ctY" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"ctZ" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) "cua" = (/turf/simulated/wall,/area/turret_protected/aisat_interior) -"cub" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_one_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/turret_protected/aisat_interior) -"cud" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/turret_protected/aisat_interior) -"cue" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/wall,/area/aisat) -"cuf" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cug" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/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/aisat) -"cuh" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) -"cui" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) -"cuj" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/structure/grille,/turf/space,/area/space) -"cuk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cul" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cum" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cun" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) -"cuo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cup" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) -"cuq" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cur" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) -"cus" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/window/reinforced,/turf/space,/area/space) +"cub" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuc" = (/obj/structure/rack{dir = 1},/obj/machinery/status_display{pixel_y = -32},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"cud" = (/obj/machinery/turretid{control_area = null; enabled = 1; icon_state = "control_standby"; name = "Antechamber Turret Control"; pixel_x = 0; pixel_y = -24; req_access = list(65)},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/camera/motion{c_tag = "MiniSat Foyer"; dir = 1; network = list("MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cue" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuf" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cug" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/structure/table,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) +"cuh" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/structure/rack,/obj/item/weapon/wrench,/obj/item/weapon/crowbar/red,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cui" = (/obj/machinery/atmospherics/components/unary/tank/air,/turf/simulated/floor/plating,/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuj" = (/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior) +"cuk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior) +"cul" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Antechamber"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cum" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cun" = (/obj/machinery/atmospherics/components/binary/pump{dir = 2; name = "Mix to MiniSat"},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuo" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plating{tag = "icon-warnplatecorner"; icon_state = "warnplatecorner"; dir = 2},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cup" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuq" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Air Out"; on = 0},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cur" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) +"cus" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/aisat_interior) "cut" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_sw"; name = "southwest of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) -"cuu" = (/obj/machinery/door/window{dir = 1; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plating,/area/aisat) -"cuv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cuw" = (/obj/structure/window/reinforced,/obj/machinery/door/window{base_state = "right"; dir = 1; icon_state = "right"; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cux" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuv" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuw" = (/turf/simulated/floor/plating{icon_plating = "warnplate"; icon_state = "warnplate"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cux" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/clothing/head/welding,/obj/item/stack/sheet/mineral/plasma{amount = 35; layer = 3.1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) "cuy" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuz" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuA" = (/obj/machinery/hologram/holopad,/obj/effect/landmark/start{name = "Cyborg"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuB" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) -"cuC" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) -"cuD" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cuG" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window{base_state = "right"; dir = 1; icon_state = "right"; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plating,/area/aisat) -"cuH" = (/obj/structure/window/reinforced,/obj/machinery/door/window{dir = 1; name = "MiniSat Walkway Access"; req_access_txt = "13;65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cuI" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat) -"cuJ" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuK" = (/mob/living/simple_animal/bot/secbot/pingsky,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuL" = (/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) -"cuM" = (/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) -"cuN" = (/obj/machinery/power/apc{aidisabled = 0; cell_type = 2500; dir = 4; name = "MiniSat Antechamber APC"; pixel_x = 29; pixel_y = 0},/obj/structure/cable,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuO" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/space) -"cuP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat) -"cuQ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) -"cuR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Exterior North West"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat) -"cuS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/space) -"cuT" = (/obj/machinery/porta_turret{ai = 1; dir = 1},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"cuU" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/mob/living/simple_animal/bot/floorbot{on = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuV" = (/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/turret_protected/aisat_interior) -"cuW" = (/obj/machinery/camera/motion{c_tag = "MiniSat Antechamber"; dir = 1; network = list("MiniSat")},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "darkblue"},/area/turret_protected/aisat_interior) -"cuX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/mob/living/simple_animal/bot/cleanbot{on = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/aisat_interior) -"cuY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "MiniSat Exterior North East"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat) -"cuZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space) +"cuz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuA" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Atmospherics"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/space_heater,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuB" = (/obj/machinery/light/small{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuC" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuD" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat Antechamber"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/turretid{control_area = "AI Satellite Atmospherics"; enabled = 1; icon_state = "control_standby"; name = "Atmospherics Turret Control"; pixel_x = -27; pixel_y = 0; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) +"cuE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/aisat_interior) +"cuF" = (/obj/machinery/light/small{dir = 4},/obj/machinery/turretid{control_area = "AI Satellite Service"; enabled = 1; icon_state = "control_standby"; name = "Service Bay Turret Control"; pixel_x = 27; pixel_y = 0; req_access = list(65)},/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/aisat_interior) +"cuG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuH" = (/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuJ" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuK" = (/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Service Bay"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuM" = (/obj/machinery/power/apc{dir = 8; name = "MiniSat Atmospherics APC"; pixel_x = -27; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Atmospherics"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/mob/living/simple_animal/bot/secbot/pingsky,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Service Bay"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) +"cuV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuX" = (/obj/machinery/power/apc{dir = 4; name = "MiniSat Service Bay APC"; pixel_x = 27; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cuY" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) +"cuZ" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/mob/living/simple_animal/bot/floorbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/AIsatextAS{name = "AI Satellite Atmospherics"}) "cva" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai) "cvb" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/highsecurity{icon_state = "door_locked"; locked = 1; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cve" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"cvc" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) +"cvd" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) +"cve" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/turretid{control_area = "AI Satellite Hallway"; enabled = 1; icon_state = "control_standby"; name = "Chamber Hallway Turret Control"; pixel_x = 32; pixel_y = -24; req_access = list(65)},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "cvf" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvh" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvj" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai) -"cvk" = (/obj/machinery/camera{c_tag = "AI Chamber North"; dir = 2; network = list("MiniSat","RD"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai) +"cvg" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/mob/living/simple_animal/bot/cleanbot,/turf/simulated/floor/plasteel{icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cvh" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cvi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFP{name = "AI Satellite Service"}) +"cvj" = (/turf/simulated/wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvk" = (/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvl" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvm" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/turret_protected/ai) -"cvn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cvm" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Chamber Hallway"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvp" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvq" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cvq" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvr" = (/obj/machinery/porta_turret{ai = 1; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvs" = (/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -21},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvt" = (/obj/machinery/porta_turret{ai = 1; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvu" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat) +"cvs" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvu" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvv" = (/turf/simulated/wall,/area/turret_protected/ai) -"cvw" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat) +"cvw" = (/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvx" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 28},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvy" = (/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvz" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 27},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 27; pixel_y = 5},/obj/effect/landmark/start{name = "AI"},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = 32; pixel_y = 32},/obj/machinery/newscaster/security_unit{pixel_x = -32; pixel_y = 32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cvy" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvA" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 28},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = 27; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvB" = (/obj/machinery/door/window{name = "AI Core Door"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvC" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "AI Chamber APC"; pixel_y = 24},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/turretid{name = "AI Chamber turret control"; pixel_x = 5; pixel_y = 24},/obj/machinery/flasher{id = "AI"; pixel_x = -6; pixel_y = 24},/obj/machinery/camera/motion{c_tag = "AI Chamber South"; dir = 2; network = list("RD","MiniSat")},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) -"cvF" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvG" = (/obj/machinery/hologram/holopad,/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvH" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvI" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/obj/machinery/camera{c_tag = "MiniSat Exterior South West"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/aisat) -"cvK" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) -"cvL" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "MiniSat Exterior South East"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/aisat) +"cvB" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvF" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External NorthWest"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) +"cvG" = (/obj/machinery/porta_turret{ai = 1; dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvH" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvJ" = (/obj/machinery/porta_turret{ai = 1; dir = 4; installation = /obj/item/weapon/gun/energy/gun},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvK" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External NorthEast"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) +"cvL" = (/obj/structure/sign/securearea{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvM" = (/obj/machinery/camera/motion{c_tag = "MiniSat Core Hallway"; dir = 4; network = list("MiniSat")},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvN" = (/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) "cvO" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_se"; name = "southeast of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) -"cvP" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"cvR" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) -"cvS" = (/turf/simulated/wall,/area/ai_monitored/storage/secure) -"cvT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/ai_monitored/storage/secure) -"cvU" = (/obj/machinery/atmospherics/components/unary/tank/air,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) -"cvV" = (/obj/structure/rack,/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/item/clothing/head/welding,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) -"cvW" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) -"cvX" = (/obj/structure/window/reinforced,/turf/space,/area/space) -"cvY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space) -"cvZ" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space) -"cwa" = (/obj/machinery/power/apc{dir = 8; name = "MiniSat Maint APC"; pixel_x = -24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/ai_monitored/storage/secure) -"cwb" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating{icon_state = "warnplate"},/area/ai_monitored/storage/secure) -"cwc" = (/obj/machinery/atmospherics/components/binary/pump{dir = 0; name = "Air Out"; on = 1},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 5},/area/ai_monitored/storage/secure) -"cwd" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 28; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 1},/area/ai_monitored/storage/secure) -"cwe" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel{icon_state = "warndark"; dir = 9},/area/ai_monitored/storage/secure) -"cwf" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space) -"cwg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/aisat) -"cwh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/aisat) -"cwi" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwj" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwl" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 4; initialize_directions = 11},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwo" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwp" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/aisat) -"cwq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space) -"cwr" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/camera/motion{c_tag = "MiniSat Maintenance"; dir = 4; network = list("MiniSat")},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cws" = (/obj/structure/bed/chair,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwt" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwv" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cww" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/components/unary/outlet_injector/on{dir = 8},/turf/simulated/floor/plating/airless,/area/space) -"cwx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/ai_monitored/storage/secure) +"cvP" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvR" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvU" = (/obj/machinery/door/airlock/maintenance_hatch{name = "MiniSat Maintenance"; req_access_txt = "65"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvV" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvW" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvX" = (/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cvZ" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwa" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "MiniSat Chamber Hallway APC"; pixel_x = 27; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; listening = 0; name = "Station Intercom (AI Private)"; pixel_x = -28; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwe" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai) +"cwf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch{name = "MiniSat Chamber Observation"; req_one_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwg" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwh" = (/obj/machinery/light/small{dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwi" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwk" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwl" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwm" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwp" = (/obj/structure/bed/chair/office/dark,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwq" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/turret_protected/AIsatextFS{name = "AI Satellite Hallway"}) +"cwr" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/turret_protected/ai) +"cws" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/turret_protected/ai) +"cwt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_command{name = "AI Core"; req_access_txt = "65"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwv" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cww" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "cwy" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_s"; name = "south of station"; turf_type = /turf/space; width = 18},/turf/space,/area/space) -"cwz" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1; name = "Auxiliary MiniSat Distribution Port"},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwA" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwB" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwC" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwD" = (/obj/structure/table,/obj/item/stack/sheet/mineral/plasma{layer = 2.9},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure) -"cwE" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/ai_monitored/storage/secure) +"cwz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwB" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/ai_status_display{pixel_x = 32},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cwC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cwD" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/turretid{name = "AI Chamber turret control"; pixel_x = 5; pixel_y = -24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cwE" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "AI Chamber APC"; pixel_y = -24},/obj/machinery/flasher{id = "AI"; pixel_x = -11; pixel_y = -24},/obj/machinery/camera/motion{c_tag = "MiniSat AI Chamber North"; dir = 1; network = list("MiniSat")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) "cwF" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "cwG" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "cwH" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/turf/simulated/wall/shuttle/interior{icon_state = "swall_f5"},/area/shuttle/escape) @@ -6691,7 +6691,6 @@ "cyI" = (/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyJ" = (/obj/structure/rack,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyK" = (/turf/simulated/wall/shuttle{icon_state = "swall_f14"},/area/shuttle/abandoned) -"cyL" = (/obj/structure/cable,/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) "cyM" = (/turf/simulated/wall/shuttle{icon_state = "swall_f11"},/area/shuttle/abandoned) "cyN" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/poddoor{id = "QMLoaddoor2"; name = "supply dock loading door"},/turf/simulated/floor/plating,/area/shuttle/supply) "cyO" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/abandoned) @@ -6801,6 +6800,21 @@ "cAO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/engine/engineering) "cAP" = (/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engineering) "cAQ" = (/obj/structure/bed/chair,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/maintenance/aft) +"cAR" = (/obj/machinery/door/window{dir = 1; name = "AI Core Door"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cAS" = (/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = -27; pixel_y = -9},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = -31},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 27; pixel_y = -9},/obj/machinery/newscaster/security_unit{pixel_x = -28; pixel_y = -28},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_x = 28; pixel_y = -28},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cAT" = (/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cAU" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External SouthWest"; dir = 8; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) +"cAV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 8; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = 9; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cAW" = (/obj/structure/showcase{density = 0; desc = "An old, deactivated cyborg. Whilst once actively used to guard against intruders, it now simply intimidates them with its cold, steely gaze."; dir = 4; icon = 'icons/mob/robots.dmi'; icon_state = "robot_old"; name = "Cyborg Statue"; pixel_x = -9; pixel_y = 2},/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cAX" = (/obj/structure/lattice,/obj/machinery/camera{c_tag = "MiniSat External SouthEast"; dir = 4; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) +"cAY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/wall,/area/turret_protected/ai) +"cAZ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cBa" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cBb" = (/obj/machinery/camera/motion{c_tag = "MiniSat AI Chamber South"; dir = 2; network = list("MiniSat")},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cBc" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/ai_slipper{icon_state = "motion0"; uses = 10},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"cBd" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cBe" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/hologram/holopad,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) +"cBf" = (/obj/machinery/camera{c_tag = "MiniSat External South"; dir = 2; network = list("MiniSat"); pixel_x = 0; pixel_y = 0; start_active = 1},/turf/space,/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6939,7 +6953,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyncybaaaaafcyacypcyhcyicyicyicyicyicyicyicyqcyrcyccybaafaaabeOblSbjacAIbkAblVcAJbeOaaaaaaaaacytcyscyscyscyscyscyuaaaaaablWblYbkjbkpbknbktbjrbjrbjrbjrbjrbjrbkubmgbmfboUbkwbkxbfQbkHbfmbmkaZKbmlaZKbmnbmmaLYbjzbmpbmobmobmobmobmqbmsbmraafaaabgObkIbgNbgNbgNbmwbijaaaaafbmxbmzbmybmBbmAbmCbmxbmDbmxbmEaJqbAibfFbmFbkKbkLbmGbmIbfFbmJbliblkbmKbmLbhhbmMbfKbmObmNbkObfKbmRbkPbkRbkQblabkUblablgbKHblobKHbKHbKHblqbdPbnbbiIblsblxbltblDblyblGblFblFblMblNbnjbfVbvxblXbnmbgcbnnbnpbnoblZbiWbmabgcbmdbmcbmebnsbnsbnsbnsbnsbnsbnuaafaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyncybcyacypcywcylcyxcyicyicyicyicyicyicyicyzcyycyAaafaaabeObnvbjabjabjabeObeObeOaaaaaaaaacyCcyBcyBcyBcyBcyBcyCaaaaaablWbnwbqmbmjbmhbmhbmhbmhbmhbmhbmhbmhbmhbmHbmtbmPbnEbmQbnGbfmbnIbbRbnJbnLbnKbfobnMbnNbjzbjzbmrbnPbnObnRbnQbnSbmraaaaaabgObnTbnVbnUbnVbnWbijaaaaaabmxbnYbnXbnZbmxboabmxbmDbmxbmEaJqbmSbfFbobbkKbmTbipbodbfFbofboebohbogboibhhbojbfKbhibokbmUbfKbfLbmVbfLbmWbmYbmXbmZbmZbmZbmZbmZbmZbmZbnabncbopblwblvbnebndbotbosboubouboubnibiLbovboxbozbowboyboBboAbngbnfbnkbnhbnlbgcbnrbnqbnxboFboFboFboFboFboHbhGbkybkybkyaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacymcyocyvcyvcyrcygcywcyicylcyxcyicyicyicyicyicyDcypcyccygcyEcybaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyCboIblWblWboJbqmbjrbjrboKboKboKboKbjrbjrbjrbjrbkJboNbuFbnybnAbnzboSboRboTbbRbbRbnKboWboVboYboXbpaboZbpcbpbbpebpdbpfbmraafaaabgObpgbphbphbphbpibijaaaaafbmxbpkbpjbplbmxbpmbmxbmDbmxbpnaJqbmSbfFbnBbkKbnDbnCbptbfFbpublibiubogbpwbpvbofbofbpybpxbnHbnFbolbocboobomboqbpEbpHbpGbpJbpIbpLbpKbonbPvboCborboEboDboLboGbfVbpRbouboubpTbnibiLbpUbpWboMboObpXboBbpZboQboPbpobiWbpqbppbprbgcbqebqebqebqebqebqebiYbhGbqhbqgbkybkyaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyFcyccyGcyvcyHcyicyIcyicyrcyKcyJcyicyicyicyDcypcywcyLcyLcyMcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyNbqibqjbqibqlbpsbmbbmbbpzbjrbjrbjrbjrbjrbqnaZEaZEbqobbRbtvbpBbpAbfmbqsbbRbqtbbRbqubmEbnMbqwbqvbqybqxbqAbqzbqBbpdbqCbmraaaaaabgObqDbqFbqEbqFbqGbijaaaaaabqHbqJbqIbqHbqHbqHbqHbqKbqHbqLaLYbpCbfFbfFbpDbpMbpFbfFbfFbqPbpNbpObhhbhhbhhbhhbhhbwzbpPbqQbqQbqQbqWbqQbIqboqbpEbrabqZbrcbrbbrebrdbonbpQbpVbpSbpYbpYbqbbqabfVbqcbiLbiLbqdbnibiLbrqbrsbzEbhUbrtboBboBbrxbqfbqkbrxboBbgcbgcbgcbrAbrzbrCbrBbrDbqebrFbrEbrHbrGbrIbkyaaaaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyFcyccyGcyvcyHcyicyIcyicyrcyKcyJcyicyicyicyDcypcywczyczycyMcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyNbqibqjbqibqlbpsbmbbmbbpzbjrbjrbjrbjrbjrbqnaZEaZEbqobbRbtvbpBbpAbfmbqsbbRbqtbbRbqubmEbnMbqwbqvbqybqxbqAbqzbqBbpdbqCbmraaaaaabgObqDbqFbqEbqFbqGbijaaaaaabqHbqJbqIbqHbqHbqHbqHbqKbqHbqLaLYbpCbfFbfFbpDbpMbpFbfFbfFbqPbpNbpObhhbhhbhhbhhbhhbwzbpPbqQbqQbqQbqWbqQbIqboqbpEbrabqZbrcbrbbrebrdbonbpQbpVbpSbpYbpYbqbbqabfVbqcbiLbiLbqdbnibiLbrqbrsbzEbhUbrtboBboBbrxbqfbqkbrxboBbgcbgcbgcbrAbrzbrCbrBbrDbqebrFbrEbrHbrGbrIbkyaaaaafaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacypcyccyhcyicyicyicyMcygcyccyccyecyEcypcywcyicyOcyOcyPcylaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyQbrJbrKbrJbrLbjrbjrbjrboKboKboKboKbjrbjrbrNbrMaZEbrObbRbtvbpBbqpbfmbqsbbRbbRbbRbqubmEbrTaJqbqvbqybrUbrWbqqbqqbqrbrZbmraafaafbsbbsabsdbscbsfbsebsgaafaafbshbsjbsibslbskbsnbsmbsobqHbspaJqbqNbqMbqRbqObqTbqSbqVbqUbsybqXbqYbsxbsxbsxbsxbsxbrgbrfbsxbsxbsxbrhbhgbribrjbpEbsKbrkbsLbsLbsNbpKbonbPvbdPbsObsQbsPbsRbsRbfVbsSbCIbsTboxbrlbiLbsWboxbsXbsZbrmbtbbtabrobrnbrpbtebthbrrbtjbrubrwbrvbrvbrvbrPbrybrQbhGbtqbtpcAKbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcygcywcyicylcyicyicyicyicyicyicyicyicyMcyhcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyScyCboIblWblWbtrbjrbjrbjrbjrbjrbjrbjrbjrbjrbrNbtsaZEbttbtubjvbrRbkMbkNbkMbuIbbRbtybnKbtzbrTaJqbqvbqybmrbtBbrSbtDbtCbtEbmraaaaaaaafbgObtGbtFbtGbijaafaaaaaabshbtIbtHbtKbtJbtLbtLbtNbtMbtObAkaNrbrVbrXbLXbFDbrYbEebsqbEebEebssbsrbtXbtVbtVbtVbtZbhhbhhbhhbstbuabuabsubpEbpEbpEbsvbugbufbrebpKbonbdObdPbuhbuhbuhbuhbuhbfVboxboxboxboxbujbswbujboxbszcdXbsAbuobuobuobsCbsDbupbusbsEbuubsFbuwbuvbuvbsGbsIbsHbsMbsJbtqbtpbtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyEcyccyccyccyccyccyccyccyEcybaaacyacypcywcyicyicyicylcyicyicyDcyccyccyecyKcyicyicylcyicyicyicyicyicyRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyCcyBcyBcyBcyBcyBcyTbrJbrKbrJbnwbuBbjrbjrbuCbjrbuBbjrbjrbjrbrNbuDaZEbuEbbRbtvbsVbbRbfmbbRbbRbbRbuJbnKbtzbrTaYlbqvbuKbmrbuMbsYbuObuNbnSbmraaaaaaaafbuPbuQbphbuSbuRaafaaaaaabshbtdbtcbuWbuVbuYbuXbuZbqHbvaaJqaJqbofbofbtfbJGbwzbBLbvjbvhbtgbtgbvhbvjbvhbvjbvhbvjbvhbvjbfJbfJbuabvnbsLbtkbtibpEbsvbtlbvsbvvbvubonbtmbtobtnbtxbtwbuobuobtAbuobuobtPbtSbtQbtUbvEbuobtWceXbvHbvJbvJbvJbvKbvKbvKbvKbvKbvMbtYbvObvNbvObvPbvObqebuzbhGbvQbrGbvRbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6969,72 +6983,72 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVapQbVwbVwbVwbVwbVwbXvbHEbXvbHEbXwbXxcAMbXybHEbCqbHEbLvaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBbXAbXzbXCbXBbXDbWBbXFbXEbODbOCbOMbVJbVMbCqbSAbLZbQgbXJbXKbLKbXMbXLbWQbOObXPbXObWQbXQbSIbXRbMKbXSbWabOdbVZbXTbXUbTTbXVbPhbRKbPjbXXbXWbXYbOhbVubzsbWebzsbBRbXZbPvbNcbOPbYabYdbYcbWibYabYebWjbYebPubPwbLTbDbbEmbEmbEmbYgbYfbRZbUfbMibUgbYhbRUbRUbUibDbbQZbYjbYicaZbQZbQZbYkbYmbZdbPsbPbbPLbPFbPMbUpbUpbTqbTrbkybYrbkybYsbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVapQapQbLvbLvbLvbYubYtbYwbYvbYxbHEbYybHEbLvaoVaoVaoVaoVaoVaoVaoVbESbVHbVIbYzbYBbYAbXCbYCbYzbYzbXFbYDbQbbPQbQdbVJbVMbCqbSAbLZbYIbYHbYHbYJbYLbYKbYNbQebYPbQqbWQbOdbSIbYQbYRbXSbYSbOdbVZbXTbUSbURbYTbQyapQbQAbYVbYUbYWbOhbVubzsbWebzsbHZbHZbPvbNcbNdbYXbYYbNdbYZbNdbNdbNdbNdbNdbNcbLTbDbbJNbJNbJNbJNbVibZabTcbZbbVibJNbJNbJNbJNbDbbTlbZcbTlcbabTlbQZbYkbYmbYlbYobQGbQIbWrbZhbQZbUpbTqbTrbkybtpbtpbtpbZiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafbLvbZkbZjbZjbZlbWzbLubCqbLvbLvaoVcceaoVaoVaoVaoVaoVbGpbVHbVIbYzbYzbZnbZpbZobYzbZqbZsbZrbZvbQKbQPbVJbVMbCqbZxbQQbDGbYHbZzbRicewbRjbRmbRkbRSbRobWQbZFbZGbXRbMKbXSbZHbOdbZIbXTbUSbZJbZKbRIbVvbPjbZLbXWbXWbOhbVubPnbWebZMbzsbZNbPvbZObTZbTZbZPbNdbZRbZQbZSbzsbZUbZTbLSbLTbDbbRTbRUbRUbZVbRVbMibRXbRZbZWbZXbEmbEmbEmbDbbZYbTlbTlbTlbTlbQZbZZbZZcaacabbPNbPNbWrbPNbQZbPNbTqbTrbkycadcaccaebZiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaaaaabCqbCqbCqbCqbCqbCqbYybCqbCqbCqbCqapQaoVaoVapQaaHcjnaoVaoVaoVbGpbVHbVIcagcaicahcakcajcamcalcaocanbSdbYFbStbVJcatcasbSRbSwbHPbYHcawbZybThbTgbTjbTibTHbTGcaDbPccaEbMKbMKbMKcaFbOdcaHcaGbUSbURbOdbQyapQbOhbOhbOhbOhbOhbVubPncaJcaIbzscaKcaMcaLbUXcaNcaObzscaQcaPcaRbzscaSbMbcaUcaTbDbbEmbSZbEmcaVbTabMibTcbMibTdcaWbEmbSZbEmbDbcaXbTlcaYcbccbbckacjWckNckMcbdbPNbWrbWrcbebQZbDhcbfcbgbkycbicbhbtpbZiaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaacyaaaaafaaaaafaaaaaSaafaafbCqbHEbHEbHEbHEbHEbHEbHEbHEbLubLvaoVaoVaoVaaHcjocmXaaHaaHapQbGpbVHbVIcblbYzbWBbWBbWBbYzcbmcbocbnbXGbTIbUcbVJbCqbCqbUlcbrcbtbYHbYHcbucdtbUmcaAcaAcaAcaAbWQbOdcbAcbzcbCcbBbQtcbDcbFcbEbXUbTTcbGbPhbRKbPjcbIcbHcbHbOhbVubPnbAwcbJbzsbzscbLcbKbzscbMcbNbzsbzscbObzsbzscbNbFrcbQcbPbDbbEmbEmbEmcbScbRbRZcbTbMibUgcbUbRUbRUbUibDbbTlbTlcbVbTlbTlbQZbZZbZZcbWcbXbPNcbZcbYcbYbQZbqgcbfbTrbkybkybkybtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacccccbaaaccacccccbaaaccacccccbaaaaaSaaaaaabLvccdbHEbCqbCqbCqbTzbCqbCqbCqbCqaoVaoVaoVcnBaaHaaHapQaoVaoVbGpbVHbVIbYzccgccfbWBcchbYzbYzbXFccibOCbUybVbbUCbVdbVcbVfbVebVhbVgbVobVmbVqbVpcerbVrbWhbVKccwccvccyccxbRAbRAbRDbTOcczbTUbRFbURccAbQyapQbQAccCccBccDbOhbVubzsbzsbWeccFccEcbLccGbzscbMccIccHccKccJccLccHccNccMbhGccObDbbDbbDbbDbbDbbDbbMiccPcfybDbbDbbDbbDbbDbbDbbQZbQZbQZbQZbQZbQZccRccRccSccTbQZbQZbQZbQZbQZbkyccUbTrbkyccWccVbtpbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaabLvccYccZbCqbSqbHEbHEcdabQacdbbCqaoVaoVaoVaoVapQaoVaoVaoVaoVbESbVHbVIbWBcddcdcbWBcdecdfbWBbXFcdgbWtbWsbWvbWubWKbWJbXmbXkbXobXnbXqbXpbXIbXHccsbXNcdtbYbccwcdwbOdcbAbTObTPcdycdxcdAcdzbMWcdBcdCbRIbVvbPjcdDcbHcbHbOhbVubzsbAwcdEcdGcdFcdIcdHbzscdJcdLcdKccMcdMccMbFrbHdcdNbhGcdObDbcfrcgicgicglcgkbMiccPcgnbDbaafaafaafaafbkycdQbNBblQcdRcdRbQZcdScdSccSbScbQZcmobtpcAKbtpbDhccUbXubkycdVbtpbtpbkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccaccXccbaafccaccXccbaafccaccXccbaaaaafaafaafbCqbLvbCqbCqbCqcdWcdYcgFcpYbSsbCqaoVaoVaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBceacdZceccebcedbWBcefceecehcegceibVJbYpbYnbYEbYqbYMbYGbZebYObZgbZfbZubZtbZAbZwceycexbOdcbAcezbOdbOdbOdcezcezcezbURceBceAapQbOhbOhbOhbOhbOhbVubzscaKceCceEceDceGceFbzsbzsceIceHceJbLSceLceKbzsbzsbhGcdObDbchochqchqchschrchuchtcjBbDbaafaaaaaaaafbkybtpceMbrGceOceNbQZcePcePceQbScbQZbkybkyceSceRbDhccUbTrbtpbtpbtpceTblPceUblPaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaaaafaafbCqceVbCqceWceYbCqbTzbCqbCqaoVapQaoVaoVapQaoVaoVapQaoVbESbVHbVIbVIbVIbVIbVIbVIbVIbVIbVJbVJbVJbVJbVJbVJbCqbZBbCqccwcfbcfbcfbcfcbZDbZCcfbbZEcfhcapccwbOdbQucficezbOdbOdbOdbOebULcezbURcezbLKapQapQapQapQapQapQbVucfjcfjcfjcflcfkcfjcfjcfjcfmcfocfnceJcfpceJceJbzscfqcbKcdObDbbDbccQccQbDbbDbccQcknccQbDbaaaaaaaaaaaabkybkyccUcfsbkybkybQZbQZbQZcftcfubQZbDhbkycaebtpckSccUcbgbkybkycfvbkybkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccaccXccbaaaccaccXccbaaaccaccXccbaaaaafaaaaaacfxcfwcfwcfwcfwbCqbCqcqncqybCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqcarcaqbTAcaxcazcaycaycaycaycaycaycaycaycaycaBcaBcaycaCceWccwcfFcfEcfHcgOcbqcbpcfbcbscfMctRccwcfNcfObRHcfQcfPcfRcfPcfQcfScfQcfTcezbLKbLKbLKaoVaoVapQaoVcfVcfUcfXcfWcfZcfYcgbcgacfjcgcbAwcgdcgfcgecghcggbKTbKTcgjcnHbkyaaaaaaaaaaaaaaaaafcskaafaaaaaaaaaaaaaaabkyczGcgocgmcgmcgpcgrcgqcgtcgscgubkybkybkybkycbvbkyccUbTrbkycgybtpbtpbkyaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaacgzaaaaaaaaacgzaaaaaaaaacgzaaaaaaaafcfxcfxcfxcgAcgCcgBcgEcgDbHEcAhcAicgGcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcbwbEPcbxcbyccwccwccwccwccwccwccwccwccwccwccwccwccwccwccwcfbcgMcgOccjcclcckcgSccmccoccnccwcfNcgWcgVcgYcgXchacgZchbbOdchdchcchfchechgcheaoVaoVapQaoVcfjchhchjchichlchkchnchmcfjbAwbAwceJceJcbKceJccMbAwbAwcbKczHbkybkybZibZibkybkybZiczQbZibkybkybZibZibZibkyczRczSbnschwchvchxchxchxchychAchzchCccpccqccqccqccrcctbkyccVbtpchHbkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafchJchIchIchKchLchLchLchLchLchLchLchLchLchLchLchMchOchNchOchPchRchQchScgHchUchTbQabCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqbCqccucdicdhcdjccwchYchYchZccwcibciacidciccifciecihcigcijcdkcfbcikcimcdlcdmcinciqcdncdpcdoccwbLKcitbMQciubMQcivbMQciubMQciwbMQcixbLKbLKbLKapQapQapQaoVcfjciyciAcizciCciBciEciDcfjciFbAwccMccMciGceJccMbAwciHcbKczTbUwbUwbUwbUwbUwbUwbUwczUcANczVczVczVczVczVczXczWblObkyciKciJbkybkybZibZibkybkyciLcbfcdqbnscdscdrcdubkybkybkybkybkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaaciPaaaaaaaaaciPaaaaaaaaaciPaaaaaaaafcfxcfxcfxciQciSciRcfwbHEbHEbHEbHEbCqaaaaaaaafaaaaaaaafaaaaaaaafaaabCqciTbCqciUcdvccwciXciWciZciYcjbcjacgRcgRcgRcdTcjecjdcjfcjacfbcjgcgOcdUciocjjcfbcejcelcekccwapQcphapQbVuapQcphapQbVuapQcpPapQcpPapQapQaoVaoVaoVapQapQcfjcjpcjrcjqcjtcjscjvcjucjxcjwcjzcjyccMbLSccMcjAbFrbHdchpczYczYczYczYczYczYczYcAaczZczYczYczYczYczYczYcAccAbcAdbkycjCcbfbkyaaaaaaaaaaaabkybtpcbfcjEcjDcjDcjFcjGcjDaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccacjHccbaaaccacjHccbaaaccacjHccbaaaaafaaaaaacfxcfwcfwcfwcfwcjIbLubHEbHEbCqbCqbLvcAjcjJcjJcjJcjJcjJcjJaafbCqbCqbCqcjKcemccwcjMciZciZciYckHcgRcencjNcjPcnAcgRcgRcgRcgRcfbcjUceoceocjYcjXcfbcepcfMcsFccwbOhckbbQAckbbOhckbbQAckbbOhckcbQAckdbOhaoVaoVaoVaoVaoVapQckfckecjrckgckickhckkckjcfjcklceJceJceJckmceJceJceJbzsbCqbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqckobkybkyckpcbfbkybkybZibZibkybkybtpckqckrcjDcktcksckucjDaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaafaaaaaaaaaaaaaagbCqbCqbCqckvbHEbCqckvbJfcjJckwckyckxckyckzcjJaaabCqbSsbHEckAcemccwckBckBckCccwckEckDckGcgRckFcnAckJckIckKckKcfbckLceqceqckPckOckRcesckTcetccwbOhckVckUckWbOhckYckXckZbOhclbclaclcbOhaoVaoVaoVaoVaoVaoVcfjcldclfcleclhclgcljclicfjclkclmcllcloclncAeccMccMbAwclpbHEbLvaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaabkyclqbDhbkyclsclrcltcgrcltcltcltcltclvcluclwcjDclyclxclzcjDaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEbTzbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcemccwckBckBckCccwclHcigclJceuceZcevclJcigclJclJcigclMcfaclQckHclPclRclNcgUcfdccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhapQapQapQapQapQapQcfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbHEbLvaafaafaafaafaaaaafaaaaafaaaaaaaaaaaaaaabkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaaaaafaafaaaaaaaagbCqbCqbCqbCqbHEbCqbCqbCqcjJcmycmAcmzcmBcmycjJaafbCqccwcmDcmCcfeccwckBckCckCccwcmGcmFcmIcffckFcfgcmLcmKcmLcmLcmNcfzcmQcmQcmRcmQcmQcfAcfCcfBccwbOhclUcmUclUbOhclWcmVclWbOhclZcmWclZbOhaoVaoVapQapQaoVaoVaoVaoVaoVcpOcmdcmYcnacmZcmdbAwcnccnbcbQcndcnebFrcngcnfbCqclpbLvaaaaaaaaaaafaaabZibZibZibkybkybkybkybkybkyciIbtpbkybkybkybkybkybtpbkyaafaaaaaaaaaaafcnjcnjcnkcnjcnjaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcfDccwccwccwccwccwcntcfGcgRcgRckFcgUcgRcgRcnwcnvcnxcgRcgRcgRcgRcnycgRckFcnAcfIccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaoVapQapQaoVaoVaoVaoVaoVaoVcpQcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaagaagaaaaaaaaaaafaaabZicmlcmmbkycmpcmocnibtpbYrcnJbtpcAKbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaaaSaaaaaaaaaaafaafaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnLcnNcnMcnPcnOcnRcnQcnScnRcnUcfJcgvcfLcnYcnXcoacnZcobcgwcgIcgxcgKcgJcsFccwcgLccwcgLccwcsFcgNcgRcgRcgPckFcnAcgQccwccwccwccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVcpQcmdcopcorcoqcosapQbzsceIcotbPnbPnbzsbzsaaaaafaaaaaaaaaaaaaaaaafaaabZicnhcnibYrbtpceRcnibkybkyckobkycnIcmocoubMBbNAbkybkyaafaaaaaaaaaaafaaacnjcnkcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaafaafaaaaaaaafbLvbHEbLvaafaafcjJcovcoxcowcozcoycoBcoAcoCcgTchDchBchEcoHcoHcoHcoJcoHcoLcoKchFcoMcjSchGccwchVchXchWchXciiccwcilcgRcipcirckFciscjScjScjScoZcpaccwcpbcigcpccpdcpdcpeaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQcmdcmdciMcmdcmdaaaapQaaacscaoVaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaabLvcAfcAgbCqbVLbtpcnicpgbkycskbkybkybkybZibZibkybkyaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcpWciNcgRcgRcpsclJcptckHcpuciOcpvcpvcpvcpycpxcAOcpzcpCcpBcpycpDcpDcnxcencocciVcjNcjNcjPcgUcjccpIciZcpIcpJczMczLcpMczNaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVcpQbVwcmdcpNcmdczIapQapQaaacsmaoVaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaabLvbLvbLvbCqbCqbkycnicmnbkycsyaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRciNcgRcgRcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcjhckFcgUcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaoVaoVaoVaoVcszaoVaoVaoVaoVczJbVwcqscqtcqsbVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaabZicqubZibZiaafaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcjicqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcAPccwcqBcqBcqBcqCccwcqAcigcigckFcgUccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVaoVaoVaoVapQbVwaaaaaaaaabVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcAQcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdccwckFcrwcjkcjlcjTcrhcqYaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVaoVaoVaoVaoVaoVbVwbVwbVwbVwbVwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcrlcrmbJebCqcigcrncrncrncrncrncrncrncrncigccwcrpcrocrrcrqcrpccwccwccwcqAccwccwcqYcqYcqYcqYcrscrIcrtcrucrvcqYcqYcqYcqYccwccwcqAccwccwcpEcjOcjmcjQcgRcrAcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvbLvbLvbLvbCqaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrHcrJcrKaoVaaHcsPcqYcqYcqYcqYczEcqYcqYcqYcqYcsPaaHaoVczFcrMcrLccwcjRccwccwcjVcrPcrRcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaSacycrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcrUaoVcAkcAlcAlcAlcAlcAlcAmcAlcAlcAlcAlcAlcAnaoVcrUcrVcrTccwcrWcrXccwcigcigcrYcigaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaSaaaaaaaaaaafaaaaaaaaacrkaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrZcsbcsaapQcAoaaHcsAaoVaoVaoVaoVcsAaoVaoVcsAaaHcAoaoVcsdcsfcseccwcsgcfKcigaafaaacsicshaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcsjaoVcApcAqaoVaoVaoVaoVaoVcsBaoVaoVaoVcAscAraoVcrUcrUcrTccwaagaagaagaafaaacsLcslcsocsncspcsncsocsncspcsncsocsncspcsncsocsncspcsqcsraaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsscstcrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsvcsuccwaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaacsLcswcshaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHcsAapQapQcsHcsCcsIapQcsJaoVaaHcAoaoVcrUcsxccwccwaaaaaaaagaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcsUcswcsraafaafcsDcsDcsDcsDcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaafaaaaaaaaacsEaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcsFccwcsGcrUaoVcApcAqaoVaoVapQcsRcsQcAtapQaoVaoVcAscAraoVcrUcsKccwcsFaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaafaaaaaacsLcswcshaaacsDcsNcsMcsOcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacpiaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHaoVcsSapQctmctfczDapQapQcsAaaHcAoaoVcrUcsxccwccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaacsUcsTcshcsDcsWcsVcsXcsDaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcsZcsYcsZcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsvcsucrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsscstccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafcsUctacsDctcctbctdcsDaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacpiaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcteaoVcApcAqaoVaoVaoVapQaoVaoVaoVaoVaoVcAscAraoVcrUcrUcrTccwaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgcthcsDctjctictkcsDctgctgaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaafaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaccwctlcsbcsaapQcAoaaHcsAaoVaoVcsAaoVaoVaoVaoVcsAaaHcAoaoVcsdcsfctnccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaafctgctpctoctrctqcttctsctuctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaacpiaaaaafaafaaSaaSaaSabaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUcrUaoVcAoaaHaaHcAuaaHaaHcAuaaHaaHcAuaaHaaHcAoaoVcrUcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctwctoctxctbctzctyctActyaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafctBaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUctCaoVcAvcAlcAlcAwcAlcAlcAwcAlcAlcAwcAlcAlcAxaoVctDcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctFctEctHctGctJctIctKctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjZccwccwccwcrUapQapQapQapQaoVaoVaoVaoVaoVapQapQapQapQcrUccwccwccwcjZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaaaaafctgctgctgctMctLctNctgctgctgaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaactvccwccwcigcigcigcigcigcigcigcigcigcigcigcigcigccwccwctvaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaafaaaaaactOctxctPctQctOaaaaaaaagaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaactvctvctvctvctRctvctvctvctvctvctvctvctRctvctvctvctvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaafaaaaaactOctxctSctzctOaaaaaaaagaagaagaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSctyctyaaSaafaafaafctgctUctTctVctgaafaafaafaaSctyctyaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXctWctZctYaaacuacuacuacuccubcudcuacuacuaaaacuecugcufcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXctWcufcuicujcuaculcukcuncumcupcuocuqcuacuscurctWcufcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuucuwcuvcuvcuxcuzcuycuBcuAcuCcuycuEcuDcuFcuFcuHcuGcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacuacuJcuycuLcuKcuMcuycuNcuacuOcuOcuQcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScuRctgctgctgcuacuUcuTcuVcuVcuWcuTcuXcuactgctgctgcuYcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacvacvccvbcvecvdcvacvfcvgcvaaaaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaaacvacvicvhcvkcvjcvmcvlcvncvaaaaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvocvlcvpcvpcvpcvlcvqcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvrcvpcvpcvscvpcvpcvtcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScvuctgctgcvacvacvlcvpcvvcvvcvvcvpcvlcvacvactgctgcvwcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhcsDcvacvxcvlcvycvvcvzcvvcvycvlcvAcvacsDctXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvlcvpcvCcvBcvDcvpcvlcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvrcvpcvEcvycvpcvpcvtcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaacvacvacvFcvpcvHcvGcvIcvpcvFcvacvaaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaScuScvJctgctgcvvcvacvacvfcvLcvKcvMcvbcvacvacvvctgctgcvNcuZaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaafaaacvacvacvacvPcvQcvacvaaaaaafaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcuhaaaaafaaacvScvRcvUcvTcvWcvVcvSaaaaafaaactXcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcuIcvYcvXcvZcvZcvScwacwccwbcwecwdcvScvXcvZcvXcwfcuPcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSctXcwgcwhcuvcuvcuvcwjcwicwlcwkcwncwmcwocuFcuFcuFcuFcwpcuhaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacuOcuOcuOcwqcuOcvScwrcwtcwscwvcwucwxcwwcwqcuOcwqcwqaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaScvScwzcwBcwAcwDcwCcvSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvScvScwEcwEcwEcvScvSaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaaaaabCqbCqbCqbCqbCqbCqbYybCqbCqbCqbCqapQaoVaoVapQaaHcjnaoVaoVaoVbGpbVHbVIcagcaicahcakcajcamcalcaocanbSdbYFbStbVJcatcasbSRbSwbHPbYHcawbZybThbTgbTjbTibTHbTGcaDbPccaEbMKbMKbMKcaFbOdcaHcaGbUSbURbOdbQyapQbOhbOhbOhbOhbOhcaJcaIcdEcbJbzscaKcaMcaLbUXcaNcaObzscaQcaPcaRbzscaSbMbcaUcaTbDbbEmbSZbEmcaVbTabMibTcbMibTdcaWbEmbSZbEmbDbcaXbTlcaYcbccbbckacjWckNckMcbdbPNbWrbWrcbebQZbDhcbfcbgbkycbicbhbtpbZiaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaacyaaaaafaaaaafaaaaaSaafaafbCqbHEbHEbHEbHEbHEbHEbHEbHEbLubLvaoVaoVaoVaaHcjocmXaaHaaHapQbGpbVHbVIcblbYzbWBbWBbWBbYzcbmcbocbnbXGbTIbUcbVJbCqbCqbUlcbrcbtbYHbYHcbucdtbUmcaAcaAcaAcaAbWQbOdcbAcbzcbCcbBbQtcbDcbFcbEbXUbTTcbGbPhbRKbPjcbIcbHcbHbOhapQbPnbAwceCbzsbzscbLcbKbzscbMcbNbzsbzscbObzsbzscbNbFrcbQcbPbDbbEmbEmbEmcbScbRbRZcbTbMibUgcbUbRUbRUbUibDbbTlbTlcbVbTlbTlbQZbZZbZZcbWcbXbPNcbZcbYcbYbQZbqgcbfbTrbkybkybkybtpbkyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacccccbaaaccacccccbaaaccacccccbaaaaaSaaaaaabLvccdbHEbCqbCqbCqbTzbCqbCqbCqbCqaoVaoVaoVcnBaaHaaHapQaoVaoVbGpbVHbVIbYzccgccfbWBcchbYzbYzbXFccibOCbUybVbbUCbVdbVcbVfbVebVhbVgbVobVmbVqbVpcerbVrbWhbVKccwccvccyccxbRAbRAbRDbTOcczbTUbRFbURccAbQyapQbQAccCccBccDbOhapQbzsbzscfVccFccEcbLccGbzscbMccIccHccKccJccLccHccNccMbhGccObDbbDbbDbbDbbDbbDbbMiccPcfybDbbDbbDbbDbbDbbDbbQZbQZbQZbQZbQZbQZccRccRccSccTbQZbQZbQZbQZbQZbkyccUbTrbkyccWccVbtpbkyaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaabLvccYccZbCqbSqbHEbHEcdabQacdbbCqaoVaoVaoVaoVapQaoVaoVaoVaoVbESbVHbVIbWBcddcdcbWBcdecdfbWBbXFcdgbWtbWsbWvbWubWKbWJbXmbXkbXobXnbXqbXpbXIbXHccsbXNcdtbYbccwcdwbOdcbAbTObTPcdycdxcdAcdzbMWcdBcdCbRIbVvbPjcdDcbHcbHbOhapQbzsbAwcfWcdGcdFcdIcdHbzscdJcdLcdKccMcdMccMbFrbHdcdNbhGcdObDbcfrcgicgicglcgkbMiccPcgnbDbaafaafaafaafbkycdQbNBblQcdRcdRbQZcdScdSccSbScbQZcmobtpcAKbtpbDhccUbXubkycdVbtpbtpbkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccaccXccbaafccaccXccbaafccaccXccbaaaaafaafaafbCqbLvbCqbCqbCqcdWcdYcgFcpYbSsbCqaoVaoVaoVaoVapQaoVaoVapQaoVbESbVHbVIbWBceacdZceccebcedbWBcefceecehcegceibVJbYpbYnbYEbYqbYMbYGbZebYObZgbZfbZubZtbZAbZwceycexbOdcbAcezbOdbOdbOdcezcezcezbURceBceAapQbOhbOhbOhbOhbOhapQbzscaKcfXceEceDceGceFbzsbzsceIceHceJbLSceLceKbzsbzsbhGcdObDbchochqchqchschrchuchtcjBbDbaafaaaaaaaafbkybtpceMbrGceOceNbQZcePcePceQbScbQZbkybkyceSceRbDhccUbTrbtpbtpbtpceTblPceUblPaagaagaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccaccXccbaaaccaccXccbaaaccaccXccbaafaafaaaaaaaafaafbCqceVbCqceWceYbCqbTzbCqbCqaoVapQaoVaoVapQaoVaoVapQaoVbESbVHbVIbVIbVIbVIbVIbVIbVIbVIbVJbVJbVJbVJbVJbVJbCqbZBbCqccwcfbcfbcfbcfcbZDbZCcfbbZEcfhcapccwbOdbQucficezbOdbOdbOdbOebULcezbURcezbLKapQapQapQapQapQapQapQcfjcfjchkcflcfkcfjcfjcfjcfmcfocfnceJcfpceJceJbzscfqcbKcdObDbbDbccQccQbDbbDbccQcknccQbDbaaaaaaaaaaaabkybkyccUcfsbkybkybQZbQZbQZcftcfubQZbDhbkycaebtpckSccUcbgbkybkycfvbkybkybkybkyaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccaccXccbaaaccaccXccbaaaccaccXccbaaaaafaaaaaacfxcfwcfwcfwcfwbCqbCqcqncqybCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqcarcaqbTAcaxcazcaycaycaycaycaycaycaycaycaycaBcaBcaycaCceWccwcfFcfEcfHcgOcbqcbpcfbcbscfMctRccwcfNcfObRHcfQcfPcfRcfPcfQcfScfQcfTcezbLKbLKbLKaoVaoVapQapQcfjcfjciBchlcfZcfYcgbcgacfjcgcbAwcgdcgfcgecghcggbKTbKTcgjcnHbkyaaaaaaaaaaaaaaaaafcskaafaaaaaaaaaaaaaaabkyczGcgocgmcgmcgpcgrcgqcgtcgscgubkybkybkybkycbvbkyccUbTrbkycgybtpbtpbkyaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaacgzaaaaaaaaacgzaaaaaaaaacgzaaaaaaaafcfxcfxcfxcgAcgCcgBcgEcgDbHEcAhcAicgGcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcgHcbwbEPcbxcbyccwccwccwccwccwccwccwccwccwccwccwccwccwccwccwcfbcgMcgOccjcclcckcgSccmccoccnccwcfNcgWcgVcgYcgXchacgZchbbOdchdchcchfchechgcheaoVaoVapQciCcfUcjpckhcizckicjrchnchmcfjbAwbAwceJceJcbKceJccMbAwbAwcbKczHbkybkybZibZibkybkybZiczQbZibkybkybZibZibZibkyczRczSbnschwchvchxchxchxchychAchzchCccpccqccqccqccrcctbkyccVbtpchHbkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafchJchIchIchKchLchLchLchLchLchLchLchLchLchLchLchMchOchNchOchPchRchQchScgHchUchTbQabCqbLvbLvbLvbLvbLvbLvbLvbLvbLvbCqbCqccucdicdhcdjccwchYchYchZccwcibciacidciccifciecihcigcijcdkcfbcikcimcdlcdmcinciqcdncdpcdoccwbLKcitbMQciubMQcivbMQciubMQciwbMQcixbLKbLKbLKapQapQapQbVucfjchhchjchicldckjciEciDcfjciFbAwccMccMciGceJccMbAwciHcbKczTbUwbUwbUwbUwbUwbUwbUwczUcANczVczVczVczVczVczXczWblObkyciKciJbkybkybZibZibkybkyciLcbfcdqbnscdscdrcdubkybkybkybkybkyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaaaaaciPaaaaaaaaaciPaaaaaaaaaciPaaaaaaaafcfxcfxcfxciQciSciRcfwbHEbHEbHEbHEbCqaaaaaaaafaaaaaaaafaaaaaaaafaaabCqciTbCqciUcdvccwciXciWciZciYcjbcjacgRcgRcgRcdTcjecjdcjfcjacfbcjgcgOcdUciocjjcfbcejcelcekccwapQcphapQbVuapQcphapQbVuapQcpPapQcpPapQapQaoVaoVaoVapQbVucfjciyciAcizcjtcjscjvcjucjxcjwcjzcjyccMbLSccMcjAbFrbHdchpczYczYczYczYczYczYczYcAaczZczYczYczYczYczYczYcAccAbcAdbkycjCcbfbkyaaaaaaaaaaaabkybtpcbfcjEcjDcjDcjFcjGcjDaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaafaaaccacjHccbaaaccacjHccbaaaccacjHccbaaaaafaaaaaacfxcfwcfwcfwcfwcjIbLubHEbHEbCqbCqbLvcAjcjJcjJcjJcjJcjJcjJaafbCqbCqbCqcjKcemccwcjMciZciZciYckHcgRcencjNcjPcnAcgRcgRcgRcgRcfbcjUceoceocjYcjXcfbcepcfMcsFccwbOhckbbQAckbbOhckbbQAckbbOhckcbQAckdbOhaoVaoVaoVaoVaoVbVuckfckecjrcjqcjrclecljclfcfjcklceJceJceJckmceJceJceJbzsbCqbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqbCqbLvbLvbLvbCqckobkybkyckpcbfbkybkybZibZibkybkybtpckqckrcjDcktcksckucjDaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaafaaaaaaaaaaaaaagbCqbCqbCqckvbHEbCqckvbJfcjJckwckyckxckyckzcjJaaabCqbSsbHEckAcemccwckBckBckCccwckEckDckGcgRckFcnAckJckIckKckKcfbckLceqceqckPckOckRcesckTcetccwbOhckVckUckWbOhckYckXckZbOhclbclaclcbOhaoVaoVaoVaoVaoVbVucfjclgclhckgcsqclickkcsrcfjclkclmcllcloclncAeccMccMbAwclpbHEbLvaaaaaaaaaaafaaaaafaaaaafaaaaaaaaaaaaaaabkyclqbDhbkyclsclrcltcgrcltcltcltcltclvcluclwcjDclyclxclzcjDaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHraaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaccacjHccbaafccacjHccbaafccacjHccbaaaaafaafaafaaaaaaaaaaagclBclAclBbHEbHEbTzbHEccdcjJclCclEclDclGclFcjJaaabCqceYbHEckAcemccwckBckBckCccwclHcigclJceuceZcevclJcigclJclJcigclMcfaclQckHclPclRclNcgUcfdccwbOhclUclTclUbOhclWclVclWbOhclYclXclZbOhapQapQapQapQapQbVucfjcfjcfjcmbcmdcmccmfcmecmdclkcmgccMcmicmhcmjcdNccMcmkbCqbHEbLvaafaafaafaafaaaaafaaaaafaaaaaaaaaaaaaaabkycmqbtpbkycmrbntbntcmsbntbnsbnsbnscmtcmtcmucjDcmwcmvcmxcjDaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafccacjHccbaaaccacjHccbaaaccacjHccbaafaafaaaaafaafaaaaaaaagbCqbCqbCqbCqbHEbCqbCqbCqcjJcmycmAcmzcmBcmycjJaafbCqccwcmDcmCcfeccwckBckCckCccwcmGcmFcmIcffckFcfgcmLcmKcmLcmLcmNcfzcmQcmQcmRcmQcmQcfAcfCcfBccwbOhclUcmUclUbOhclWcmVclWbOhclZcmWclZbOhaoVaoVapQapQaoVcaJbUraoVaoVcpOcmdcmYcnacmZcmdbAwcnccnbcbQcndcnebFrcngcnfbCqclpbLvaaaaaaaaaaafaaabZibZibZibkybkybkybkybkybkyciIbtpbkybkybkybkybkybtpbkyaafaaaaaaaaaaafcnjcnjcnkcnjcnjaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaccacnlccbaaaccacnlccbaaaccacnlccbaaaaaSaaaaaaaafaafaaaaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnmcnocnncnqcnpcjJcjJcjJccwcnrcmCcfDccwccwccwccwccwcntcfGcgRcgRckFcgUcgRcgRcnwcnvcnxcgRcgRcgRcgRcnycgRckFcnAcfIccwbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhbOhaoVapQapQaoVaoVaoVbVuaoVaoVcpQcmdcmccnCcmecmdbzscnDbHdcnFcnEbHdcnGbzsbzsbCqaagaagaaaaaaaaaaafaaabZicmlcmmbkycmpcmocnibtpbYrcnJbtpcAKbtpbtpbtpbtpbtpbkyaafaaaaaaaaaaafaaacnjcnKcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaafaaaaafaaaaafaaaaafaaaaafaaaaaSaaaaaaaaaaafaafaaaaaaaaaaaabLvbHEbLvaaaaaacjJcnLcnNcnMcnPcnOcnRcnQcnScnRcnUcfJcgvcfLcnYcnXcoacnZcobcgwcgIcgxcgKcgJcsFccwcgLccwcgLccwcsFcgNcgRcgRcgPckFcnAcgQccwccwccwccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVbVuaoVaoVcpQcmdcopcorcoqcosapQbzsceIcotbPnbPnbzsbzsaaaaafaaaaaaaaaaaaaaaaafaaabZicnhcnibYrbtpceRcnibkybkyckobkycnIcmocoubMBbNAbkybkyaafaaaaaaaaaaafaaacnjcnkcnjaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSabaaaSaaSaaSaaSaaSaaSaaSaaSaaSaaaaaaaaaaaaaafaafaaaaaaaafbLvbHEbLvaafaafcjJcovcoxcowcozcoycoBcoAcoCcgTchDchBchEcoHcoHcoHcoJcoHcoLcoKchFcoMcjSchGccwchVchXchWchXciiccwcilcgRcipcirckFciscjScjScjScoZcpaccwcpbcigcpccpdcpdcpeaaaaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVcpQcmdcmdciMcmdcmdaaaapQaaacscaoVaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaabLvcAfcAgbCqbVLbtpcnicpgbkycskbkybkybkybZibZibkybkyaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabLvbHEbLvaaaaaacjJcpjcplcpkcpncpmcjJcpocppcjJcpqcpWciNcgRcgRcpsclJcptckHcpuciOcpvcpvcpvcpycpxcAOcpzcpCcpBcpycpDcpDcnxcencocciVcjNcjNcjPcgUcjccpIciZcpIcpJczMczLcpMczNaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVcpQbVwcmdcpNcmdczIapQapQaaacsmaoVaaaaaaaaaaaaaaaaafaafaaaaaaaaaaafaaabLvbLvbLvbCqbCqbkycnicmnbkycsyaafaaaaafaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbCqbCqcpRbCqbCqaaacjJcpScpUcpTcjJcjJcjJcjJcjJccwcpVcgRciNcgRcgRcpXclJcpZckHcqacqccqbcqecqdccwcqfcqhcqgcqjcqiccwcqkcqlcqlcqccqackHcqmcjhckFcgUcqoccwcqpcigcqqcpdcpdcqraaaaaaaaaaoVaoVaoVaoVcszaoVbVuaoVaoVczJbVwcqscqtcqsbVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaabZicqubZibZiaafaafaaaaafaaaaaaaafaaaaaSaaSaaSabaaafaafaafaafcpiaafaafaafaafaafabaaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbCqciTbHEcqvbCqaafcjJcjJcjJcjJcjJaafaaaaaaaafccwcqwcgRcjicqxcqxcqzcigcigcqAccwcqCcqBcqBcqBccwcqDcqFcqEcqHcAPccwcqBcqBcqBcqCccwcqAcigcigckFcgUccwccwcigcigcigcigccwaafaafaafaafapQapQaoVaoVaoVaoVbVuaoVaoVapQbVwaaaaaaaaabVwapQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaafaaaaaabZibtpbZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaaaaaaaafaaaaafaaaaaacqJaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcqKcAQcqLbCqaafaaaaaaaafaaaaaaaafaaaaaaaafccwcqOcqNckHcqPcqRcqQcigcqScqTccwcqVcqUcqWcqUcqYcqXcracqZcrbcqGcqYcqUcqUcqUcrcccwcrecrdccwckFcrwcjkcjlcjTcrhcqYaaaaaaaaaaaaaaaaaaaoVaoVaoVaoVaoVaoVbVuaoVaoVaoVbVwbVwbVwbVwbVwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaabZicribZiaaaaaaaaaaaaaafaaaaaaaafaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvcrlcrmbJebCqcigcrncrncrncrncrncrncrncrncigccwcrpcrocrrcrqcrpccwccwccwcqAccwccwcqYcqYcqYcqYcrscrIcrtcrucrvcqYcqYcqYcqYccwccwcqAccwccwcpEcjOcjmcjQcgRcrAcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaagaagaaaaaaaaaaaaaaaaaaaaaaafaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLvbLvbLvbLvbCqaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrHcrJcrKaoVaaHcsPcqYcqYcqYcqYczEcqYcqYcqYcqYcsPaaHaoVczFcrMcrLccwcjRccwccwcjVcrPcrRcqYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaSacycrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcrUaoVcAkcAlcAlcAlcAlcAlcAmcAlcAlcAlcAlcAlcAnaoVcrUcrVcrTccwcrWcrXccwcigcigcrYcigaafaafaafaafaafaafaafaafaafaafaafaafcswaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaSaaaaaaaaaaafaaaaaaaaacrkaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrZcsbcsaapQcAoaaHcsAaoVaoVaoVaoVcsAaoVaoVcsAaaHcAoaoVcsdcsfcseccwcsgcfKcigaafaaacsicshaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaacswaaaaaaaaacsDcsDcsDcsDcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacrkaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcsjaoVcApcAqaoVaoVaoVaoVaoVcsBaoVaoVaoVcAscAraoVcrUcrUcrTccwaagaagaagaafaaacsLcslcsocsncspcsncsocsncspcsncsocsncspcsncsMcsncsncsncsOcsNcsUcsTcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcrDcrkcrFcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsscstcrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsvcsuccwaaaaaaaagaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaacswaagcsDcsDcsDcsVcsWcsVcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacrkaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHcsAapQapQcsHcsCcsIapQcsJaoVaaHcAoaoVcrUcsxccwccwaaaaaaaagaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafcswaagctacsXctactbctcctbcsDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaafaaaaaaaaacsEaaaaaaaaaaafaaaaaaaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcsFccwcsGcrUaoVcApcAqaoVaoVapQcsRcsQcAtapQaoVaoVcAscAraoVcrUcsKccwcsFaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagctdaagcsDctgcticthctcctjctiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrjcrjcrjcrjcrjaaacpiaaacrjcrjcrjcrjcrjaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwccwcsxcrUaoVcAoaaHaoVcsSapQctmctfczDapQapQcsAaaHcAoaoVcrUcsxccwccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaagcuacuacuacuactoctkctqctpaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaacrBcrCcrCcrCcrCcsZcsYcsZcrEcrEcrEcrEcrGaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcsvcsucrUaoVcAoaaHaoVaoVapQapQapQapQapQaoVaoVaaHcAoaoVcrUcsscstccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuacuactrcttctscuacuacuacuacuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafcrScrScrScrScrSaaacpiaaacrScrScrScrScrSaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwcrTcrUcteaoVcApcAqaoVaoVaoVapQaoVaoVaoVaoVaoVcAscAraoVcrUcrUcrTccwaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuactwctuctyctxctActzctFctEcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaaaaafaaaaafaaaaaacpiaaaaaaaafaaaaafaaaaaaaaSaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaccwctlcsbcsaapQcAoaaHcsAaoVaoVcsAaoVaoVaoVaoVcsAaaHcAoaoVcsdcsfctnccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacswaaaaaacuactHctGctJctIcuyctKctMctLcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaSaaSaaSaaSaaSaafaafaaacpiaaaaafaafaaSaaSaaSabaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUcrUaoVcAoaaHaaHcAuaaHaaHcAuaaHaaHcAuaaHaaHcAoaoVcrUcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafctOctNaafcuactQctPctTctSctVctUctXctWcuaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaafctBaafaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwctvcrUctCaoVcAvcAlcAlcAwcAlcAlcAwcAlcAlcAwcAlcAlcAxaoVctDcrUctvccwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafctZctYctZctZcuccubcuecudcugcufcufcufcufaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaaaafaaaaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacjZccwccwccwcrUapQapQapQapQaoVaoVaoVaoVaoVapQapQapQapQcrUccwccwccwcjZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZctZcuhcuictZcujcujculcukcujcufcumcumcufcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaaSaaSaaSaaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaactvccwccwcigcigcigcigcigcigcigcigcigcigcigcigcigccwccwctvaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuocuncuqcupcujcurcuucuscujcuvcuwcuwcuxcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaactvctvctvctvctRctvctvctvctvctvctvctvctRctvctvctvctvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuAcuzcuCcuBcuEcuDcuGcuFcuEcuHcuJcuIcuKcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZcuMcuLcuOcuNcuQcuPcuScuRcuUcuTcuWcuVcuXcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactZctZcuYcuzcuZcujcvccvecvdcujcvgcvicvhcufcufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvjcvmcvjcvkcvkcvocvncvkcvjcvqcvjcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvscvtcvjcvwcvucvzcvycvwcvjcvCcvBcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvDcvtcvjcvwcvucvzcvycvwcvjcvCcvEcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvFcvkcvkcvtcvjcvGcvucvIcvHcvJcvjcvCcvkcvkcvKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvkcvLcvjcvMcvucvzcvycvwcvjcvNcvkaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvQcvPcvScvRcvTcvycvVcvUcvWcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvXcvjcvZcvYcvzcvycwacvjcvXcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcvkcvXcvjcvGcwbcwccvycvJcvjcvXcvkaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvkcvXcvjcvwcvucvzcvycvwcvjcvXcvkcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvkcvXcvXcvjcvwcvucwdcvycvwcvjcvXcvXcvkaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacvfcvacwfcwecvbcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacwhcwgcwjcwicwkcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcvXcvacvacwmcwlcwocwncwpcvacvacvXcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcwqcvacvacwrcwrcwtcwscwrcvacvacwqcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvkcwqcvacvpcvpcvlcwucwncvpcvpcvacwqcvkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacwvcwxcwwcwAcwzcwCcwBcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvpcwjcwDcARcwEcwncvpcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvrcwucvvcAScvvcATcvrcvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAUcvacvacvxcvlcAVcvvcvvcvvcAWcvlcvAcvacvacAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacwyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvrcAZcAYcBacvvcvlcvrcvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacwvcvlcBbcBccvpcvlcwBcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvpcvlcBdcBecvlcvlcvpcvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvacvacvacvacvacvacvacvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacvacvacvacvacvacvacvacvacvacvacvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcvacvacvacvacvacvacvacvacvaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaacBfaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/generic/z6.dmm b/_maps/map_files/generic/z6.dmm index 851fd6d1b9c..e88c2c075fd 100644 --- a/_maps/map_files/generic/z6.dmm +++ b/_maps/map_files/generic/z6.dmm @@ -446,7 +446,7 @@ "iD" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/listeningpost) "iE" = (/turf/simulated/floor/plating/asteroid/airless,/area/mine/explored) "iF" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost) -"iG" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_animal/hostile/syndicate{desc = "A weary looking syndicate operative."; faction = "syndicate"},/turf/simulated/floor/plasteel,/area/awaymission/listeningpost) +"iG" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_animal/hostile/syndicate{desc = "A weary looking syndicate operative."},/turf/simulated/floor/plasteel,/area/awaymission/listeningpost) "iH" = (/obj/structure/table,/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "november report"},/obj/item/weapon/pen,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost) "iI" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel,/area/awaymission/listeningpost) "iJ" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/mask/gas,/obj/item/clothing/head/helmet/space/syndicate,/turf/simulated/floor/plasteel,/area/awaymission/listeningpost) @@ -472,7 +472,7 @@ "jd" = (/turf/simulated/mineral/clown,/area/mine/unexplored) "je" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/mine/explored) "jf" = (/turf/simulated/floor/plasteel/airless{icon_state = "gcircuit"},/area/mine/explored) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/cfg/admin.txt b/cfg/admin.txt index fa0b92dbdad..236e1dee367 100644 --- a/cfg/admin.txt +++ b/cfg/admin.txt @@ -12,4 +12,5 @@ cheridan giacomand rockdtben MrStonedOne -Jordie0608 \ No newline at end of file +Jordie0608 +Dunc \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm index 81fd5e1866f..41b3cd295df 100644 --- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm +++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm @@ -1,33 +1,19 @@ -#define FILTER_NOTHING -1 -#define FILTER_PLASMA 0 -#define FILTER_OXYGEN 1 -#define FILTER_NITROGEN 2 -#define FILTER_CARBONDIOXIDE 3 -#define FILTER_NITROUSOXIDE 4 +#define FILTER_NOTHING "" +//very cleverly using the gas IDs so as to simplify a bunch of logic +#define FILTER_PLASMA "plasma" +#define FILTER_OXYGEN "o2" +#define FILTER_NITROGEN "n2" +#define FILTER_CARBONDIOXIDE "co2" +#define FILTER_NITROUSOXIDE "n2o" /obj/machinery/atmospherics/components/trinary/filter + name = "gas filter" icon_state = "filter_off" density = 0 - - name = "gas filter" - can_unwrench = 1 - var/on = 0 - var/target_pressure = ONE_ATMOSPHERE - - var/filter_type = 0 -/* -Filter types: --1: Nothing - 0: Plasma: Plasma Toxin, Oxygen Agent B - 1: Oxygen: Oxygen ONLY - 2: Nitrogen: Nitrogen ONLY - 3: Carbon Dioxide: Carbon Dioxide ONLY - 4: Sleeping Agent (N2O) -*/ - + var/filter_type = FILTER_PLASMA var/frequency = 0 var/datum/radio_frequency/radio_connection @@ -108,39 +94,17 @@ Filter types: var/datum/gas_mixture/filtered_out = new filtered_out.temperature = removed.temperature - switch(filter_type) - if(FILTER_PLASMA) - filtered_out.toxins = removed.toxins - removed.toxins = 0 - - 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 - - if(FILTER_OXYGEN) - filtered_out.oxygen = removed.oxygen - removed.oxygen = 0 - - if(FILTER_NITROGEN) - filtered_out.nitrogen = removed.nitrogen - removed.nitrogen = 0 - - if(FILTER_CARBONDIOXIDE) - filtered_out.carbon_dioxide = removed.carbon_dioxide - removed.carbon_dioxide = 0 - - if(FILTER_NITROUSOXIDE) - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/sleeping_agent)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas - - else - filtered_out = null - + if(filter_type && removed.gases[filter_type]) + filtered_out.assert_gas(filter_type) + filtered_out.gases[filter_type][MOLES] = removed.gases[filter_type][MOLES] + removed.gases[filter_type][MOLES] = 0 + if(filter_type == FILTER_PLASMA && removed.gases["agent_b"]) + filtered_out.assert_gas("agent_b") + filtered_out.gases["agent_b"][MOLES] = removed.gases["agent_b"][MOLES] + removed.gases["agent_b"][MOLES] = 0 + removed.garbage_collect() + else + filtered_out = null air2.merge(filtered_out) air3.merge(removed) @@ -187,7 +151,7 @@ Filter types: switch(action) if("power") - on=!on + on = !on investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", "atmos") if("pressure") switch(params["pressure"]) @@ -197,7 +161,7 @@ Filter types: target_pressure = max(0, min(MAX_OUTPUT_PRESSURE, safe_input("Pressure control", "Enter new output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", target_pressure))) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", "atmos") if("filter") - src.filter_type = text2num(params["mode"]) + filter_type = params["mode"] var/filtering_name = "nothing" switch(filter_type) if(FILTER_PLASMA) diff --git a/code/ATMOSPHERICS/components/unary_devices/Freezer.dm b/code/ATMOSPHERICS/components/unary_devices/Freezer.dm index a44d0221f63..c4feb4fc6eb 100644 --- a/code/ATMOSPHERICS/components/unary_devices/Freezer.dm +++ b/code/ATMOSPHERICS/components/unary_devices/Freezer.dm @@ -107,7 +107,7 @@ src.current_temperature = min(T20C, src.current_temperature+amount) else src.current_temperature = max(min_temperature, src.current_temperature+amount) - active_power_usage = (current_heat_capacity * (T20C - current_temperature) / 100) + idle_power_usage + src.updateUsrDialog() /obj/machinery/atmospherics/components/unary/cold_sink/freezer/process() @@ -236,7 +236,7 @@ src.current_temperature = min((max_temperature), src.current_temperature+amount) else src.current_temperature = max(T20C, src.current_temperature+amount) - active_power_usage = (current_heat_capacity * (current_temperature - T20C) / 100) + idle_power_usage + src.updateUsrDialog() src.add_fingerprint(usr) return diff --git a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm index 65419798bfd..2fa1d39d472 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cold_sink.dm @@ -23,6 +23,7 @@ else icon_state = "cold_on" +//Nearly Identical Proc: /obj/machinery/atmospherics/components/unary/heat_reservoir/process_atmos() /obj/machinery/atmospherics/components/unary/cold_sink/process_atmos() ..() if(!on) @@ -34,10 +35,20 @@ var/old_temperature = air_contents.temperature if(combined_heat_capacity > 0) - var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature + //current_tempature is target tempature + var/combined_energy = current_heat_capacity*current_temperature + air_heat_capacity*air_contents.temperature air_contents.temperature = combined_energy/combined_heat_capacity - //todo: have current temperature affected. require power to bring down current temperature again - if(abs(old_temperature-air_contents.temperature) > 1) + + var/temperatureChange=abs(old_temperature-air_contents.temperature) + if(temperatureChange > 1) + //The new formula is based on change from current temp, instead of change from T20C + // The 10 const is not scaled yet. + active_power_usage = (current_heat_capacity * temperatureChange ) / 10 + idle_power_usage + //Note: Powerusage won't be subtracted off till next tick but one tick of not being accurate before machine turns off is fine update_parents() + else + //No change in temp, use idle power + active_power_usage= idle_power_usage + return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/cryo.dm b/code/ATMOSPHERICS/components/unary_devices/cryo.dm index 0e116e25725..4bb78933cc6 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cryo.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cryo.dm @@ -266,7 +266,7 @@ if(occupant.bodytemperature < T0C) occupant.sleeping = max(5 / efficiency, (1 / occupant.bodytemperature) * 2000 / efficiency) occupant.Paralyse(max(5 / efficiency, (1 / occupant.bodytemperature) * 3000 / efficiency)) - if(air_contents.oxygen > 2) + if(air_contents.gases["o2"] && air_contents.gases["o2"][MOLES] > 2) if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1) else occupant.adjustOxyLoss(-1) diff --git a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm index b08a4a214a7..b5fc8164279 100644 --- a/code/ATMOSPHERICS/components/unary_devices/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary_devices/heat_source.dm @@ -24,6 +24,7 @@ else icon_state = "cold_on" +//Nearly Identical Proc: /obj/machinery/atmospherics/components/unary/cold_sink/process_atmos() /obj/machinery/atmospherics/components/unary/heat_reservoir/process_atmos() ..() if(!on) @@ -39,8 +40,15 @@ var/combined_energy = current_temperature*current_heat_capacity + air_heat_capacity*air_contents.temperature air_contents.temperature = combined_energy/combined_heat_capacity - //todo: have current temperature affected. require power to bring up current temperature again - if(abs(old_temperature-air_contents.temperature) > 1) + + var/temperatureChange=abs(old_temperature-air_contents.temperature) + + if(temperatureChange > 1) + active_power_usage = (current_heat_capacity * temperatureChange ) / 10 + idle_power_usage update_parents() + else + //No change in temp, use idle power + active_power_usage= idle_power_usage + return 1 diff --git a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm index 0c0bee0b275..55215da0753 100644 --- a/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm +++ b/code/ATMOSPHERICS/components/unary_devices/oxygen_generator.dm @@ -46,7 +46,8 @@ var/added_oxygen = oxygen_content - total_moles air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen) - air_contents.oxygen += added_oxygen + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] += added_oxygen update_parents() diff --git a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm index d9e649c7a13..e4b9622b481 100644 --- a/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm +++ b/code/ATMOSPHERICS/components/unary_devices/portables_connector.dm @@ -8,6 +8,12 @@ use_power = 0 level = 0 +/obj/machinery/atmospherics/components/unary/portables_connector/New() + ..() + var/datum/gas_mixture/air_contents = AIR1 + + air_contents.volume = 0 + /obj/machinery/atmospherics/components/unary/portables_connector/visible level = 2 diff --git a/code/ATMOSPHERICS/components/unary_devices/tank.dm b/code/ATMOSPHERICS/components/unary_devices/tank.dm index 44ab5048460..dfff3ced12f 100644 --- a/code/ATMOSPHERICS/components/unary_devices/tank.dm +++ b/code/ATMOSPHERICS/components/unary_devices/tank.dm @@ -6,58 +6,36 @@ desc = "A large vessel containing pressurized gas." var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters density = 1 + var/gas_type = 0 /obj/machinery/atmospherics/components/unary/tank/New() ..() var/datum/gas_mixture/air_contents = AIR1 air_contents.volume = volume air_contents.temperature = T20C + if(gas_type) + air_contents.assert_gas(gas_type) + air_contents.gases[gas_type][MOLES] = AIR_CONTENTS + name = "[name] ([air_contents.gases[gas_type][GAS_NAME]])" /obj/machinery/atmospherics/components/unary/tank/carbon_dioxide - name = "pressure tank (Carbon Dioxide)" - -/obj/machinery/atmospherics/components/unary/tank/carbon_dioxide/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - air_contents.carbon_dioxide = AIR_CONTENTS + gas_type = "co2" /obj/machinery/atmospherics/components/unary/tank/toxins icon_state = "orange" - name = "pressure tank (Plasma)" - -/obj/machinery/atmospherics/components/unary/tank/toxins/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - air_contents.toxins = AIR_CONTENTS + gas_type = "plasma" /obj/machinery/atmospherics/components/unary/tank/oxygen_agent_b icon_state = "orange_2" - name = "pressure tank (Oxygen + Plasma)" - -/obj/machinery/atmospherics/components/unary/tank/oxygen_agent_b/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - var/datum/gas/oxygen_agent_b/trace_gas = new - trace_gas.moles = AIR_CONTENTS - air_contents.trace_gases += trace_gas + gas_type = "agent_b" /obj/machinery/atmospherics/components/unary/tank/oxygen icon_state = "blue" - name = "pressure tank (Oxygen)" - -/obj/machinery/atmospherics/components/unary/tank/oxygen/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - air_contents.oxygen = AIR_CONTENTS + gas_type = "o2" /obj/machinery/atmospherics/components/unary/tank/nitrogen icon_state = "red" - name = "pressure tank (Nitrogen)" - -/obj/machinery/atmospherics/components/unary/tank/nitrogen/New() - ..() - var/datum/gas_mixture/air_contents = AIR1 - air_contents.nitrogen = AIR_CONTENTS + gas_type = "n2" /obj/machinery/atmospherics/components/unary/tank/air icon_state = "grey" @@ -66,5 +44,6 @@ /obj/machinery/atmospherics/components/unary/tank/air/New() ..() var/datum/gas_mixture/air_contents = AIR1 - air_contents.oxygen = AIR_CONTENTS * 0.2 - air_contents.nitrogen = AIR_CONTENTS * 0.8 \ No newline at end of file + air_contents.assert_gases("o2", "n2") + air_contents.gases["o2"][MOLES] = AIR_CONTENTS * 0.2 + air_contents.gases["n2"][MOLES] = AIR_CONTENTS * 0.8 \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 4aaae1ba502..548db3f41d6 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -162,40 +162,56 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile) - if (!tile || !istype(tile)) + if (!istype(tile)) return 0 var/datum/gas_mixture/environment = tile.return_air() var/datum/gas_mixture/air_contents = AIR1 + var/list/env_gases = environment.gases if(scrubbing & SCRUBBING) - if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0)) + var/should_we_scrub = FALSE + for(var/id in env_gases) + if(id == "n2" || id == "o2") + continue + if(env_gases[id][MOLES]) + should_we_scrub = TRUE + break + if(should_we_scrub) var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() //Take a gas sample var/datum/gas_mixture/removed = tile.remove_air(transfer_moles) + var/list/removed_gases = removed.gases if (isnull(removed)) //in space return //Filter it var/datum/gas_mixture/filtered_out = new + var/list/filtered_gases = filtered_out.gases filtered_out.temperature = removed.temperature - if(scrub_Toxins) - filtered_out.toxins = removed.toxins - removed.toxins = 0 - if(scrub_CO2) - filtered_out.carbon_dioxide = removed.carbon_dioxide - removed.carbon_dioxide = 0 - 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) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas + if(scrub_Toxins && removed_gases["plasma"]) + filtered_out.assert_gas("plasma") + filtered_gases["plasma"][MOLES] = removed_gases["plasma"][MOLES] + removed.gases["plasma"][MOLES] = 0 + if(scrub_CO2 && removed_gases["co2"]) + filtered_out.assert_gas("co2") + filtered_out.gases["co2"][MOLES] = removed_gases["co2"][MOLES] + removed.gases["co2"][MOLES] = 0 + + if(removed_gases["agent_b"]) + filtered_out.assert_gas("agent_b") + filtered_out.gases["agent_b"][MOLES] = removed_gases["agent_b"][MOLES] + removed.gases["agent_b"][MOLES] = 0 + + if(scrub_N2O && removed_gases["n2o"]) + filtered_out.assert_gas("n2o") + filtered_out.gases["n2o"][MOLES] = removed_gases["n2o"][MOLES] + removed.gases["n2o"][MOLES] = 0 + + removed.garbage_collect() //Remix the resulting gases air_contents.merge(filtered_out) diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 6bbc0924dbe..6c765cd1c11 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -129,21 +129,14 @@ var/pipenetwarnings = 10 for(var/obj/machinery/atmospherics/pipe/member in members) member.air_temporary = new member.air_temporary.volume = member.volume + member.air_temporary.copy_from(air) + var/member_gases = member.air_temporary.gases - member.air_temporary.oxygen = air.oxygen*member.volume/air.volume - member.air_temporary.nitrogen = air.nitrogen*member.volume/air.volume - member.air_temporary.toxins = air.toxins*member.volume/air.volume - member.air_temporary.carbon_dioxide = air.carbon_dioxide*member.volume/air.volume + for(var/id in member_gases) + member_gases[id][MOLES] *= member.volume/air.volume member.air_temporary.temperature = air.temperature - if(air.trace_gases.len) - for(var/datum/gas/trace_gas in air.trace_gases) - var/datum/gas/corresponding = new trace_gas.type() - member.air_temporary.trace_gases += corresponding - - corresponding.moles = trace_gas.moles*member.volume/air.volume - /datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity) var/total_heat_capacity = air.heat_capacity() var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) @@ -202,8 +195,8 @@ var/pipenetwarnings = 10 var/list/datum/pipeline/PL = list() PL += src - for(var/i=1;i<=PL.len;i++) - var/datum/pipeline/P = PL[i] + for(var/i in PL) + var/datum/pipeline/P = i GL += P.air GL += P.other_airs for(var/obj/machinery/atmospherics/components/binary/valve/V in P.other_atmosmch) @@ -214,56 +207,26 @@ var/pipenetwarnings = 10 if(C.connected_device) GL += C.portableConnectorReturnAir() - var/total_volume = 0 var/total_thermal_energy = 0 var/total_heat_capacity = 0 - var/total_oxygen = 0 - var/total_nitrogen = 0 - var/total_toxins = 0 - var/total_carbon_dioxide = 0 - var/list/total_trace_gases = list() + var/datum/gas_mixture/total_gas_mixture = new(0) + + for(var/i in GL) + var/datum/gas_mixture/G = i + total_gas_mixture.volume += G.volume + + total_gas_mixture.merge(G) - for(var/datum/gas_mixture/G in GL) - total_volume += G.volume total_thermal_energy += G.thermal_energy() total_heat_capacity += G.heat_capacity() - total_oxygen += G.oxygen - total_nitrogen += G.nitrogen - total_toxins += G.toxins - total_carbon_dioxide += G.carbon_dioxide - - if(G.trace_gases.len) - for(var/datum/gas/trace_gas in G.trace_gases) - var/datum/gas/corresponding = locate(trace_gas.type) in total_trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - total_trace_gases += corresponding - - corresponding.moles += trace_gas.moles - - if(total_volume > 0) - - //Calculate temperature - var/temperature = 0 - - if(total_heat_capacity > 0) - temperature = total_thermal_energy/total_heat_capacity + total_gas_mixture.temperature = total_heat_capacity ? total_thermal_energy/total_heat_capacity : 0 + if(total_gas_mixture.volume > 0) //Update individual gas_mixtures by volume ratio for(var/datum/gas_mixture/G in GL) - G.oxygen = total_oxygen*G.volume/total_volume - G.nitrogen = total_nitrogen*G.volume/total_volume - G.toxins = total_toxins*G.volume/total_volume - G.carbon_dioxide = total_carbon_dioxide*G.volume/total_volume + G.copy_from(total_gas_mixture) + var/list/G_gases = G.gases + for(var/id in G_gases) + G_gases[id][MOLES] *= G.volume/total_gas_mixture.volume - G.temperature = temperature - - if(total_trace_gases.len) - for(var/datum/gas/trace_gas in total_trace_gases) - var/datum/gas/corresponding = locate(trace_gas.type) in G.trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - G.trace_gases += corresponding - - corresponding.moles = trace_gas.moles*G.volume/total_volume \ No newline at end of file diff --git a/code/ATMOSPHERICS/gas_types.dm b/code/ATMOSPHERICS/gas_types.dm new file mode 100644 index 00000000000..0fd17097415 --- /dev/null +++ b/code/ATMOSPHERICS/gas_types.dm @@ -0,0 +1,81 @@ +var/list/hardcoded_gases = list("o2","n2","co2","plasma") //the main four gases, which were at one time hardcoded + +/proc/meta_gas_list() + var/meta_list = new /list + for(var/gas_path in subtypesof(/datum/gas)) + var/list/gas_info = new(4) + var/datum/gas/g = gas_path + + gas_info[1] = initial(g.specific_heat) + gas_info[2] = initial(g.name) + gas_info[3] = initial(g.moles_visible) + if(gas_info[3] != null) + gas_info[4] = new /obj/effect/overlay/gas(initial(g.gas_overlay)) + + meta_list[initial(g.id)] = gas_info + . = meta_list + +/*||||||||||||||/----------\||||||||||||||*\ +||||||||||||||||[GAS DATUMS]|||||||||||||||| +||||||||||||||||\__________/|||||||||||||||| +||||These should never be instantiated. |||| +||||They exist only to make it easier |||| +||||to add a new gas. They are accessed |||| +||||only by meta_gas_list(). |||| +\*||||||||||||||||||||||||||||||||||||||||*/ + +/datum/gas + var/id = "" + var/specific_heat = 0 + var/name = "" + var/gas_overlay = "" //icon_state in icons/effects/tile_effects.dmi + var/moles_visible = null + +/datum/gas/oxygen + id = "o2" + specific_heat = 20 + name = "Oxygen" + +/datum/gas/nitrogen + id = "n2" + specific_heat = 20 + name = "Nitrogen" + +/datum/gas/carbon_dioxide //what the fuck is this? + id = "co2" + specific_heat = 30 + name = "Carbon Dioxide" + +/datum/gas/plasma + id = "plasma" + specific_heat = 200 + name = "Plasma" + gas_overlay = "plasma" + moles_visible = MOLES_PLASMA_VISIBLE + +/datum/gas/nitrous_oxide + id = "n2o" + specific_heat = 40 + name = "Nitrous Oxide" + gas_overlay = "nitrous_oxide" + moles_visible = 1 + +/datum/gas/oxygen_agent_b + id = "agent_b" + specific_heat = 300 + name = "Oxygen Agent B" + +/datum/gas/volatile_fuel + id = "v_fuel" + specific_heat = 30 + name = "Volatile Fuel" + +/obj/effect/overlay/gas/ + icon = 'icons/effects/tile_effects.dmi' + mouse_opacity = 0 + layer = 5 + appearance_flags = RESET_COLOR + +/obj/effect/overlay/gas/New(state) + . = ..() + icon_state = state \ No newline at end of file diff --git a/code/LINDA/LINDA_fire.dm b/code/LINDA/LINDA_fire.dm index 7f4beb5cf9b..a462e0887e0 100644 --- a/code/LINDA/LINDA_fire.dm +++ b/code/LINDA/LINDA_fire.dm @@ -11,9 +11,13 @@ var/datum/gas_mixture/air_contents = return_air() if(!air_contents) return 0 + + var/oxy = air_contents.gases["o2"] ? air_contents.gases["o2"][MOLES] : 0 + var/tox = air_contents.gases["plasma"] ? air_contents.gases["plasma"][MOLES] : 0 + if(active_hotspot) if(soh) - if(air_contents.toxins > 0.5 && air_contents.oxygen > 0.5) + if(tox > 0.5 && oxy > 0.5) if(active_hotspot.temperature < exposed_temperature) active_hotspot.temperature = exposed_temperature if(active_hotspot.volume < exposed_volume) @@ -22,11 +26,11 @@ var/igniting = 0 - if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && air_contents.toxins > 0.5) + if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && tox > 0.5) igniting = 1 if(igniting) - if(air_contents.oxygen < 0.5 || air_contents.toxins < 0.5) + if(oxy < 0.5 || tox < 0.5) return 0 active_hotspot = PoolOrNew(/obj/effect/hotspot, src) @@ -107,7 +111,7 @@ qdel(src) return - if(!(location.air) || location.air.toxins < 0.5 || location.air.oxygen < 0.5) + if(!(location.air) || !location.air.gases["plasma"] || !location.air.gases["o2"] || location.air.gases["plasma"][MOLES] < 0.5 || location.air.gases["o2"][MOLES] < 0.5) qdel(src) return diff --git a/code/LINDA/LINDA_system.dm b/code/LINDA/LINDA_system.dm index df19b357f82..9b490803820 100644 --- a/code/LINDA/LINDA_system.dm +++ b/code/LINDA/LINDA_system.dm @@ -156,6 +156,7 @@ var/const/SPAWN_AIR = 256 return var/datum/gas_mixture/G = new + var/list/new_gases = G.gases if(flag & SPAWN_20C) G.temperature = T20C @@ -164,22 +165,29 @@ var/const/SPAWN_AIR = 256 G.temperature += 1000 if(flag & SPAWN_TOXINS) - G.toxins += amount + G.assert_gas("plasma") + new_gases["plasma"][MOLES] += amount + if(flag & SPAWN_OXYGEN) - G.oxygen += amount + G.assert_gas("o2") + new_gases["o2"][MOLES] += amount + if(flag & SPAWN_CO2) - G.carbon_dioxide += amount + G.assert_gas("co2") + new_gases["co2"][MOLES] += amount + if(flag & SPAWN_NITROGEN) - G.nitrogen += amount + G.assert_gas("n2") + new_gases["n2"][MOLES] += amount if(flag & SPAWN_N2O) - var/datum/gas/sleeping_agent/T = new - T.moles += amount - G.trace_gases += T + G.assert_gas("n2o") + new_gases["n2o"][MOLES] += amount if(flag & SPAWN_AIR) - G.oxygen += MOLES_O2STANDARD * amount - G.nitrogen += MOLES_N2STANDARD * amount + G.assert_gases("o2","n2") + new_gases["o2"][MOLES] += MOLES_O2STANDARD * amount + new_gases["n2"][MOLES] += MOLES_N2STANDARD * amount air.merge(G) SSair.add_to_active(src, 0) \ No newline at end of file diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index b9f6a9675f6..52cae709b5a 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -15,26 +15,14 @@ //Create gas mixture to hold data for passing var/datum/gas_mixture/GM = new - GM.oxygen = oxygen - GM.carbon_dioxide = carbon_dioxide - GM.nitrogen = nitrogen - GM.toxins = toxins - - GM.temperature = temperature + GM.copy_from_turf(src) return GM -/turf/remove_air(amount as num) - var/datum/gas_mixture/GM = new +/turf/remove_air(amount) + var/datum/gas_mixture/GM = return_air() - var/sum = oxygen + carbon_dioxide + nitrogen + toxins - if(sum>0) - GM.oxygen = (oxygen/sum)*amount - GM.carbon_dioxide = (carbon_dioxide/sum)*amount - GM.nitrogen = (nitrogen/sum)*amount - GM.toxins = (toxins/sum)*amount - - GM.temperature = temperature + GM.remove(amount) return GM @@ -51,7 +39,7 @@ var/temperature_archived //USED ONLY FOR SOLIDS - var/atmos_overlay_type = "" //current active overlay + var/atmos_overlay_types = list() //gas IDs of current active overlays /turf/simulated/New() ..() @@ -61,11 +49,7 @@ visibilityChanged() if(!blocks_air) air = new - air.oxygen = oxygen - air.carbon_dioxide = carbon_dioxide - air.nitrogen = nitrogen - air.toxins = toxins - air.temperature = temperature + air.copy_from_turf(src) /turf/simulated/Destroy() visibilityChanged() @@ -169,22 +153,22 @@ excited_group.merge_groups(enemy_simulated.excited_group) //combine groups share_air(enemy_simulated) //share else - if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air)) + if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air)) excited_group.add_turf(enemy_simulated) //add enemy to our group share_air(enemy_simulated) //share else if(enemy_simulated.excited_group) - if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air)) + if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air)) enemy_simulated.excited_group.add_turf(src) //join self to enemy group share_air(enemy_simulated) //share else - if((recently_active == 1 && enemy_simulated.recently_active == 1) || !air.compare(enemy_simulated.air)) + if((recently_active == 1 && enemy_simulated.recently_active == 1) || air.compare(enemy_simulated.air)) var/datum/excited_group/EG = new //generate new group EG.add_turf(src) EG.add_turf(enemy_simulated) share_air(enemy_simulated) //share else - if(!air.compare(enemy_simulated.air)) //compare if + if(air.compare(enemy_simulated.air)) //compare if SSair.add_to_active(enemy_simulated) //excite enemy if(excited_group) excited_group.add_turf(enemy_simulated) //add enemy to group @@ -234,34 +218,24 @@ archived_cycle = SSair.times_fired /turf/simulated/proc/update_visuals() - var/new_overlay_type = tile_graphic() - if (new_overlay_type == atmos_overlay_type) - return - var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type) - if (atmos_overlay) - overlays -= atmos_overlay + var/list/new_overlay_types = tile_graphic() - atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) - if (atmos_overlay) - overlays += atmos_overlay - atmos_overlay_type = new_overlay_type + for(var/overlay in atmos_overlay_types-new_overlay_types) //doesn't remove overlays that would only be added + overlays -= overlay + atmos_overlay_types -= overlay -/turf/simulated/proc/get_atmos_overlay_by_name(var/name) - switch(name) - if("plasma") - return SSair.plasma_overlay - if("sleeping_agent") - return SSair.sleeptoxin_overlay - return null + for(var/overlay in new_overlay_types-atmos_overlay_types) //doesn't add overlays that already exist + overlays += overlay + + atmos_overlay_types = new_overlay_types /turf/simulated/proc/tile_graphic() - if(air.toxins > MOLES_PLASMA_VISIBLE) - return "plasma" - - var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air.trace_gases - if(sleeping_agent && (sleeping_agent.moles > 1)) - return "sleeping_agent" - return null + . = new /list + var/list/gases = air.gases + for(var/id in gases) + var/gas = gases[id] + if(gas[GAS_OVERLAY] && gas[MOLES] > gas[MOLES_VISIBLE]) + . += gas[GAS_OVERLAY] /turf/simulated/proc/share_air(turf/simulated/T) if(T.current_cycle < current_cycle) @@ -291,13 +265,14 @@ /atom/movable/var/pressure_resistance = 5 - +/atom/movable/var/last_high_pressure_movement_air_cycle = 0 /atom/movable/proc/experience_pressure_difference(pressure_difference, direction) set waitfor = 0 . = 0 if(!anchored && !pulledby) . = 1 - if(pressure_difference > pressure_resistance) + if(pressure_difference > pressure_resistance && last_high_pressure_movement_air_cycle < SSair.times_fired) + last_high_pressure_movement_air_cycle = SSair.times_fired step(src, direction) @@ -335,36 +310,17 @@ /datum/excited_group/proc/self_breakdown() var/datum/gas_mixture/A = new - var/datum/gas/sleeping_agent/S = new - A.trace_gases += S + var/list/A_gases = A.gases for(var/turf/simulated/T in turf_list) - A.oxygen += T.air.oxygen - A.carbon_dioxide+= T.air.carbon_dioxide - A.nitrogen += T.air.nitrogen - A.toxins += T.air.toxins - - if(T.air.trace_gases.len) - for(var/datum/gas/N in T.air.trace_gases) - S.moles += N.moles + A.merge(T.air) for(var/turf/simulated/T in turf_list) - T.air.oxygen = A.oxygen/turf_list.len - T.air.carbon_dioxide= A.carbon_dioxide/turf_list.len - T.air.nitrogen = A.nitrogen/turf_list.len - T.air.toxins = A.toxins/turf_list.len - - if(S.moles > 0) - if(T.air.trace_gases.len) - for(var/datum/gas/G in T.air.trace_gases) - G.moles = S.moles/turf_list.len - else - var/datum/gas/sleeping_agent/G = new - G.moles = S.moles/turf_list.len - T.air.trace_gases += G + var/T_gases = T.air.gases + for(var/id in T_gases) + T_gases[id][MOLES] = A_gases[id][MOLES]/turf_list.len T.update_visuals() - /datum/excited_group/proc/dismantle() for(var/turf/simulated/T in turf_list) T.excited = 0 @@ -477,4 +433,4 @@ var/heat = thermal_conductivity*delta_temperature* \ (heat_capacity*700000/(heat_capacity+700000)) //700000 is the heat_capacity from a space turf, hardcoded here - temperature -= heat/heat_capacity \ No newline at end of file + temperature -= heat/heat_capacity diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 3937282472f..8d410ef0764 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -8,11 +8,15 @@ #define MOLES_O2STANDARD (MOLES_CELLSTANDARD*O2STANDARD) // O2 standard value (21%) #define MOLES_N2STANDARD (MOLES_CELLSTANDARD*N2STANDARD) // N2 standard value (79%) -#define GAS_O2 (1 << 0) -#define GAS_N2 (1 << 1) -#define GAS_PL (1 << 2) -#define GAS_CO2 (1 << 3) -#define GAS_N2O (1 << 4) +//indices of values in gas lists. used by listmos. +#define MOLES 1 +#define ARCHIVE 2 +#define GAS_META 3 +//this is kinda hacky... but it means I don't have to change every single time they're called. +#define SPECIFIC_HEAT GAS_META][1 +#define GAS_NAME GAS_META][2 +#define GAS_OVERLAY GAS_META][4 +#define MOLES_VISIBLE GAS_META][3 //stuff you should probably leave well alone! //ATMOS diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index f928f620c39..f54ebddcc8d 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -159,9 +159,11 @@ Proc for attack log creation, because really why not /proc/add_logs(mob/user, mob/target, what_done, object=null, addition=null) var/newhealthtxt = "" + var/coordinates = "" var/turf/attack_location = get_turf(target) - var/coordinates = "([attack_location.x],[attack_location.y],[attack_location.z])" - if (target && isliving(target)) + if(attack_location) + coordinates = "([attack_location.x],[attack_location.y],[attack_location.z])" + if(target && isliving(target)) var/mob/living/L = target newhealthtxt = " (NEWHP: [L.health])" if(user && ismob(user)) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 680c56671f8..1ff987126c4 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -637,18 +637,16 @@ Turf and target are seperate in case you want to teleport some distance from a t /proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. var/turf/current = get_turf(source) var/turf/target_turf = get_turf(target) - var/steps = 0 - - while(current != target_turf) - if(steps > length) - return 0 - if(current.opacity) - return 0 - for(var/atom/A in current) - if(A.opacity) - return 0 + var/steps = 1 + if(current != target_turf) current = get_step_towards(current, target_turf) - steps++ + while(current != target_turf) + if(steps > length) return 0 + if(current.opacity) return 0 + for(var/atom/A in current) + if(A.opacity) return 0 + current = get_step_towards(current, target_turf) + steps++ return 1 @@ -989,20 +987,15 @@ var/list/WALLITEMS_INVERSE = list( user << "Results of analysis of \icon[icon] [target]." if(total_moles>0) - var/o2_concentration = air_contents.oxygen/total_moles - var/n2_concentration = air_contents.nitrogen/total_moles - var/co2_concentration = air_contents.carbon_dioxide/total_moles - var/plasma_concentration = air_contents.toxins/total_moles - - var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration) - user << "Pressure: [round(pressure,0.1)] kPa" - user << "Nitrogen: [round(n2_concentration*100)] %" - user << "Oxygen: [round(o2_concentration*100)] %" - user << "CO2: [round(co2_concentration*100)] %" - user << "Plasma: [round(plasma_concentration*100)] %" - if(unknown_concentration>0.01) - user << "Unknown: [round(unknown_concentration*100)] %" + + var/list/cached_gases = air_contents.gases + + for(var/id in cached_gases) + var/gas_concentration = cached_gases[id][MOLES]/total_moles + if(id in hardcoded_gases || gas_concentration > 0.01) //ensures the four primary gases are always shown. + user << "[cached_gases[id][GAS_NAME]]: [round(gas_concentration*100)] %" + user << "Temperature: [round(air_contents.temperature-T0C)] °C" else user << "[target] is empty!" @@ -1280,4 +1273,4 @@ B --><-- A return 0 for(var/atom/location = A.loc, location, location = location.loc) if(location == src) - return 1 \ No newline at end of file + return 1 diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 4f4fef2c952..70ed708c3e4 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -1,5 +1,6 @@ #define DEBUG //Enables byond profiling and full runtime logs - note, this may also be defined in your .dme file -//#define TESTING //Enables in-depth debug messages to runtime log (used for debugging) //By using the testing("message") proc you can create debug-feedback for people with this + //Enables in-depth debug messages to runtime log (used for debugging) +//#define TESTING //By using the testing("message") proc you can create debug-feedback for people with this //uncommented, but not visible in the release version) #define PRELOAD_RSC 1 /*set to: diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 647c2274bf3..258cb4f0847 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -16,4 +16,5 @@ var/global/list/table_recipes = list() //list of all table craft recipes var/global/list/rcd_list = list() //list of Rapid Construction Devices. var/global/list/apcs_list = list() //list of all Area Power Controller machines, seperate from machines for powernet speeeeeeed. var/global/list/tracked_implants = list() //list of all current implants that are tracked to work out what sort of trek everyone is on. Sadly not on lavaworld not implemented... -var/global/list/poi_list = list() //list of points of interest for observe/follow \ No newline at end of file +var/global/list/poi_list = list() //list of points of interest for observe/follow +var/global/list/pinpointer_list = list() //list of all pinpointers. Used to change stuff they are pointing to all at once. \ No newline at end of file diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index aa10b0b2793..59638116dd3 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -221,10 +221,8 @@ /mob/proc/CtrlClickOn(atom/A) A.CtrlClick(src) return -/atom/proc/CtrlClick(mob/user) - return -/atom/movable/CtrlClick(mob/living/user) +/atom/proc/CtrlClick(mob/user) var/mob/living/ML = user if(istype(ML)) ML.pulled(src) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index c6ea726b85d..74532a7ab70 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -27,17 +27,17 @@ WARNING("[src] threw alert [category] with new_master [new_master] while already having that alert with master [alert.master]") clear_alert(category) return .() - else if(alert.type == type && (!severity || severity == alert.severity)) + else if(alert.type != type) + clear_alert(category) + return .() + else if(!severity || severity == alert.severity) if(alert.timeout) clear_alert(category) return .() - else -// src << "threw alert not in need of update [category] [type] [severity]" + else //no need to update return 0 -// src << "updating alert [category] [type] [severity]" else alert = PoolOrNew(type) -// src << "throwing new alert [category] [type] [severity]" if(new_master) var/old_layer = new_master.layer diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 360f9833591..619a38e999f 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -18,9 +18,6 @@ var/datum/subsystem/air/SSair var/cost_pipenets = 0 var/cost_atmos_machinery = 0 - var/obj/effect/overlay/plasma_overlay //overlay for plasma - var/obj/effect/overlay/sleeptoxin_overlay //overlay for sleeptoxin - var/list/excited_groups = list() var/list/active_turfs = list() var/list/hotspots = list() @@ -36,9 +33,6 @@ var/datum/subsystem/air/SSair /datum/subsystem/air/New() NEW_SS_GLOBAL(SSair) - plasma_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="plasma";appearance_flags=RESET_COLOR}() - sleeptoxin_overlay = new /obj/effect/overlay{icon='icons/effects/tile_effects.dmi';mouse_opacity=0;layer=5;icon_state="sleeping_agent";appearance_flags=RESET_COLOR}() - /datum/subsystem/air/stat_entry(msg) msg += "C:{" msg += "AT:[round(cost_turfs,0.01)]|" @@ -169,32 +163,39 @@ var/datum/subsystem/air/SSair /datum/subsystem/air/proc/setup_allturfs(z_level) var/z_start = 1 var/z_finish = world.maxz + if(1 <= z_level && z_level <= world.maxz) z_level = round(z_level) z_start = z_level z_finish = z_level + var/list/turfs_to_init = block(locate(1, 1, z_start), locate(world.maxx, world.maxy, z_finish)) + for(var/turf/simulated/T in turfs_to_init) T.CalculateAdjacentTurfs() T.excited = 0 active_turfs -= T - if(!T.blocks_air) - T.update_visuals() - for(var/direction in cardinal) - if(!(T.atmos_adjacent_turfs & direction)) - continue - var/turf/enemy_tile = get_step(T, direction) - if(istype(enemy_tile,/turf/simulated/)) - var/turf/simulated/enemy_simulated = enemy_tile - if(!T.air.compare(enemy_simulated.air)) - T.excited = 1 - active_turfs |= T - break - else - if(!T.air.check_turf_total(enemy_tile)) - T.excited = 1 - active_turfs |= T - break + + if(T.blocks_air) + continue + + T.update_visuals() + + for(var/direction in cardinal) + if(!(T.atmos_adjacent_turfs & direction)) + continue + + var/turf/enemy_tile = get_step(T, direction) + var/datum/gas_mixture/enemy_air = enemy_tile.return_air() + + var/is_active = T.air.compare(enemy_air) + + if(is_active) + testing("Active turf found. Return value of compare(): [is_active]") + T.excited = 1 + active_turfs |= T + break + if(active_turfs.len) warning("There are [active_turfs.len] active turfs at roundstart, this is a mapping error caused by a difference of the air between the adjacent turfs. You can see its coordinates using \"Mapping -> Show roundstart AT list\" verb (debug verbs required)") for(var/turf/simulated/T in active_turfs) diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 05a3bc43131..cb3ae7d0a2b 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -12,6 +12,8 @@ var/datum/subsystem/minimap/SSminimap var/const/MAX_ICON_DIMENSION = 1024 var/const/ICON_SIZE = 4 + + var/max_initalized_zlevel = 0 /datum/subsystem/minimap/New() NEW_SS_GLOBAL(SSminimap) @@ -23,6 +25,7 @@ var/datum/subsystem/minimap/SSminimap generate(z) for (var/z = 1 to ZLEVEL_SPACEMAX) register_asset("minimap_[z].png", file("[getMinimapFile(z)].png")) + max_initalized_zlevel = ZLEVEL_SPACEMAX ..() /datum/subsystem/minimap/proc/generate(z, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy) @@ -173,9 +176,9 @@ var/datum/subsystem/minimap/SSminimap return "data/minimaps/[MAP_NAME]_[zlevel]" /datum/subsystem/minimap/proc/sendMinimaps(client/client) - for (var/z = 1 to world.maxz) + for (var/z = 1 to max_initalized_zlevel) send_asset(client, "minimap_[z].png") #ifdef MINIMAP_DEBUG #undef MINIMAP_DEBUG -#endif \ No newline at end of file +#endif diff --git a/code/controllers/subsystem/shuttles/emergency.dm b/code/controllers/subsystem/shuttles/emergency.dm index 82474f07afc..959262460a5 100644 --- a/code/controllers/subsystem/shuttles/emergency.dm +++ b/code/controllers/subsystem/shuttles/emergency.dm @@ -233,8 +233,8 @@ new /obj/item/clothing/suit/space/orange(src) new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/mask/gas(src) - new /obj/item/weapon/tank/internals/air(src) - new /obj/item/weapon/tank/internals/air(src) + new /obj/item/weapon/tank/internals/oxygen/red(src) + new /obj/item/weapon/tank/internals/oxygen/red(src) new /obj/item/weapon/pickaxe/emergency(src) new /obj/item/weapon/pickaxe/emergency(src) new /obj/item/weapon/survivalcapsule(src) diff --git a/code/controllers/subsystem/shuttles/supply.dm b/code/controllers/subsystem/shuttles/supply.dm index c22d6ea890e..4bb2baf855e 100644 --- a/code/controllers/subsystem/shuttles/supply.dm +++ b/code/controllers/subsystem/shuttles/supply.dm @@ -218,6 +218,7 @@ var/list/blacklist = list( /mob/living, /obj/effect/blob, + /obj/effect/rune, /obj/effect/spider/spiderling, /obj/item/weapon/disk/nuclear, /obj/machinery/nuclearbomb, diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 6ba2dd648b4..1f52a78a89d 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -122,7 +122,7 @@ var/list/diseases = subtypesof(/datum/disease) if(isturf(source.loc)) for(var/mob/living/carbon/C in oview(spread_range, source)) if(isturf(C.loc)) - if(AStar(source.loc, C.loc, null, /turf/proc/Distance, spread_range, adjacent = (spread_flags & AIRBORNE) ? /turf/proc/reachableAdjacentAtmosTurfs : /turf/proc/reachableAdjacentTurfs)) + if(AStar(source, C.loc,/turf/proc/Distance, spread_range, adjacent = (spread_flags & AIRBORNE) ? /turf/proc/reachableAdjacentAtmosTurfs : /turf/proc/reachableAdjacentTurfs)) C.ContractDisease(src) diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm index 2574159d70b..dfa125d547b 100644 --- a/code/datums/diseases/dna_spread.dm +++ b/code/datums/diseases/dna_spread.dm @@ -5,7 +5,7 @@ spread_flags = CONTACT_GENERAL cure_text = "Mutadone" cures = list("mutadone") - disease_flags = CAN_CARRY|CAN_RESIST + disease_flags = CAN_CARRY|CAN_RESIST|CURABLE agent = "S4E1 retrovirus" viable_mobtypes = list(/mob/living/carbon/human) var/datum/dna/original_dna = null diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm index 925b9a4a9b8..b6bcbfb5713 100644 --- a/code/datums/diseases/gbs.dm +++ b/code/datums/diseases/gbs.dm @@ -8,7 +8,7 @@ cure_chance = 15//higher chance to cure, since two reagents are required agent = "Gravitokinetic Bipotential SADS+" viable_mobtypes = list(/mob/living/carbon/human) - disease_flags = CAN_CARRY|CAN_RESIST + disease_flags = CAN_CARRY|CAN_RESIST|CURABLE permeability_mod = 1 severity = BIOHAZARD diff --git a/code/datums/diseases/magnitis.dm b/code/datums/diseases/magnitis.dm index cd600e214cd..769495d1ac2 100644 --- a/code/datums/diseases/magnitis.dm +++ b/code/datums/diseases/magnitis.dm @@ -6,7 +6,7 @@ cures = list("iron") agent = "Fukkos Miracos" viable_mobtypes = list(/mob/living/carbon/human) - disease_flags = CAN_CARRY|CAN_RESIST + disease_flags = CAN_CARRY|CAN_RESIST|CURABLE permeability_mod = 0.75 desc = "This disease disrupts the magnetic field of your body, making it act as if a powerful magnet. Injections of iron help stabilize the field." severity = MEDIUM @@ -24,16 +24,6 @@ for(var/mob/living/silicon/S in orange(2,affected_mob)) if(istype(S, /mob/living/silicon/ai)) continue step_towards(S,affected_mob) - /* - if(M.x > affected_mob.x) - M.x-- - else if(M.x < affected_mob.x) - M.x++ - if(M.y > affected_mob.y) - M.y-- - else if(M.y < affected_mob.y) - M.y++ - */ if(3) if(prob(2)) affected_mob << "You feel a strong shock course through your body." @@ -52,16 +42,6 @@ var/iter = rand(1,2) for(i=0,i affected_mob.x) - M.x-=rand(1,min(3,M.x-affected_mob.x)) - else if(M.x < affected_mob.x) - M.x+=rand(1,min(3,affected_mob.x-M.x)) - if(M.y > affected_mob.y) - M.y-=rand(1,min(3,M.y-affected_mob.y)) - else if(M.y < affected_mob.y) - M.y+=rand(1,min(3,affected_mob.y-M.y)) - */ if(4) if(prob(2)) affected_mob << "You feel a powerful shock course through your body." @@ -80,14 +60,4 @@ var/iter = rand(1,3) for(i=0,i affected_mob.x) - M.x-=rand(1,min(5,M.x-affected_mob.x)) - else if(M.x < affected_mob.x) - M.x+=rand(1,min(5,affected_mob.x-M.x)) - if(M.y > affected_mob.y) - M.y-=rand(1,min(5,M.y-affected_mob.y)) - else if(M.y < affected_mob.y) - M.y+=rand(1,min(5,affected_mob.y-M.y)) - */ return \ No newline at end of file diff --git a/code/datums/diseases/wizarditis.dm b/code/datums/diseases/wizarditis.dm index 40af37e773d..5e9043f8d04 100644 --- a/code/datums/diseases/wizarditis.dm +++ b/code/datums/diseases/wizarditis.dm @@ -7,7 +7,7 @@ cure_chance = 100 agent = "Rincewindus Vulgaris" viable_mobtypes = list(/mob/living/carbon/human) - disease_flags = CAN_CARRY|CAN_RESIST + disease_flags = CAN_CARRY|CAN_RESIST|CURABLE permeability_mod = 0.75 desc = "Some speculate, that this virus is the cause of Wizard Federation existance. Subjects affected show the signs of mental retardation, yelling obscure sentences or total gibberish. On late stages subjects sometime express the feelings of inner power, and, cite, 'the ability to control the forces of cosmos themselves!' A gulp of strong, manly spirits usually reverts them to normal, humanlike, condition." severity = HARMFUL diff --git a/code/datums/gas_mixture.dm b/code/datums/gas_mixture.dm index 015eaf03590..69293a78bf9 100644 --- a/code/datums/gas_mixture.dm +++ b/code/datums/gas_mixture.dm @@ -3,90 +3,108 @@ What are the archived variables for? Calculations are done using the archived variables with the results merged into the regular variables. This prevents race conditions that arise based on the order of tile processing. */ - -#define SPECIFIC_HEAT_TOXIN 200 -#define SPECIFIC_HEAT_AIR 20 -#define SPECIFIC_HEAT_CDO 30 -#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \ - (carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN) - #define MINIMUM_HEAT_CAPACITY 0.0003 #define QUANTIZE(variable) (round(variable,0.0000001))/*I feel the need to document what happens here. Basically this is used to catch most rounding errors, however it's previous value made it so that once gases got hot enough, most procedures wouldnt occur due to the fact that the mole counts would get rounded away. Thus, we lowered it a few orders of magnititude */ -/datum/gas - var/moles = 0 - var/specific_heat = 0 - var/moles_archived = 0 +var/list/meta_gas_info = meta_gas_list() //see ATMOSPHERICS/gas_types.dm +var/list/cached_gases_list = null -/datum/gas/sleeping_agent - specific_heat = 40 +/proc/gaslist(gasid) + if(!cached_gases_list) + cached_gases_list = new /list(meta_gas_info.len) -/datum/gas/oxygen_agent_b - specific_heat = 300 + if(!cached_gases_list[gasid]) + if(!meta_gas_info[gasid]) + CRASH("Error: no such gas type! Type : [gasid]") -/datum/gas/volatile_fuel - specific_heat = 30 + var/list/new_gas_list = new(3) + new_gas_list[MOLES] = 0 + new_gas_list[ARCHIVE] = 0 + new_gas_list[GAS_META] = meta_gas_info[gasid] + cached_gases_list[gasid] = new_gas_list + var/list/gas = cached_gases_list[gasid] + . = gas.Copy() /datum/gas_mixture - var/oxygen = 0 - var/carbon_dioxide = 0 - var/nitrogen = 0 - var/toxins = 0 - - var/volume = CELL_VOLUME - - var/temperature = 0 //in Kelvin - - var/last_share - - var/list/datum/gas/trace_gases = list() - - - var/tmp/oxygen_archived - var/tmp/carbon_dioxide_archived - var/tmp/nitrogen_archived - var/tmp/toxins_archived - + var/list/gases + var/temperature //in Kelvin var/tmp/temperature_archived + var/volume + var/last_share + var/tmp/fuel_burnt - var/tmp/fuel_burnt = 0 +/datum/gas_mixture/New(Volume = CELL_VOLUME) + . = ..() + gases = new + temperature = 0 + temperature_archived = 0 + volume = Volume + last_share = 0 + fuel_burnt = 0 + + //listmos procs + + //assert_gas(gas_id) - used to guarantee that the gas list for this id exists. + //Must be used before adding to a gas. May be used before reading from a gas. +/datum/gas_mixture/proc/assert_gas(gas_id) + var/cached_gases = gases + if(cached_gases[gas_id]) + return + cached_gases[gas_id] = gaslist(gas_id) //see ATMOSPHERICS/gas_types.dm + + //assert_gases(args) - shorthand for calling assert_gas() once for each gas type. +/datum/gas_mixture/proc/assert_gases() + for(var/id in args) + assert_gas(id) + + //add_gas(gas_id) - similar to assert_gas(), but does not check for an existing + //gas list for this id. + //Used instead of assert_gas() when you know the gas does not exist. Faster than assert_gas(). +/datum/gas_mixture/proc/add_gas(gas_id) + gases[gas_id] = gaslist(gas_id) + + //add_gases(args) - shorthand for calling add_gas() once for each gas_type. +/datum/gas_mixture/proc/add_gases() + for(var/id in args) + add_gas(id) + + //garbage_collect() - removes any gas list which is empty. + //Must be used after subtracting from a gas. Must be used after assert_gas() + //if assert_gas() was called only to read from the gas. + //By removing empty gases, processing speed is increased. +/datum/gas_mixture/proc/garbage_collect() + var/list/cached_gases = gases + for(var/id in cached_gases) + var/gas = cached_gases[id] + if(QUANTIZE(gas[MOLES]) <= 0 && QUANTIZE(gas[ARCHIVE]) <= 0) + cached_gases -= id //PV=nRT - related procedures /datum/gas_mixture/proc/heat_capacity() - var/heat_capacity = HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - heat_capacity += trace_gas.moles*trace_gas.specific_heat - return heat_capacity - + var/list/cached_gases = gases + . = 0 + for(var/id in cached_gases) + . += cached_gases[id][MOLES]*cached_gases[id][SPECIFIC_HEAT] /datum/gas_mixture/proc/heat_capacity_archived() - var/heat_capacity_archived = HEAT_CAPACITY_CALCULATION(oxygen_archived,carbon_dioxide_archived,nitrogen_archived,toxins_archived) - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - heat_capacity_archived += trace_gas.moles_archived*trace_gas.specific_heat - return heat_capacity_archived - + var/list/cached_gases = gases + . = 0 + for(var/id in cached_gases) + . += cached_gases[id][ARCHIVE]*cached_gases[id][SPECIFIC_HEAT] /datum/gas_mixture/proc/total_moles() - var/moles = oxygen + carbon_dioxide + nitrogen + toxins - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - moles += trace_gas.moles - return moles - + var/list/cached_gases = gases + . = 0 + for(var/id in cached_gases) + . += cached_gases[id][MOLES] /datum/gas_mixture/proc/return_pressure() if(volume>0) return total_moles()*R_IDEAL_GAS_EQUATION*temperature/volume return 0 - /datum/gas_mixture/proc/return_temperature() return temperature @@ -103,85 +121,96 @@ What are the archived variables for? /datum/gas_mixture/proc/react(atom/dump_location) + var/list/procgases = gases //this speeds things up because >byond var/reacting = 0 //set to 1 if a notable reaction occured (used by pipe_network) if(temperature < TCMB) temperature = TCMB - if(trace_gases.len > 0) - if(temperature > 900) - if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY) - var/datum/gas/oxygen_agent_b/trace_gas = locate(/datum/gas/oxygen_agent_b/) in trace_gases - if(trace_gas) - var/reaction_rate = min(carbon_dioxide*0.75, toxins*0.25, trace_gas.moles*0.05) + if(procgases["agent_b"] && temperature > 900 && procgases["plasma"] && procgases["co2"]) + if(procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY) + var/reaction_rate = min(procgases["co2"][MOLES]*0.75, procgases["plasma"][MOLES]*0.25, procgases["agent_b"][MOLES]*0.05) - carbon_dioxide -= reaction_rate - oxygen += reaction_rate + procgases["co2"][MOLES] -= reaction_rate - trace_gas.moles -= reaction_rate*0.05 + assert_gas("o2") //only need to assert oxygen, as this reaction doesn't occur without the other gases existing + procgases["o2"][MOLES] += reaction_rate - temperature -= (reaction_rate*20000)/heat_capacity() + procgases["agent_b"][MOLES] -= reaction_rate*0.05 - reacting = 1 + temperature -= (reaction_rate*20000)/heat_capacity() + + garbage_collect() + + reacting = 1 /* if(thermal_energy() > (PLASMA_BINDING_ENERGY*10)) - if(toxins > MINIMUM_HEAT_CAPACITY && carbon_dioxide > MINIMUM_HEAT_CAPACITY && (toxins+carbon_dioxide)/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high. - //world << "pre [temperature, [toxins], [carbon_dioxide] + if(procgases["plasma"] && procgases["co2"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY && procgases["co2"][MOLES] > MINIMUM_HEAT_CAPACITY && (procgases["plasma"][MOLES]+procgases["co2"][MOLES])/total_moles() >= FUSION_PURITY_THRESHOLD)//Fusion wont occur if the level of impurities is too high. + //world << "pre [temperature, [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]] var/old_heat_capacity = heat_capacity() - var/carbon_efficency = min(toxins/carbon_dioxide,MAX_CARBON_EFFICENCY) + var/carbon_efficency = min(procgases["plasma"][MOLES]/procgases["co2"][MOLES],MAX_CARBON_EFFICENCY) var/reaction_energy = thermal_energy() - var/moles_impurities = total_moles()-(toxins+carbon_dioxide) + var/moles_impurities = total_moles()-(procgases["plasma"][MOLES]+procgases["co2"][MOLES]) + var/plasma_fused = (PLASMA_FUSED_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY) var/carbon_catalyzed = (CARBON_CATALYST_COEFFICENT*carbon_efficency)*(temperature/PLASMA_BINDING_ENERGY) var/oxygen_added = carbon_catalyzed var/nitrogen_added = (plasma_fused-oxygen_added)-(thermal_energy()/PLASMA_BINDING_ENERGY) - reaction_energy = max(reaction_energy+((carbon_efficency*toxins)/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0) - toxins = max(toxins-plasma_fused,0) - carbon_dioxide = max(carbon_dioxide-carbon_catalyzed,0) - oxygen = max(oxygen+oxygen_added,0) - nitrogen = max(nitrogen+nitrogen_added,0) + reaction_energy = max(reaction_energy+((carbon_efficency*procgases["plasma"][MOLES])/((moles_impurities/carbon_efficency)+2)*10)+((plasma_fused/(moles_impurities/carbon_efficency))*PLASMA_BINDING_ENERGY),0) + + assert_gases("o2", "n2") + + procgases["plasma"][MOLES] -= plasma_fused + procgases["co2"][MOLES] -= carbon_catalyzed + procgases["o2"][MOLES] += oxygen_added + procgases["n2"][MOLES] += nitrogen_added + + garbage_collect() + if(reaction_energy > 0) reacting = 1 var/new_heat_capacity = heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) temperature = max(((temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB) //Prevents whatever mechanism is causing it to hit negative temperatures. - //world << "post [temperature], [toxins], [carbon_dioxide] + //world << "post [temperature], [procgases["plasma"][MOLES]], [procgases["co2"][MOLES]] */ - - fuel_burnt = 0 if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) - //world << "pre [temperature], [oxygen], [toxins]" - if(fire() > 0) + //world << "pre [temperature], [procgases["o2"][MOLES]], [procgases["plasma"][MOLES]]" + if(fire()) reacting = 1 - //world << "post [temperature], [oxygen], [toxins]" + //world << "post [temperature], [procgases["o2"][MOLES]], [procgases["plasma"][MOLES]]" return reacting /datum/gas_mixture/proc/fire() var/energy_released = 0 var/old_heat_capacity = heat_capacity() + var/list/procgases = gases //this speeds things up because accessing datum vars is slow - var/datum/gas/volatile_fuel/fuel_store = locate(/datum/gas/volatile_fuel/) in trace_gases - if(fuel_store) //General volatile gas burn - var/burned_fuel = 0 + if(procgases["v_fuel"] && procgases["v_fuel"][MOLES]) //General volatile gas burn + var/burned_fuel - if(oxygen < fuel_store.moles) - burned_fuel = oxygen - fuel_store.moles -= burned_fuel - oxygen = 0 + if(!procgases["o2"]) + burned_fuel = 0 + else if(procgases["o2"][MOLES] < procgases["v_fuel"][MOLES]) + burned_fuel = procgases["o2"][MOLES] + procgases["v_fuel"][MOLES] -= burned_fuel + procgases["o2"][MOLES] = 0 else - burned_fuel = fuel_store.moles - oxygen -= fuel_store.moles - trace_gases -= fuel_store - fuel_store = null + burned_fuel = procgases["v_fuel"][MOLES] + procgases["o2"][MOLES] -= procgases["v_fuel"][MOLES] - energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel - carbon_dioxide += burned_fuel - fuel_burnt += burned_fuel + if(burned_fuel) + energy_released += FIRE_CARBON_ENERGY_RELEASED * burned_fuel + + assert_gas("co2") + procgases["co2"][MOLES] += burned_fuel + + fuel_burnt += burned_fuel //Handle plasma burning - if(toxins > MINIMUM_HEAT_CAPACITY) + if(procgases["plasma"] && procgases["plasma"][MOLES] > MINIMUM_HEAT_CAPACITY) var/plasma_burn_rate = 0 var/oxygen_burn_rate = 0 //more plasma released at higher temperatures @@ -191,19 +220,22 @@ What are the archived variables for? else temperature_scale = (temperature-PLASMA_MINIMUM_BURN_TEMPERATURE)/(PLASMA_UPPER_TEMPERATURE-PLASMA_MINIMUM_BURN_TEMPERATURE) if(temperature_scale > 0) + assert_gas("o2") + assert_gas("co2") oxygen_burn_rate = OXYGEN_BURN_RATE_BASE - temperature_scale - if(oxygen > toxins*PLASMA_OXYGEN_FULLBURN) - plasma_burn_rate = (toxins*temperature_scale)/PLASMA_BURN_RATE_DELTA + if(procgases["o2"][MOLES] > procgases["plasma"][MOLES]*PLASMA_OXYGEN_FULLBURN) + plasma_burn_rate = (procgases["plasma"][MOLES]*temperature_scale)/PLASMA_BURN_RATE_DELTA else - plasma_burn_rate = (temperature_scale*(oxygen/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA + plasma_burn_rate = (temperature_scale*(procgases["o2"][MOLES]/PLASMA_OXYGEN_FULLBURN))/PLASMA_BURN_RATE_DELTA if(plasma_burn_rate > MINIMUM_HEAT_CAPACITY) - toxins -= plasma_burn_rate - oxygen -= plasma_burn_rate*oxygen_burn_rate - carbon_dioxide += plasma_burn_rate + procgases["plasma"][MOLES] -= plasma_burn_rate + procgases["o2"][MOLES] -= plasma_burn_rate*oxygen_burn_rate + procgases["co2"][MOLES] += plasma_burn_rate energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate) fuel_burnt += (plasma_burn_rate)*(1+oxygen_burn_rate) + garbage_collect() if(energy_released > 0) var/new_heat_capacity = heat_capacity() @@ -218,7 +250,7 @@ What are the archived variables for? /datum/gas_mixture/proc/merge(datum/gas_mixture/giver) //Merges all air from giver into self. Deletes giver. - //Returns: 1 on success (no failure cases yet) + //Returns: 1 in all cases /datum/gas_mixture/proc/remove(amount) //Proportionally removes amount of gas from the gas_mixture @@ -234,11 +266,11 @@ What are the archived variables for? /datum/gas_mixture/proc/share(datum/gas_mixture/sharer) //Performs air sharing calculations between two gas_mixtures assuming only 1 boundary length //Return: amount of gas exchanged (+ if sharer received) -/datum/gas_mixture/proc/mimic(turf/model) //I want this proc to die a painful death +/datum/gas_mixture/proc/mimic(turf/model) //Similar to share(...), except the model is not modified //Return: amount of gas exchanged -/datum/gas_mixture/proc/check_turf(turf/model) //I want this proc to die a painful death +/datum/gas_mixture/proc/check_turf(turf/model) //Returns: 0 if self-check failed or 1 if check passes /datum/gas_mixture/proc/temperature_mimic(turf/model, conduction_coefficient) //I want this proc to die a painful death @@ -249,20 +281,17 @@ What are the archived variables for? /datum/gas_mixture/proc/compare(datum/gas_mixture/sample) //Compares sample to self to see if within acceptable ranges that group processing may be enabled + //returns: a string indicating what check failed, or "" if check passes + +/datum/gas_mixture/proc/copy_from_turf(turf/model) + //Copies all gas info from the turf into the gas list along with copying temperature, then archives /datum/gas_mixture/archive() - oxygen_archived = oxygen - carbon_dioxide_archived = carbon_dioxide - nitrogen_archived = nitrogen - toxins_archived = toxins - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - trace_gas.moles_archived = trace_gas.moles - + var/list/cached_gases = gases + for(var/id in cached_gases) + cached_gases[id][ARCHIVE] = cached_gases[id][MOLES] temperature_archived = temperature - - return 1 + . = 1 /datum/gas_mixture/merge(datum/gas_mixture/giver) if(!giver) @@ -272,269 +301,145 @@ What are the archived variables for? var/self_heat_capacity = heat_capacity() var/giver_heat_capacity = giver.heat_capacity() var/combined_heat_capacity = giver_heat_capacity + self_heat_capacity - if(combined_heat_capacity != 0) + if(combined_heat_capacity) temperature = (giver.temperature*giver_heat_capacity + temperature*self_heat_capacity)/combined_heat_capacity + var/list/cached_gases = gases //accessing datum vars is slower than proc vars + var/list/giver_gases = giver.gases + for(var/giver_id in giver_gases) + assert_gas(giver_id) + cached_gases[giver_id][MOLES] += giver_gases[giver_id][MOLES] - oxygen += giver.oxygen - carbon_dioxide += giver.carbon_dioxide - nitrogen += giver.nitrogen - toxins += giver.toxins - - for(var/gas in giver.trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if(!corresponding) - corresponding = new trace_gas.type() - trace_gases += corresponding - corresponding.moles += trace_gas.moles - - return 1 + . = 1 /datum/gas_mixture/remove(amount) var/sum = total_moles() amount = min(amount,sum) //Can not take more air than tile has! + if(amount <= 0) return null var/datum/gas_mixture/removed = new + var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars + var/list/cached_gases = gases - - removed.oxygen = QUANTIZE((oxygen/sum)*amount) - removed.nitrogen = QUANTIZE((nitrogen/sum)*amount) - removed.carbon_dioxide = QUANTIZE((carbon_dioxide/sum)*amount) - removed.toxins = QUANTIZE((toxins/sum)*amount) - - oxygen -= removed.oxygen - nitrogen -= removed.nitrogen - carbon_dioxide -= removed.carbon_dioxide - toxins -= removed.toxins - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = new trace_gas.type() - removed.trace_gases += corresponding - - corresponding.moles = (trace_gas.moles/sum)*amount - trace_gas.moles -= corresponding.moles + for(var/id in cached_gases) + removed.assert_gas(id) + removed_gases[id][MOLES] = QUANTIZE((cached_gases[id][MOLES]/sum)*amount) + cached_gases[id][MOLES] -= removed_gases[id][MOLES] removed.temperature = temperature - return removed + garbage_collect() + + . = removed /datum/gas_mixture/remove_ratio(ratio) - if(ratio <= 0) return null ratio = min(ratio, 1) var/datum/gas_mixture/removed = new + var/list/removed_gases = removed.gases //accessing datum vars is slower than proc vars + var/list/cached_gases = gases - removed.oxygen = QUANTIZE(oxygen*ratio) - removed.nitrogen = QUANTIZE(nitrogen*ratio) - removed.carbon_dioxide = QUANTIZE(carbon_dioxide*ratio) - removed.toxins = QUANTIZE(toxins*ratio) - - oxygen -= removed.oxygen - nitrogen -= removed.nitrogen - carbon_dioxide -= removed.carbon_dioxide - toxins -= removed.toxins - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = new trace_gas.type() - removed.trace_gases += corresponding - - corresponding.moles = trace_gas.moles*ratio - trace_gas.moles -= corresponding.moles + for(var/id in cached_gases) + removed.assert_gas(id) + removed_gases[id][MOLES] = QUANTIZE(cached_gases[id][MOLES]*ratio) + cached_gases[id][MOLES] -= removed_gases[id][MOLES] removed.temperature = temperature - return removed + garbage_collect() + + . = removed /datum/gas_mixture/copy_from(datum/gas_mixture/sample) - oxygen = sample.oxygen - carbon_dioxide = sample.carbon_dioxide - nitrogen = sample.nitrogen - toxins = sample.toxins + var/list/cached_gases = gases //accessing datum vars is slower than proc vars + var/list/sample_gases = sample.gases + var/list/copied_gases = list() + for(var/sample_id in sample_gases) + assert_gas(sample_id) + cached_gases[sample_id][MOLES] = sample_gases[sample_id][MOLES] + copied_gases += sample_id + for(var/id in cached_gases-copied_gases) + assert_gas(id) + cached_gases[id][MOLES] = 0 - trace_gases.len=null - for(var/gas in sample.trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = new trace_gas.type() - trace_gases += corresponding - - corresponding.moles = trace_gas.moles + garbage_collect() temperature = sample.temperature return 1 /datum/gas_mixture/check_turf(turf/model, atmos_adjacent_turfs = 4) - var/delta_oxygen = (oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1) - var/delta_carbon_dioxide = (carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1) - var/delta_nitrogen = (nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1) - var/delta_toxins = (toxins_archived - model.toxins)/(atmos_adjacent_turfs+1) - - var/delta_temperature = (temperature_archived - model.temperature) - - if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen_archived*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins_archived*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return 0 - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND*4) - return 0 - - return 1 - -/datum/gas_mixture/proc/check_turf_total(turf/model) //I want this proc to die a painful death - var/delta_oxygen = (oxygen - model.oxygen) - var/delta_carbon_dioxide = (carbon_dioxide - model.carbon_dioxide) - var/delta_nitrogen = (nitrogen - model.nitrogen) - var/delta_toxins = (toxins - model.toxins) - - var/delta_temperature = (temperature - model.temperature) - - if(((abs(delta_oxygen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_oxygen) >= oxygen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_carbon_dioxide) >= carbon_dioxide*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_nitrogen) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_nitrogen) >= nitrogen*MINIMUM_AIR_RATIO_TO_SUSPEND)) \ - || ((abs(delta_toxins) > MINIMUM_AIR_TO_SUSPEND) && (abs(delta_toxins) >= toxins*MINIMUM_AIR_RATIO_TO_SUSPEND))) - return 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return 0 - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND*4) - return 0 - - return 1 + var/datum/gas_mixture/copied = new + copied.copy_from_turf(model) + . = compare(copied, datatype = ARCHIVE, adjacents = atmos_adjacent_turfs) /datum/gas_mixture/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) + . = 0 if(!sharer) - return 0 - var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/(atmos_adjacent_turfs+1) - var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/(atmos_adjacent_turfs+1) - var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/(atmos_adjacent_turfs+1) - var/delta_toxins = QUANTIZE(toxins_archived - sharer.toxins_archived)/(atmos_adjacent_turfs+1) + return + + var/moved_moles = 0 + var/abs_moved_moles = 0 + //make this local to the proc for sanic speed + var/list/sharercache = sharer.gases + var/list/selfcache = gases var/delta_temperature = (temperature_archived - sharer.temperature_archived) var/old_self_heat_capacity = 0 var/old_sharer_heat_capacity = 0 - var/heat_capacity_self_to_sharer = 0 - var/heat_capacity_sharer_to_self = 0 - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - - var/delta_air = delta_oxygen+delta_nitrogen - if(delta_air) - var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air - if(delta_air > 0) - heat_capacity_self_to_sharer += air_heat_capacity - else - heat_capacity_sharer_to_self -= air_heat_capacity - - if(delta_carbon_dioxide) - var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide - if(delta_carbon_dioxide > 0) - heat_capacity_self_to_sharer += carbon_dioxide_heat_capacity - else - heat_capacity_sharer_to_self -= carbon_dioxide_heat_capacity - - if(delta_toxins) - var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins - if(delta_toxins > 0) - heat_capacity_self_to_sharer += toxins_heat_capacity - else - heat_capacity_sharer_to_self -= toxins_heat_capacity - old_self_heat_capacity = heat_capacity() old_sharer_heat_capacity = sharer.heat_capacity() - oxygen -= delta_oxygen - sharer.oxygen += delta_oxygen + var/heat_capacity_self_to_sharer = 0 //heat capacity of the moles transferred from us to the sharer + var/heat_capacity_sharer_to_self = 0 //heat capacity of the moles transferred from the sharer to us - carbon_dioxide -= delta_carbon_dioxide - sharer.carbon_dioxide += delta_carbon_dioxide + for(var/sharer_id in sharercache-selfcache) + add_gas(sharer_id) //we can use add_gas() because we're looping only through the IDs not in our cache - nitrogen -= delta_nitrogen - sharer.nitrogen += delta_nitrogen + //GAS TRANSFER + for(var/id in selfcache) + if(!sharercache[id]) //checking here prevents an uneeded proc call if the check fails. + sharer.add_gas(id) - toxins -= delta_toxins - sharer.toxins += delta_toxins + var/gas = selfcache[id] + var/sharergas = sharercache[id] - var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) - last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) + var/delta = QUANTIZE(gas[ARCHIVE] - sharergas[ARCHIVE])/(atmos_adjacent_turfs+1) //the amount of gas that gets moved between the mixtures - var/list/trace_types_considered = list() - - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - var/datum/gas/corresponding = locate(trace_gas.type) in sharer.trace_gases - var/delta = 0 - - if(corresponding) - delta = QUANTIZE(trace_gas.moles_archived - corresponding.moles_archived)/(atmos_adjacent_turfs+1) - else - corresponding = new trace_gas.type() - sharer.trace_gases += corresponding - - delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) - - trace_gas.moles -= delta - corresponding.moles += delta - - if(delta) - var/individual_heat_capacity = trace_gas.specific_heat*delta + if(delta && abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) + var/gas_heat_capacity = delta * gas[SPECIFIC_HEAT] if(delta > 0) - heat_capacity_self_to_sharer += individual_heat_capacity + heat_capacity_self_to_sharer += gas_heat_capacity else - heat_capacity_sharer_to_self -= individual_heat_capacity + heat_capacity_sharer_to_self -= gas_heat_capacity //subtract here instead of adding the absolute value because we know that delta is negative. saves a proc call. - moved_moles += delta - last_share += abs(delta) + gas[MOLES] -= delta + sharergas[MOLES] += delta + moved_moles += delta + abs_moved_moles += abs(delta) - trace_types_considered += trace_gas.type - - for(var/gas in sharer.trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.type in trace_types_considered) - continue - var/datum/gas/corresponding - var/delta = 0 - corresponding = new trace_gas.type() - trace_gases += corresponding - - delta = trace_gas.moles_archived/5 - - trace_gas.moles -= delta - corresponding.moles += delta - - //Guaranteed transfer from sharer to self - var/individual_heat_capacity = trace_gas.specific_heat*delta - heat_capacity_sharer_to_self += individual_heat_capacity - - moved_moles += -delta - last_share += abs(delta) + last_share = abs_moved_moles + //THERMAL ENERGY TRANSFER if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) var/new_self_heat_capacity = old_self_heat_capacity + heat_capacity_sharer_to_self - heat_capacity_self_to_sharer var/new_sharer_heat_capacity = old_sharer_heat_capacity + heat_capacity_self_to_sharer - heat_capacity_sharer_to_self + //transfer of thermal energy (via changed heat capacity) between self and sharer if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) temperature = (old_self_heat_capacity*temperature - heat_capacity_self_to_sharer*temperature_archived + heat_capacity_sharer_to_self*sharer.temperature_archived)/new_self_heat_capacity if(new_sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) sharer.temperature = (old_sharer_heat_capacity*sharer.temperature-heat_capacity_sharer_to_self*sharer.temperature_archived + heat_capacity_self_to_sharer*temperature_archived)/new_sharer_heat_capacity + //thermal energy of the system (self and sharer) is unchanged if(abs(old_sharer_heat_capacity) > MINIMUM_HEAT_CAPACITY) if(abs(new_sharer_heat_capacity/old_sharer_heat_capacity - 1) < 0.10) // <10% change in sharer heat capacity @@ -542,78 +447,18 @@ What are the archived variables for? if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - sharer.temperature_archived*(sharer.total_moles() - moved_moles) - return delta_pressure*R_IDEAL_GAS_EQUATION/volume + . = delta_pressure*R_IDEAL_GAS_EQUATION/volume + + garbage_collect() + sharer.garbage_collect() /datum/gas_mixture/mimic(turf/model, atmos_adjacent_turfs = 4) - var/delta_oxygen = QUANTIZE(oxygen_archived - model.oxygen)/(atmos_adjacent_turfs+1) - var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - model.carbon_dioxide)/(atmos_adjacent_turfs+1) - var/delta_nitrogen = QUANTIZE(nitrogen_archived - model.nitrogen)/(atmos_adjacent_turfs+1) - var/delta_toxins = QUANTIZE(toxins_archived - model.toxins)/(atmos_adjacent_turfs+1) - - var/delta_temperature = (temperature_archived - model.temperature) - - var/heat_transferred = 0 - var/old_self_heat_capacity = 0 - var/heat_capacity_transferred = 0 - - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - - var/delta_air = delta_oxygen+delta_nitrogen - if(delta_air) - var/air_heat_capacity = SPECIFIC_HEAT_AIR*delta_air - heat_transferred -= air_heat_capacity*model.temperature - heat_capacity_transferred -= air_heat_capacity - - if(delta_carbon_dioxide) - var/carbon_dioxide_heat_capacity = SPECIFIC_HEAT_CDO*delta_carbon_dioxide - heat_transferred -= carbon_dioxide_heat_capacity*model.temperature - heat_capacity_transferred -= carbon_dioxide_heat_capacity - - if(delta_toxins) - var/toxins_heat_capacity = SPECIFIC_HEAT_TOXIN*delta_toxins - heat_transferred -= toxins_heat_capacity*model.temperature - heat_capacity_transferred -= toxins_heat_capacity - - old_self_heat_capacity = heat_capacity() - - oxygen -= delta_oxygen - carbon_dioxide -= delta_carbon_dioxide - nitrogen -= delta_nitrogen - toxins -= delta_toxins - - var/moved_moles = (delta_oxygen + delta_carbon_dioxide + delta_nitrogen + delta_toxins) - last_share = abs(delta_oxygen) + abs(delta_carbon_dioxide) + abs(delta_nitrogen) + abs(delta_toxins) - - if(trace_gases.len) - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - var/delta = 0 - - delta = trace_gas.moles_archived/(atmos_adjacent_turfs+1) - - trace_gas.moles -= delta - - var/heat_cap_transferred = delta*trace_gas.specific_heat - heat_transferred += heat_cap_transferred*temperature_archived - heat_capacity_transferred += heat_cap_transferred - moved_moles += delta - moved_moles += abs(delta) - - if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) - var/new_self_heat_capacity = old_self_heat_capacity - heat_capacity_transferred - if(new_self_heat_capacity > MINIMUM_HEAT_CAPACITY) - temperature = (old_self_heat_capacity*temperature - heat_capacity_transferred*temperature_archived)/new_self_heat_capacity - - temperature_mimic(model, model.thermal_conductivity) - - if((delta_temperature > MINIMUM_TEMPERATURE_TO_MOVE) || abs(moved_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) - var/delta_pressure = temperature_archived*(total_moles() + moved_moles) - model.temperature*(model.oxygen+model.carbon_dioxide+model.nitrogen+model.toxins) - return delta_pressure*R_IDEAL_GAS_EQUATION/volume - else - return 0 + var/datum/gas_mixture/copied = new + copied.copy_from_turf(model) + . = share(copied, atmos_adjacent_turfs) /datum/gas_mixture/temperature_share(datum/gas_mixture/sharer, conduction_coefficient) - + //transfer of thermal energy (via conduction) between self and sharer var/delta_temperature = (temperature_archived - sharer.temperature_archived) if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER) var/self_heat_capacity = heat_capacity_archived() @@ -623,8 +468,9 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer_heat_capacity/(self_heat_capacity+sharer_heat_capacity)) - temperature -= heat/self_heat_capacity - sharer.temperature += heat/sharer_heat_capacity + temperature = max(temperature - heat/self_heat_capacity, TCMB) + sharer.temperature = max(sharer.temperature + heat/sharer_heat_capacity, TCMB) + //thermal energy of the system (self and sharer) is unchanged /datum/gas_mixture/temperature_mimic(turf/model, conduction_coefficient) var/delta_temperature = (temperature - model.temperature) @@ -635,7 +481,7 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity)) - temperature -= heat/self_heat_capacity + temperature = max(temperature - heat/self_heat_capacity, TCMB) /datum/gas_mixture/temperature_turf_share(turf/simulated/sharer, conduction_coefficient) var/delta_temperature = (temperature_archived - sharer.temperature) @@ -646,53 +492,54 @@ What are the archived variables for? var/heat = conduction_coefficient*delta_temperature* \ (self_heat_capacity*sharer.heat_capacity/(self_heat_capacity+sharer.heat_capacity)) - temperature -= heat/self_heat_capacity - sharer.temperature += heat/sharer.heat_capacity + temperature = max(temperature - heat/self_heat_capacity, TCMB) + sharer.temperature = max(sharer.temperature + heat/sharer.heat_capacity, TCMB) -/datum/gas_mixture/compare(datum/gas_mixture/sample) - if((abs(oxygen-sample.oxygen) > MINIMUM_AIR_TO_SUSPEND) && \ - ((oxygen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.oxygen))) - return 0 - if((abs(nitrogen-sample.nitrogen) > MINIMUM_AIR_TO_SUSPEND) && \ - ((nitrogen < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen) || (nitrogen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.nitrogen))) - return 0 - if((abs(carbon_dioxide-sample.carbon_dioxide) > MINIMUM_AIR_TO_SUSPEND) && \ - ((carbon_dioxide < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide) || (oxygen > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.carbon_dioxide))) - return 0 - if((abs(toxins-sample.toxins) > MINIMUM_AIR_TO_SUSPEND) && \ - ((toxins < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins) || (toxins > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*sample.toxins))) - return 0 +/datum/gas_mixture/compare(datum/gas_mixture/sample, datatype = MOLES, adjacents = 0) + . = "" + var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars + var/list/cached_gases = gases + + for(var/id in cached_gases|sample_gases) + var/gas_moles = cached_gases[id] ? cached_gases[id][datatype] : 0 + var/sample_moles = sample_gases[id] ? sample_gases[id][datatype] : 0 + var/delta = abs(gas_moles - sample_moles)/(adjacents+1) + if(delta > MINIMUM_AIR_TO_SUSPEND && \ + delta > gas_moles*MINIMUM_AIR_RATIO_TO_SUSPEND) + return id if(total_moles() > MINIMUM_AIR_TO_SUSPEND) - if((abs(temperature-sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ - ((temperature < (1-MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature) || (temperature > (1+MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND)*sample.temperature))) - return 0 + var/temp + var/sample_temp - for(var/gas in sample.trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.moles_archived > MINIMUM_AIR_TO_SUSPEND) - var/datum/gas/corresponding = locate(trace_gas.type) in trace_gases - if(corresponding) - if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ - ((corresponding.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles) || (corresponding.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*trace_gas.moles))) - return 0 - else - return 0 + switch(datatype) + if(MOLES) + temp = temperature + sample_temp = sample.temperature + if(ARCHIVE) + temp = temperature_archived + sample_temp = sample.temperature_archived - for(var/gas in trace_gases) - var/datum/gas/trace_gas = gas - if(trace_gas.moles > MINIMUM_AIR_TO_SUSPEND) - var/datum/gas/corresponding = locate(trace_gas.type) in sample.trace_gases - if(corresponding) - if((abs(trace_gas.moles - corresponding.moles) > MINIMUM_AIR_TO_SUSPEND) && \ - ((trace_gas.moles < (1-MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles) || (trace_gas.moles > (1+MINIMUM_AIR_RATIO_TO_SUSPEND)*corresponding.moles))) - return 0 - else - return 0 - return 1 + var/delta_temperature = abs(temp-sample_temp) + if((delta_temperature > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) && \ + delta_temperature > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND*temp) + return "temp" +/datum/gas_mixture/copy_from_turf(turf/model) + assert_gases(arglist(hardcoded_gases)) + var/list/cached_gases = gases + cached_gases["o2"][MOLES] = model.oxygen + cached_gases["n2"][MOLES] = model.nitrogen + cached_gases["plasma"][MOLES] = model.toxins + cached_gases["co2"][MOLES] = model.carbon_dioxide + for(var/id in cached_gases-hardcoded_gases) + cached_gases[id][MOLES] = 0 //turfs don't account for anything other than the four old hardcoded gases + + temperature = model.temperature + + garbage_collect() //Takes the amount of the gas you want to PP as an argument //So I don't have to do some hacky switches/defines/magic strings diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 436e882d576..5f734dbbebb 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -508,7 +508,8 @@ else if (istype(current, /mob/living/carbon/monkey)) var/found = 0 for(var/datum/disease/D in current.viruses) - if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1 + if(istype(D, /datum/disease/transformation/jungle_fever)) + found = 1 if(found) text += "healthy|INFECTED|human|other" @@ -595,7 +596,6 @@ usr << browse(out, "window=edit_memory[src];size=500x600") - /datum/mind/Topic(href, href_list) if(!check_rights(R_ADMIN)) return @@ -620,27 +620,142 @@ if (href_list["obj_edit"]) objective = locate(href_list["obj_edit"]) if (!objective) - return //sanity - def_value = objective.type + return + objective_pos = objectives.Find(objective) - var/datum/objective/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in (typesof(/datum/objective) - list(/datum/objective, /datum/objective/default, /datum/objective/escape_obj, /datum/objective/changeling_team_objective)) //keep out the abstract ones + //Text strings are easy to manipulate. Revised for simplicity. + var/temp_obj_type = "[objective.type]"//Convert path into a text string. + def_value = copytext(temp_obj_type, 19)//Convert last part of path into an objective keyword. + if(!def_value)//If it's a custom objective, it will be an empty string. + def_value = "custom" + + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom","follower block (HOG)","build (HOG)","deicide (HOG)", "follower escape (HOG)", "sacrifice prophet (HOG)") if (!new_obj_type) return - if (initial(new_obj_type.required_role) != special_role && initial(new_obj_type.required_role) != null) - if(alert("The objective requires a special_role that this mind does not have. The player may not be able to complete the objective. Are you sure you want to continue?","uh oh" ,"Yes", "No") == "No") - return - var/datum/objective/new_objective = add_objective(src, new_obj_type) + var/datum/objective/new_objective = null - if (istype(new_objective, /datum/objective/custom)) //it's lame I know but this type is snowflaky by its very nature - var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "") - if (!expl) - qdel(new_objective) - return - new_objective.explanation_text = expl + switch (new_obj_type) + if ("assassinate","protect","debrain","maroon") + var/list/possible_targets = list("Free objective") + for(var/datum/mind/possible_target in ticker.minds) + if ((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human)) + possible_targets += possible_target.current + + var/mob/def_target = null + var/objective_list[] = list(/datum/objective/assassinate, /datum/objective/protect, /datum/objective/debrain, /datum/objective/maroon) + if (objective&&(objective.type in objective_list) && objective:target) + def_target = objective:target.current + + var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets + if (!new_target) + return + + var/objective_path = text2path("/datum/objective/[new_obj_type]") + if (new_target == "Free objective") + new_objective = new objective_path + new_objective.owner = src + new_objective:target = null + new_objective.explanation_text = "Free objective" + else + new_objective = new objective_path + new_objective.owner = src + new_objective:target = new_target:mind + //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. + new_objective.update_explanation_text() + + if ("destroy") + var/list/possible_targets = active_ais(1) + if(possible_targets.len) + var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets + new_objective = new /datum/objective/destroy + new_objective.target = new_target.mind + new_objective.owner = src + new_objective.update_explanation_text() + else + usr << "No active AIs with minds" + + if ("prevent") + new_objective = new /datum/objective/block + new_objective.owner = src + + if ("hijack") + new_objective = new /datum/objective/hijack + new_objective.owner = src + + if ("escape") + new_objective = new /datum/objective/escape + new_objective.owner = src + + if ("survive") + new_objective = new /datum/objective/survive + new_objective.owner = src + + if("martyr") + new_objective = new /datum/objective/martyr + new_objective.owner = src + + if ("nuclear") + new_objective = new /datum/objective/nuclear + new_objective.owner = src + + if ("steal") + if (!istype(objective, /datum/objective/steal)) + new_objective = new /datum/objective/steal + new_objective.owner = src + else + new_objective = objective + var/datum/objective/steal/steal = new_objective + if (!steal.select_target()) + return + + if("download","capture","absorb") + var/def_num + if(objective&&objective.type==text2path("/datum/objective/[new_obj_type]")) + def_num = objective.target_amount + + var/target_number = input("Input target number:", "Objective", def_num) as num|null + if (isnull(target_number))//Ordinarily, you wouldn't need isnull. In this case, the value may already exist. + return + + switch(new_obj_type) + if("download") + new_objective = new /datum/objective/download + new_objective.explanation_text = "Download [target_number] research levels." + if("capture") + new_objective = new /datum/objective/capture + new_objective.explanation_text = "Capture [target_number] lifeforms with an energy net. Live, rare specimens are worth more." + if("absorb") + new_objective = new /datum/objective/absorb + new_objective.explanation_text = "Absorb [target_number] compatible genomes." + new_objective.owner = src + new_objective.target_amount = target_number + + if("follower block (HOG)") + new_objective = new /datum/objective/follower_block + new_objective.owner = src + if("build (HOG)") + new_objective = new /datum/objective/build + new_objective.owner = src + if("deicide (HOG)") + new_objective = new /datum/objective/deicide + new_objective.owner = src + if("follower escape (HOG)") + new_objective = new /datum/objective/escape_followers + new_objective.owner = src + if("sacrifice prophet (HOG)") + new_objective = new /datum/objective/sacrifice_prophet + new_objective.owner = src + + if ("custom") + var/expl = stripped_input(usr, "Custom objective:", "Objective", objective ? objective.explanation_text : "") + if (!expl) + return + new_objective = new /datum/objective + new_objective.owner = src + new_objective.explanation_text = expl if (!new_objective) - usr << initial(new_obj_type.error_text) return if (objective) @@ -649,6 +764,7 @@ message_admins("[key_name_admin(usr)] edited [current]'s objective to [new_objective.explanation_text]") log_admin("[key_name(usr)] edited [current]'s objective to [new_objective.explanation_text]") else + objectives += new_objective message_admins("[key_name_admin(usr)] added a new objective for [current]: [new_objective.explanation_text]") log_admin("[key_name(usr)] added a new objective for [current]: [new_objective.explanation_text]") @@ -666,6 +782,7 @@ return objective.completed = !objective.completed log_admin("[key_name(usr)] toggled the win state for [current]'s objective: [objective.explanation_text]") + else if (href_list["handofgod"]) switch(href_list["handofgod"]) if("clear") //wipe handofgod status @@ -705,6 +822,7 @@ message_admins("[key_name_admin(usr)] has blue god'ed [current].") log_admin("[key_name(usr)] has blue god'ed [current].") + else if (href_list["revolution"]) switch(href_list["revolution"]) if("clear") @@ -859,10 +977,9 @@ ticker.mode.add_cultist(src) message_admins("[key_name_admin(usr)] has cult'ed [current].") log_admin("[key_name(usr)] has cult'ed [current].") - if("equip") if (!ticker.mode.equip_cultist(current)) - usr << "equip_cultist() failed! [current]'s starting equipment will be incomplete." + usr << "equip_cultist() failed! [current]'s starting equipment will be incomplete." else if (href_list["wizard"]) switch(href_list["wizard"]) @@ -1098,7 +1215,6 @@ else if (href_list["silicon"]) switch(href_list["silicon"]) - if("unemag") var/mob/living/silicon/robot/R = current if (istype(R)) @@ -1583,3 +1699,4 @@ ..() mind.assigned_role = "[initial(name)]" mind.special_role = "Cultist" + diff --git a/code/datums/spells/construct_spells.dm b/code/datums/spells/construct_spells.dm index e471cf084a8..3ca60856192 100644 --- a/code/datums/spells/construct_spells.dm +++ b/code/datums/spells/construct_spells.dm @@ -70,6 +70,10 @@ cult_req = 1 charge_max = 4000 +/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult + summon_type = list(/obj/item/device/soulstone/anybody) + + /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall name = "Shield" diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index 36d8d88adcf..1a54baa825f 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -37,7 +37,7 @@ var/global/max_secret_rooms = 6 ////////////// /proc/make_mining_asteroid_secrets() - for(1 to max_secret_rooms) + for(var/i in 1 to max_secret_rooms) make_mining_asteroid_secret() /proc/make_mining_asteroid_secret() diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index 0f30f2c19a8..1fb027a8844 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -92,13 +92,14 @@ 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/mob/living/carbon/human/H = usr var/wizard_name_first = pick(wizard_first) var/wizard_name_second = pick(wizard_second) var/randomname = "[wizard_name_first] [wizard_name_second]" - var/datum/objective/default/protect/new_objective = add_objective(M.mind, /datum/objective/default/protect) - new_objective.target = H.mind - new_objective.explanation_text = "Protect [H.real_name], the wizard." + 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.apprentices += M.mind M.mind.special_role = "apprentice" ticker.mode.update_wiz_icons_added(M.mind) @@ -251,9 +252,11 @@ S.mind.assigned_role = "Slaughter Demon" S.mind.special_role = "Slaughter Demon" ticker.mode.traitors += S.mind - var/datum/objective/default/assassinate/new_objective = add_objective(S.mind, /datum/objective/default/assassinate) + var/datum/objective/assassinate/new_objective = new /datum/objective/assassinate + new_objective.owner = S.mind new_objective.target = usr.mind new_objective.explanation_text = "Kill [usr.real_name], the one who summoned you." + S.mind.objectives += new_objective var/datum/objective/new_objective2 = new /datum/objective new_objective2.owner = S.mind new_objective2.explanation_text = "Kill everyone else while you're at it." @@ -261,4 +264,4 @@ S << S.playstyle_string S << "You are currently not currently in the same plane of existence as the station. Ctrl+Click a blood pool to manifest." S << "Objective #[1]: [new_objective.explanation_text]" - S << "Objective #[2]: [new_objective2.explanation_text]" \ No newline at end of file + S << "Objective #[2]: [new_objective2.explanation_text]" diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 5d0e61a3b11..24abe73e2b8 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -8,6 +8,7 @@ icon = 'icons/mob/blob.dmi' pass_flags = PASSBLOB faction = list("blob") + bubble_icon = "blob" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = 360 diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index 7771469a545..4a6d5c55481 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -8,6 +8,8 @@ explosion_block = 6 point_return = -1 atmosblock = 1 + health_regen = 0 //we regen in Life() instead of when pulsed + var/core_regen = 2 var/overmind_get_delay = 0 //we don't want to constantly try to find an overmind, this var tracks when we'll try to get an overmind again var/resource_delay = 0 var/point_rate = 2 @@ -34,9 +36,6 @@ var/image/C = new('icons/mob/blob.dmi', "blob_core_overlay") overlays += C -/obj/effect/blob/core/PulseAnimation() - return - /obj/effect/blob/core/Destroy() blob_cores -= src if(overmind) @@ -56,9 +55,6 @@ if(overmind) //we should have an overmind, but... overmind.update_health() -/obj/effect/blob/core/RegenHealth() - return // Don't regen, we handle it in Life() - /obj/effect/blob/core/Life() if(!overmind) create_overmind() @@ -66,7 +62,7 @@ if(resource_delay <= world.time) resource_delay = world.time + 10 // 1 second overmind.add_points(point_rate) - health = min(maxhealth, health+health_regen) + health = min(maxhealth, health+core_regen) if(overmind) overmind.update_health() Pulse_Area(overmind, 12, 4, 3) diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index a70842aa7c4..b6c3c879b15 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -18,22 +18,16 @@ spores = null return ..() -/obj/effect/blob/factory/PulseAnimation(activate = 0) - if(activate) - ..() - return - -/obj/effect/blob/factory/run_action() +/obj/effect/blob/factory/Be_Pulsed() + . = ..() if(spores.len >= max_spores) - return 0 + return if(spore_delay > world.time) - return 0 + return + flick("factory_glow", src) spore_delay = world.time + 100 // 10 seconds - PulseAnimation(1) var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src) if(overmind) //if we don't have an overmind, we don't need to do anything but make a spore BS.overmind = overmind BS.update_icons() overmind.blob_mobs.Add(BS) - return 0 - diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 3141e98930b..0fa21158e26 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -25,9 +25,6 @@ var/image/C = new('icons/mob/blob.dmi', "blob_node_overlay") src.overlays += C -/obj/effect/blob/node/PulseAnimation() - return - /obj/effect/blob/node/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) return diff --git a/code/game/gamemodes/blob/blobs/resource.dm b/code/game/gamemodes/blob/blobs/resource.dm index 03bb6164280..a435685eeb7 100644 --- a/code/game/gamemodes/blob/blobs/resource.dm +++ b/code/game/gamemodes/blob/blobs/resource.dm @@ -8,22 +8,11 @@ point_return = 15 var/resource_delay = 0 - -/obj/effect/blob/resource/PulseAnimation(activate = 0) - if(activate) - ..() - return - -/obj/effect/blob/resource/run_action() - +/obj/effect/blob/resource/Be_Pulsed() + . = ..() if(resource_delay > world.time) - return 0 - - PulseAnimation(1) - + return + flick("factory_glow", src) resource_delay = world.time + 45 // 4 and a half seconds - if(overmind) overmind.add_points(1) - return 0 - diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 5f92432b457..1b845d570c8 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -12,8 +12,7 @@ var/health = 30 var/maxhealth = 30 var/health_regen = 2 //how much health this blob regens when pulsed - var/health_timestamp = 0 //we got healed when? - var/pulse_timestamp = 0 //we got pulsed when? + var/pulse_timestamp = 0 //we got pulsed/healed when? var/brute_resist = 0.5 //multiplies brute damage by this var/fire_resist = 1 //multiplies burn damage by this var/atmosblock = 0 //if the blob blocks atmos and heat spread @@ -90,7 +89,6 @@ src.Be_Pulsed() if(claim_range) for(var/obj/effect/blob/B in ultra_range(claim_range, src, 1)) - B.update_icon() if(!B.overmind && !istype(B, /obj/effect/blob/core) && prob(30)) B.overmind = pulsing_overmind //reclaim unclaimed, non-core blobs. B.update_icon() @@ -106,10 +104,9 @@ /obj/effect/blob/proc/Be_Pulsed() if(pulse_timestamp <= world.time) - PulseAnimation() ConsumeTile() - RegenHealth() - run_action() + health = min(maxhealth, health+health_regen) + update_icon() pulse_timestamp = world.time + 10 return 1 //we did it, we were pulsed! return 0 //oh no we failed @@ -118,21 +115,6 @@ for(var/atom/A in loc) A.blob_act() -/obj/effect/blob/proc/PulseAnimation() - flick("[icon_state]_glow", src) - return - -/obj/effect/blob/proc/RegenHealth() //when pulsed, heal! - if(health_timestamp <= world.time) - health = min(maxhealth, health+health_regen) - update_icon() - health_timestamp = world.time + 10 //1 second between heals - return 1 - return 0 - -/obj/effect/blob/proc/run_action() - return 0 - /obj/effect/blob/proc/expand(turf/T = null, prob = 1, controller = null) if(prob && !prob(health)) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 844359b3037..6a23763a639 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -113,6 +113,9 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas /datum/game_mode/proc/forge_changeling_objectives(datum/mind/changeling, var/team_mode = 0) //OBJECTIVES - random traitor objectives. Unique objectives "steal brain" and "identity theft". + //No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting + //If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone + var/escape_objective_possible = TRUE //if there's a team objective, check if it's compatible with escape objectives @@ -121,7 +124,63 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas escape_objective_possible = FALSE break - generate_objectives(changeling, 4, escape_objective_possible) + var/datum/objective/absorb/absorb_objective = new + absorb_objective.owner = changeling + absorb_objective.gen_amount_goal(6, 8) + changeling.objectives += absorb_objective + + if(prob(60)) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = changeling + steal_objective.find_target() + changeling.objectives += steal_objective + + var/list/active_ais = active_ais() + if(active_ais.len && prob(100/joined_player_list.len)) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = changeling + destroy_objective.find_target() + changeling.objectives += destroy_objective + else + if(prob(70)) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = changeling + if(team_mode) //No backstabbing while in a team + kill_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + kill_objective.find_target() + changeling.objectives += kill_objective + else + var/datum/objective/maroon/maroon_objective = new + maroon_objective.owner = changeling + if(team_mode) + maroon_objective.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + maroon_objective.find_target() + changeling.objectives += maroon_objective + + if (!(locate(/datum/objective/escape) in changeling.objectives) && escape_objective_possible) + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = changeling + identity_theft.target = maroon_objective.target + identity_theft.update_explanation_text() + changeling.objectives += identity_theft + escape_objective_possible = FALSE + + if (!(locate(/datum/objective/escape) in changeling.objectives) && escape_objective_possible) + if(prob(50)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = changeling + changeling.objectives += escape_objective + else + var/datum/objective/escape/escape_with_identity/identity_theft = new + identity_theft.owner = changeling + if(team_mode) + identity_theft.find_target_by_role(role = "Changeling", role_type = 1, invert = 1) + else + identity_theft.find_target() + changeling.objectives += identity_theft + escape_objective_possible = FALSE diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index d5e3c54277c..48acd03a592 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -38,7 +38,7 @@ return if(!isturf(user.loc)) return - if(!AStar(user.loc, target.loc, null, /turf/proc/Distance, user.mind.changeling.sting_range, simulated_only = 0)) + if(!AStar(user, target.loc, /turf/proc/Distance, user.mind.changeling.sting_range, simulated_only = 0)) return if(target.mind && target.mind.changeling) sting_feedback(user,target) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 6b1041d2d2e..70cc7008be2 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -43,6 +43,10 @@ var/obj/machinery/doomsday_device/DOOM = new /obj/machinery/doomsday_device(src) doomsday_device = DOOM verbs -= /mob/living/silicon/ai/proc/nuke_station + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) + for(var/mob/living/silicon/ai/A in ai_list) + if((A.stat != DEAD) && A.nuking) + point.the_disk = A //The pinpointer now tracks the AI core /obj/machinery/doomsday_device icon = 'icons/obj/machines/nuke_terminal.dmi' diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index b3b032bf8d4..d317e8f25c9 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -34,6 +34,7 @@ icon = 'icons/mob/swarmer.dmi' desc = "A robot of unknown design, they seek only to consume materials and replicate themselves indefinitely." speak_emote = list("tones") + bubble_icon = "swarmer" health = 40 maxHealth = 40 status_flags = CANPUSH @@ -59,7 +60,6 @@ speed = 0 faction = list("swarmer") AIStatus = AI_OFF - projectiletype = /obj/item/projectile/beam/disabler pass_flags = PASSTABLE ventcrawler = 2 ranged = 1 @@ -290,7 +290,14 @@ var/turf/simulated/floor/F = random_location if(F.air) var/datum/gas_mixture/A = F.air - if(A.oxygen >= 16 && !A.toxins && A.carbon_dioxide < 10 && !A.trace_gases.len)//Can most things breathe in this location? + var/list/A_gases = A.gases + var/trace_gases + for(var/id in A_gases) + if(id in hardcoded_gases) + continue + trace_gases = TRUE + break + if((A_gases["o2"] && A_gases["o2"][MOLES] >= 16) && !A_gases["plasma"] && (!A_gases["co2"] || A_gases["co2"][MOLES] < 10) && !trace_gases)//Can most things breathe in this location? if((A.temperature > 270) && (A.temperature < 360))//Not too hot, not too cold var/pressure = A.return_pressure() if((pressure > 20) && (pressure < 550))//Account for crushing pressure or vaccuums @@ -497,10 +504,13 @@ /mob/living/simple_animal/hostile/swarmer/proc/ContactSwarmers() var/message = input(src, "Announce to other swarmers", "Swarmer contact") + var/rendered = "Swarm communication - [src] states: [message]" if(message) for(var/mob/M in mob_list) - if(isswarmer(M) || (M in dead_mob_list)) - M << "Swarm communication - [src] states: [message]" + if(isswarmer(M)) + M << rendered + if(M in dead_mob_list) + M << "(F) [rendered]" diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index 6049556edc0..e5675f6b183 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -40,7 +40,7 @@ U.hidden_uplink.uplink_owner= "[user.key]" U.hidden_uplink.uses = 280 U.hidden_uplink.mode_override = /datum/game_mode/nuclear //Maybe we can have a special set of items for the challenge uplink eventually - config.shuttle_refuel_delay = min(config.shuttle_refuel_delay, CHALLENGE_SHUTTLE_DELAY) + config.shuttle_refuel_delay = max(config.shuttle_refuel_delay, CHALLENGE_SHUTTLE_DELAY) qdel(src) diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index efafaf9b75b..ec3a854a258 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -12,8 +12,13 @@ var/obj/item/weapon/disk/nuclear/the_disk = null var/active = 0 +/obj/item/weapon/pinpointer/New() + ..() + pinpointer_list += src + /obj/item/weapon/pinpointer/Destroy() active = 0 + pinpointer_list -= src return ..() /obj/item/weapon/pinpointer/attack_self() diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index c2553c81d2c..6ca93642ab1 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -6,64 +6,6 @@ var/completed = 0 //currently only used for custom objectives. var/dangerrating = 0 //How hard the objective is, essentially. Used for dishing out objectives and checking overall victory. var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead. - var/required_role = null //If the objective can only be done by a certain role, such as absorb for changelings. - var/randomgen = 1 //Whether the objective can be generated randomly. - var/error_text = "" //Displayed to admins if the objective fails to initialize properly when editing or adding - -/proc/generate_objectives(var/datum/mind/M, var/objectives_made = 2, var/has_escape = TRUE) - var/list/objective_types = (typesof(/datum/objective/default) - /datum/objective/default) - var/list/escape_objective_types = (typesof(/datum/objective/escape_obj) - /datum/objective/escape_obj) - for(var/O in objective_types) // this is fucking hacky as shit but - var/datum/objective/obj = new O - if(M.special_role != obj.required_role && obj.required_role != null) - objective_types -= O - if(!obj.randomgen) - objective_types -= O - for(var/E in escape_objective_types) - var/datum/objective/obj = new E - if(M.special_role != obj.required_role && obj.required_role != null) - objective_types -= E - if(!obj.randomgen) - objective_types -= E - for(var/i = 1, i <= objectives_made, i++) - if(i == objectives_made && has_escape) - var/datum/objective/holder_obj = pick(escape_objective_types) - add_objective(M, holder_obj) - return - else - var/datum/objective/holder_obj = pick(objective_types) - objective_types -= holder_obj - var/datum/objective/O = new holder_obj - if(!O.martyr_compatible) - escape_objective_types -= list(/datum/objective/escape_obj/martyr) - add_objective(M, holder_obj) - - -/proc/add_objective(var/datum/mind/M, var/obj_path, var/announce_new_objectives = 0, var/replace_if_impossible = 1, var/admin=0) - var/datum/objective/objective = new obj_path() - objective.owner = M - M.objectives += objective - if(admin && check_rights(R_ADMIN)) - objective.find_target_admin() - else - objective.find_target() - - if(!objective.extra_prep()) - if(replace_if_impossible) - generate_objectives(objective.owner, 1, FALSE) // Generate another objective to replace this one. - objective.owner.objectives -= src - qdel(src) - return null - - objective.update_explanation_text() - if(announce_new_objectives) - if(M.special_role) - M.current << "You are the [M.special_role]." - var/obj_count = 1 - for(var/datum/objective/OBJ in M.objectives) - M.current << "Objective #[obj_count]: [OBJ.explanation_text]" - obj_count++ - return objective /datum/objective/New(var/text) if(text) @@ -72,9 +14,6 @@ /datum/objective/proc/check_completion() return completed -/datum/objective/proc/extra_prep() - return 1 - /datum/objective/proc/is_unique_objective(possible_target) for(var/datum/objective/O in owner.objectives) if(istype(O, type) && O.get_target() == possible_target) @@ -84,24 +23,16 @@ /datum/objective/proc/get_target() return target -/datum/objective/proc/find_possible_targets() +/datum/objective/proc/find_target() var/list/possible_targets = list() for(var/datum/mind/possible_target in ticker.minds) if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && is_unique_objective(possible_target)) possible_targets += possible_target - return possible_targets - -/datum/objective/proc/find_target() - var/list/possible_targets = find_possible_targets() if(possible_targets.len > 0) target = pick(possible_targets) update_explanation_text() return target -/datum/objective/proc/find_target_admin() - target = input("Select target:", "Objective target") as null|anything in find_possible_targets() - return target - /datum/objective/proc/find_target_by_role(role, role_type=0, invert=0)//Option sets either to check assigned role or special role. Default to assigned., invert inverts the check, eg: "Don't choose a Ling" for(var/datum/mind/possible_target in ticker.minds) if((possible_target != owner) && ishuman(possible_target.current)) @@ -129,27 +60,25 @@ /datum/objective/proc/give_special_equipment() -// Default objectives are ones you can put on any antag type and they should be able to complete it. - -/datum/objective/default/assassinate +/datum/objective/assassinate var/target_role_type=0 dangerrating = 10 martyr_compatible = 1 -/datum/objective/default/assassinate/find_target_by_role(role, role_type=0, invert=0) +/datum/objective/assassinate/find_target_by_role(role, role_type=0, invert=0) if(!invert) target_role_type = role_type ..() return target -/datum/objective/default/assassinate/check_completion() +/datum/objective/assassinate/check_completion() if(target && target.current) if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite return 1 return 0 return 1 -/datum/objective/default/assassinate/update_explanation_text() +/datum/objective/assassinate/update_explanation_text() ..() if(target && target.current) explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." @@ -186,18 +115,18 @@ -/datum/objective/default/maroon +/datum/objective/maroon var/target_role_type=0 dangerrating = 5 martyr_compatible = 1 -/datum/objective/default/maroon/find_target_by_role(role, role_type=0, invert=0) +/datum/objective/maroon/find_target_by_role(role, role_type=0, invert=0) if(!invert) target_role_type = role_type ..() return target -/datum/objective/default/maroon/check_completion() +/datum/objective/maroon/check_completion() if(target && target.current) if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite return 1 @@ -205,7 +134,7 @@ return 0 return 1 -/datum/objective/default/maroon/update_explanation_text() +/datum/objective/maroon/update_explanation_text() if(target && target.current) explanation_text = "Prevent [target.name], the [!target_role_type ? target.assigned_role : target.special_role], from escaping alive." else @@ -213,18 +142,17 @@ -/datum/objective/default/debrain//I want braaaainssss +/datum/objective/debrain//I want braaaainssss var/target_role_type=0 dangerrating = 20 - randomgen = 0 -/datum/objective/default/debrain/find_target_by_role(role, role_type=0, invert=0) +/datum/objective/debrain/find_target_by_role(role, role_type=0, invert=0) if(!invert) target_role_type = role_type ..() return target -/datum/objective/default/debrain/check_completion() +/datum/objective/debrain/check_completion() if(!target)//If it's a free objective. return 1 if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead. @@ -238,7 +166,7 @@ return 1 return 0 -/datum/objective/default/debrain/update_explanation_text() +/datum/objective/debrain/update_explanation_text() ..() if(target && target.current) explanation_text = "Steal the brain of [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." @@ -247,18 +175,18 @@ -/datum/objective/default/protect//The opposite of killing a dude. +/datum/objective/protect//The opposite of killing a dude. var/target_role_type=0 dangerrating = 10 martyr_compatible = 1 -/datum/objective/default/protect/find_target_by_role(role, role_type=0, invert=0) +/datum/objective/protect/find_target_by_role(role, role_type=0, invert=0) if(!invert) target_role_type = role_type ..() return target -/datum/objective/default/protect/check_completion() +/datum/objective/protect/check_completion() if(!target) //If it's a free objective. return 1 if(target.current) @@ -267,7 +195,7 @@ return 1 return 0 -/datum/objective/default/protect/update_explanation_text() +/datum/objective/protect/update_explanation_text() ..() if(target && target.current) explanation_text = "Protect [target.name], the [!target_role_type ? target.assigned_role : target.special_role]." @@ -276,12 +204,12 @@ -/datum/objective/escape_obj/hijack +/datum/objective/hijack explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody." dangerrating = 25 martyr_compatible = 0 //Technically you won't get both anyway. -/datum/objective/escape_obj/hijack/check_completion() +/datum/objective/hijack/check_completion() if(!owner.current || owner.current.stat) return 0 if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) @@ -335,13 +263,12 @@ return 1 return 0 -/datum/objective/escape_obj/block +/datum/objective/block explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." dangerrating = 25 martyr_compatible = 1 - randomgen = 0 -/datum/objective/escape_obj/block/check_completion() +/datum/objective/block/check_completion() if(!istype(owner.current, /mob/living/silicon)) return 0 if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) @@ -360,11 +287,11 @@ return 1 -/datum/objective/escape_obj/escape +/datum/objective/escape explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody." dangerrating = 5 -/datum/objective/escape_obj/escape/check_completion() +/datum/objective/escape/check_completion() if(issilicon(owner.current)) return 0 if(isbrain(owner.current)) @@ -389,17 +316,16 @@ return 0 -/datum/objective/escape_obj/escape/escape_with_identity +/datum/objective/escape/escape_with_identity dangerrating = 10 var/target_real_name // Has to be stored because the target's real_name can change over the course of the round var/target_missing_id - required_role = "changeling" -/datum/objective/escape_obj/escape/escape_with_identity/find_target() +/datum/objective/escape/escape_with_identity/find_target() target = ..() update_explanation_text() -/datum/objective/escape_obj/escape/escape_with_identity/update_explanation_text() +/datum/objective/escape/escape_with_identity/update_explanation_text() if(target && target.current) target_real_name = target.current.real_name explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role]" @@ -415,7 +341,7 @@ else explanation_text = "Free Objective." -/datum/objective/escape_obj/escape/escape_with_identity/check_completion() +/datum/objective/escape/escape_with_identity/check_completion() if(!target_real_name) return 1 if(!ishuman(owner.current)) @@ -428,7 +354,7 @@ return 0 -/datum/objective/escape_obj/survive +/datum/objective/survive explanation_text = "Stay alive until the end." dangerrating = 3 @@ -440,11 +366,11 @@ return 1 -/datum/objective/escape_obj/martyr +/datum/objective/martyr explanation_text = "Die a glorious death." dangerrating = 1 -/datum/objective/escape_obj/martyr/check_completion() +/datum/objective/martyr/check_completion() if(!owner.current) //Gibbed, etc. return 1 if(owner.current && owner.current.stat == DEAD) //You're dead! Yay! @@ -461,35 +387,30 @@ return 1 return 0 + var/global/list/possible_items = list() -/datum/objective/default/steal +/datum/objective/steal var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later. var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums). dangerrating = 5 //Overridden by the individual item's difficulty, but defaults to 5 for custom objectives. martyr_compatible = 0 -/datum/objective/default/steal/get_target() +/datum/objective/steal/get_target() return steal_target -/datum/objective/default/steal/New() +/datum/objective/steal/New() ..() if(!possible_items.len)//Only need to fill the list when it's needed. init_subtypes(/datum/objective_item/steal,possible_items) -/datum/objective/default/steal/find_possible_targets() - var/list/approved_targets = list() - if(check_rights(R_ADMIN)) - approved_targets += select_target() - else - for(var/datum/objective_item/possible_item in possible_items) - if(is_unique_objective(possible_item.targetitem) && !(owner.current.mind.assigned_role in possible_item.excludefromjob)) - approved_targets += possible_item - return approved_targets +/datum/objective/steal/find_target() + var/approved_targets = list() + for(var/datum/objective_item/possible_item in possible_items) + if(is_unique_objective(possible_item.targetitem) && !(owner.current.mind.assigned_role in possible_item.excludefromjob)) + approved_targets += possible_item + return set_target(safepick(approved_targets)) -/datum/objective/default/steal/find_target() - return set_target(safepick(find_possible_targets())) - -/datum/objective/default/steal/proc/set_target(datum/objective_item/item) +/datum/objective/steal/proc/set_target(datum/objective_item/item) if(item) targetinfo = item @@ -502,26 +423,27 @@ var/global/list/possible_items = list() explanation_text = "Free objective" return -/datum/objective/default/steal/proc/select_target() //For admins setting objectives manually. +/datum/objective/steal/proc/select_target() //For admins setting objectives manually. var/list/possible_items_all = possible_items+"custom" var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all - if (!new_target) - return + if (!new_target) return if (new_target == "custom") //Can set custom items. var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item) - if (!custom_target) - return - var/custom_name = initial(custom_target.name) + if (!custom_target) return + var/tmp_obj = new custom_target + var/custom_name = tmp_obj:name + qdel(tmp_obj) custom_name = stripped_input("Enter target name:", "Objective target", custom_name) - if (!custom_name) - return + if (!custom_name) return steal_target = custom_target explanation_text = "Steal [custom_name]." + else + set_target(new_target) return steal_target -/datum/objective/default/steal/check_completion() +/datum/objective/steal/check_completion() if(!steal_target) return 1 if(!isliving(owner.current)) @@ -540,7 +462,7 @@ var/global/list/possible_items = list() return 1 return 0 -/datum/objective/default/steal/give_special_equipment() +/datum/objective/steal/give_special_equipment() if(owner && owner.current && targetinfo) if(istype(owner.current, /mob/living/carbon/human)) var/mob/living/carbon/human/H = owner.current @@ -551,25 +473,24 @@ var/global/list/possible_items = list() H.update_icons() var/global/list/possible_items_special = list() -/datum/objective/default/steal/special //ninjas are so special they get their own subtype good for them - randomgen = 0 -/datum/objective/default/steal/special/New() +/datum/objective/steal/special //ninjas are so special they get their own subtype good for them + +/datum/objective/steal/special/New() ..() if(!possible_items_special.len) init_subtypes(/datum/objective_item/special,possible_items) init_subtypes(/datum/objective_item/stack,possible_items) -/datum/objective/default/steal/special/find_target() +/datum/objective/steal/special/find_target() return set_target(pick(possible_items_special)) -/datum/objective/default/steal/exchange +/datum/objective/steal/exchange dangerrating = 10 martyr_compatible = 0 - randomgen = 0 -/datum/objective/default/steal/exchange/proc/set_faction(faction,otheragent) +/datum/objective/steal/exchange/proc/set_faction(faction,otheragent) target = otheragent if(faction == "red") targetinfo = new/datum/objective_item/unique/docs_blue @@ -579,7 +500,7 @@ var/global/list/possible_items_special = list() steal_target = targetinfo.targetitem -/datum/objective/default/steal/exchange/update_explanation_text() +/datum/objective/steal/exchange/update_explanation_text() ..() if(target && target.current) explanation_text = "Acquire [targetinfo.name] held by [target.name], the [target.assigned_role] and syndicate agent" @@ -587,11 +508,10 @@ var/global/list/possible_items_special = list() explanation_text = "Free Objective" -/datum/objective/default/steal/exchange/backstab +/datum/objective/steal/exchange/backstab dangerrating = 3 - randomgen = 0 -/datum/objective/default/steal/exchange/backstab/set_faction(faction) +/datum/objective/steal/exchange/backstab/set_faction(faction) if(faction == "red") targetinfo = new/datum/objective_item/unique/docs_red else if(faction == "blue") @@ -676,11 +596,10 @@ var/global/list/possible_items_special = list() -/datum/objective/default/absorb +/datum/objective/absorb dangerrating = 10 - required_role = "changeling" -/datum/objective/default/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6) +/datum/objective/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6) target_amount = rand (lowbound,highbound) if (ticker) var/n_p = 1 //autowin @@ -697,7 +616,7 @@ var/global/list/possible_items_special = list() explanation_text = "Extract [target_amount] compatible genome\s." return target_amount -/datum/objective/default/absorb/check_completion() +/datum/objective/absorb/check_completion() if(owner && owner.changeling && owner.changeling.stored_profiles && (owner.changeling.absorbedcount >= target_amount)) return 1 else @@ -705,37 +624,31 @@ var/global/list/possible_items_special = list() -/datum/objective/default/destroy +/datum/objective/destroy dangerrating = 10 martyr_compatible = 1 - error_text = "No active AIs with minds." -/datum/objective/default/destroy/find_target() +/datum/objective/destroy/find_target() var/list/possible_targets = active_ais(1) var/mob/living/silicon/ai/target_ai = pick(possible_targets) target = target_ai.mind update_explanation_text() return target -/datum/objective/default/destroy/check_completion() +/datum/objective/destroy/check_completion() if(target && target.current) if(target.current.stat == DEAD || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite return 1 return 0 return 1 -/datum/objective/default/destroy/update_explanation_text() +/datum/objective/destroy/update_explanation_text() ..() if(target && target.current) explanation_text = "Destroy [target.name], the experimental AI." else explanation_text = "Free Objective" -/datum/objective/default/destroy/extra_prep() - if(!target) - return 0 - return 1 - /datum/objective/summon_guns explanation_text = "Steal at least five guns!" @@ -924,5 +837,5 @@ var/global/list/possible_items_special = list() explanation_text = "Have X or more heads of staff escape on the shuttle disguised as heads, while the real heads are dead" command_staff_only = TRUE -/datum/objective/custom - explanation_text = "Free Objective" \ No newline at end of file + + diff --git a/code/game/gamemodes/objective_items.dm b/code/game/gamemodes/objective_items.dm index 9f1c99cea84..c3121978a60 100644 --- a/code/game/gamemodes/objective_items.dm +++ b/code/game/gamemodes/objective_items.dm @@ -94,7 +94,7 @@ /datum/objective_item/steal/plasma/check_special_completion(obj/item/weapon/tank/T) var/target_amount = text2num(name) var/found_amount = 0 - found_amount += T.air_contents.toxins + found_amount += T.air_contents.gases["plasma"][MOLES] return found_amount>=target_amount diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 73ab2b3423c..4cd032c07fd 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -84,7 +84,7 @@ var/hsboxspawn = 1 hsbinfo += "- Spawn Plasma Canister
" hsbinfo += "- Spawn CO2 Canister
" hsbinfo += "- Spawn Nitrogen Canister
" - hsbinfo += "- Spawn N2O Canister
" + hsbinfo += "- Spawn N2O Canister
" else hsbinfo += "Some item spawning may be disabled by the administrators.
" hsbinfo += "Only administrators may spawn dangerous canisters.
" diff --git a/code/game/gamemodes/traitor/double_agents.dm b/code/game/gamemodes/traitor/double_agents.dm index 76bcc67c856..af284603f6a 100644 --- a/code/game/gamemodes/traitor/double_agents.dm +++ b/code/game/gamemodes/traitor/double_agents.dm @@ -32,19 +32,27 @@ // Assassinate var/datum/mind/target_mind = target_list[traitor] if(issilicon(target_mind.current)) - var/datum/objective/default/destroy/destroy_objective = add_objective(traitor, /datum/objective/default/destroy) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = traitor destroy_objective.target = target_mind destroy_objective.update_explanation_text() + traitor.objectives += destroy_objective else - var/datum/objective/default/assassinate/kill_objective = add_objective(traitor, /datum/objective/default/assassinate) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor kill_objective.target = target_mind kill_objective.update_explanation_text() + traitor.objectives += kill_objective // Escape if(issilicon(traitor.current)) - add_objective(traitor, /datum/objective/escape_obj/survive) + var/datum/objective/survive/survive_objective = new + survive_objective.owner = traitor + traitor.objectives += survive_objective else - add_objective(traitor, /datum/objective/escape_obj/escape) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = traitor + traitor.objectives += escape_objective else ..() // Give them standard objectives. diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index e9b13743eb3..1fb01bba993 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -89,14 +89,25 @@ var/objective_count = 0 if(prob(10)) - add_objective(traitor, /datum/objective/escape_obj/block) + var/datum/objective/block/block_objective = new + block_objective.owner = traitor + traitor.objectives += block_objective + objective_count++ for(var/i = objective_count, i < config.traitor_objectives_amount, i++) - add_objective(traitor, /datum/objective/default/assassinate) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor + kill_objective.find_target() + traitor.objectives += kill_objective + + var/datum/objective/survive/survive_objective = new + survive_objective.owner = traitor + traitor.objectives += survive_objective - add_objective(traitor, /datum/objective/escape_obj/survive) else - var/objective_count = 0 + var/is_hijacker = prob(10) + var/martyr_chance = prob(20) + var/objective_count = is_hijacker //Hijacking counts towards number of objectives if(!exchange_blue && traitors.len >= 8) //Set up an exchange if there are enough traitors if(!exchange_red) exchange_red = traitor @@ -105,7 +116,56 @@ assign_exchange_role(exchange_red) assign_exchange_role(exchange_blue) objective_count += 1 //Exchange counts towards number of objectives - generate_objectives(traitor, config.traitor_objectives_amount - objective_count, TRUE) + var/list/active_ais = active_ais() + for(var/i = objective_count, i < config.traitor_objectives_amount, i++) + if(prob(50)) + if(active_ais.len && prob(100/joined_player_list.len)) + var/datum/objective/destroy/destroy_objective = new + destroy_objective.owner = traitor + destroy_objective.find_target() + traitor.objectives += destroy_objective + else if(prob(30)) + var/datum/objective/maroon/maroon_objective = new + maroon_objective.owner = traitor + maroon_objective.find_target() + traitor.objectives += maroon_objective + else + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = traitor + kill_objective.find_target() + traitor.objectives += kill_objective + else + var/datum/objective/steal/steal_objective = new + steal_objective.owner = traitor + steal_objective.find_target() + traitor.objectives += steal_objective + + if(is_hijacker && objective_count <= config.traitor_objectives_amount) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount + if (!(locate(/datum/objective/hijack) in traitor.objectives)) + var/datum/objective/hijack/hijack_objective = new + hijack_objective.owner = traitor + traitor.objectives += hijack_objective + return + + + var/martyr_compatibility = 1 //You can't succeed in stealing if you're dead. + for(var/datum/objective/O in traitor.objectives) + if(!O.martyr_compatible) + martyr_compatibility = 0 + break + + if(martyr_compatibility && martyr_chance) + var/datum/objective/martyr/martyr_objective = new + martyr_objective.owner = traitor + traitor.objectives += martyr_objective + return + + else + if(!(locate(/datum/objective/escape) in traitor.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = traitor + traitor.objectives += escape_objective + return @@ -275,13 +335,13 @@ faction = "blue" //Assign objectives - var/datum/objective/default/steal/exchange/exchange_objective = new + var/datum/objective/steal/exchange/exchange_objective = new exchange_objective.set_faction(faction,((faction == "red") ? exchange_blue : exchange_red)) exchange_objective.owner = owner owner.objectives += exchange_objective if(prob(20)) - var/datum/objective/default/steal/exchange/backstab/backstab_objective = new + var/datum/objective/steal/exchange/backstab/backstab_objective = new backstab_objective.set_faction(faction) backstab_objective.owner = owner owner.objectives += backstab_objective diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 9ba6d74ce4a..e8a862d7aa4 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -254,7 +254,7 @@ var/global/list/multiverse = list() evil = TRUE else user << "With your new found power you could easily defend the station!" - var/datum/objective/escape_obj/survive/new_objective = new /datum/objective/escape_obj/survive + var/datum/objective/survive/new_objective = new /datum/objective/survive new_objective.owner = usr.mind new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones." usr << "Objective #[1]: [new_objective.explanation_text]" @@ -302,15 +302,15 @@ var/global/list/multiverse = list() equip_copy(M) if(evil) - var/datum/objective/hijackclone/new_objective = add_objective(M.mind, /datum/objective/hijackclone) - new_objective.owner = M.mind - M.mind.objectives += new_objective - new_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" - M << "Objective #[1]: [new_objective.explanation_text]" + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = M.mind + M.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + M << "Objective #[1]: [hijack_objective.explanation_text]" M.mind.special_role = "multiverse traveller" log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.") else - var/datum/objective/default/protect/new_objective = add_objective(M.mind, /datum/objective/default/protect) + 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], your copy, and help them defend the innocent from the mobs of multiverse clones." diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 6df611d4d64..8ad4bf1e03f 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -177,7 +177,11 @@ makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, A, user, 0, T.loc) if("Artificer") - makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc) + if(iscultist(user) || iswizard(user)) + makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, A, user, 0, T.loc) + + else + makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc) qdel(T) qdel(src) @@ -238,24 +242,27 @@ /obj/item/device/soulstone/proc/getCultGhost(obj/item/device/soulstone/C, mob/living/carbon/human/T, mob/U) + var/mob/dead/observer/chosen_ghost - var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", be_special_flag = ROLE_CULTIST, poll_time = 100) + for(var/mob/dead/observer/ghost in player_list) //We put them back in their body + if(ghost.mind && ghost.mind.current == T && ghost.client) + chosen_ghost = ghost + break - if(!T) //target mob got soulstoned or gibbed during sleep(50) + if(!chosen_ghost) //Failing that, we grab a ghost + var/list/consenting_candidates = pollCandidates("Would you like to play as a Shade?", be_special_flag = ROLE_CULTIST, poll_time = 100) + if(consenting_candidates.len) + chosen_ghost = pick(consenting_candidates) + if(!T) return 0 - - if(consenting_candidates.len) - var/mob/dead/observer/ghost = null - ghost = pick(consenting_candidates) - if(C.contents.len) //If they used the soulstone on someone else in the meantime - return 0 - if(!T.client) //If the original returns in the alloted time - T.client = ghost.client - for(var/obj/item/W in T) - T.unEquip(W) - init_shade(C, T, U) - qdel(T) - return 1 - else + if(!chosen_ghost) U << "The ghost has fled beyond your grasp." return 0 + if(C.contents.len) //If they used the soulstone on someone else in the meantime + return 0 + T.ckey = chosen_ghost.ckey + for(var/obj/item/W in T) + T.unEquip(W) + init_shade(C, T, U) + qdel(T) + return 1 diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index e8aa52cf4a4..1dac752b967 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -48,7 +48,51 @@ /datum/game_mode/proc/forge_wizard_objectives(datum/mind/wizard) - generate_objectives(wizard, 2) + switch(rand(1,100)) + if(1 to 30) + + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = wizard + kill_objective.find_target() + wizard.objectives += kill_objective + + if (!(locate(/datum/objective/escape) in wizard.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = wizard + wizard.objectives += escape_objective + if(31 to 60) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = wizard + steal_objective.find_target() + wizard.objectives += steal_objective + + if (!(locate(/datum/objective/escape) in wizard.objectives)) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = wizard + wizard.objectives += escape_objective + + if(61 to 85) + var/datum/objective/assassinate/kill_objective = new + kill_objective.owner = wizard + kill_objective.find_target() + wizard.objectives += kill_objective + + var/datum/objective/steal/steal_objective = new + steal_objective.owner = wizard + steal_objective.find_target() + wizard.objectives += steal_objective + + if (!(locate(/datum/objective/survive) in wizard.objectives)) + var/datum/objective/survive/survive_objective = new + survive_objective.owner = wizard + wizard.objectives += survive_objective + + else + if (!(locate(/datum/objective/hijack) in wizard.objectives)) + var/datum/objective/hijack/hijack_objective = new + hijack_objective.owner = wizard + wizard.objectives += hijack_objective + return /datum/game_mode/proc/name_wizard(mob/living/carbon/human/wizard_mob) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 922c0a71cd5..47e13d501e7 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -36,6 +36,10 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() +/obj/machinery/sleeper/Destroy() + go_out() + . = ..() + /obj/machinery/sleeper/RefreshParts() var/E var/I @@ -83,10 +87,6 @@ default_deconstruction_crowbar(I) -/obj/machinery/sleeper/ex_act(severity, target) - go_out() - ..() - /obj/machinery/sleeper/emp_act(severity) if(stat & (BROKEN|NOPOWER)) ..(severity) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 723f6b7a10b..1ba91162918 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -258,7 +258,8 @@ if(!location) return var/datum/gas_mixture/environment = location.return_air() - var/total = environment.oxygen + environment.nitrogen + environment.carbon_dioxide + environment.toxins + var/list/env_gases = environment.gases + var/total = environment.total_moles() var/list/environment_data = list() data["atmos_alarm"] = alarm_area.atmosalm @@ -273,26 +274,32 @@ var/pressure_danger = cur_tlv.get_danger_level(pressure) environment_data += list(list("name" = "Pressure", "value" = pressure, "unit" = "kPa", "danger_level" = pressure_danger)) + environment.assert_gases(arglist(hardcoded_gases)) + cur_tlv = TLV["oxygen"] - var/oxygen_danger = cur_tlv.get_danger_level(environment.oxygen*partial_pressure) - environment_data += list(list("name" = "Oxygen", "value" = environment.oxygen / total * 100, "unit" = "%", "danger_level" = oxygen_danger)) + var/oxygen_danger = cur_tlv.get_danger_level(env_gases["o2"][MOLES]*partial_pressure) + environment_data += list(list("name" = "Oxygen", "value" = env_gases["o2"][MOLES] / total * 100, "unit" = "%", "danger_level" = oxygen_danger)) cur_tlv = TLV["nitrogen"] - var/nitrogen_danger = cur_tlv.get_danger_level(environment.nitrogen*partial_pressure) - environment_data += list(list("name" = "Nitrogen", "value" = environment.nitrogen / total * 100, "unit" = "%", "danger_level" = nitrogen_danger)) + var/nitrogen_danger = cur_tlv.get_danger_level(env_gases["n2"][MOLES]*partial_pressure) + environment_data += list(list("name" = "Nitrogen", "value" = env_gases["n2"][MOLES] / total * 100, "unit" = "%", "danger_level" = nitrogen_danger)) cur_tlv = TLV["carbon dioxide"] - var/carbon_dioxide_danger = cur_tlv.get_danger_level(environment.carbon_dioxide*partial_pressure) - environment_data += list(list("name" = "Carbon Dioxide", "value" = environment.carbon_dioxide / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger)) + var/carbon_dioxide_danger = cur_tlv.get_danger_level(env_gases["co2"][MOLES]*partial_pressure) + environment_data += list(list("name" = "Carbon Dioxide", "value" = env_gases["co2"][MOLES] / total * 100, "unit" = "%", "danger_level" = carbon_dioxide_danger)) cur_tlv = TLV["plasma"] - var/plasma_danger = cur_tlv.get_danger_level(environment.toxins*partial_pressure) - environment_data += list(list("name" = "Toxins", "value" = environment.toxins / total * 100, "unit" = "%", "danger_level" = plasma_danger)) + var/plasma_danger = cur_tlv.get_danger_level(env_gases["plasma"][MOLES]*partial_pressure) + environment_data += list(list("name" = "Toxins", "value" = env_gases["plasma"][MOLES] / total * 100, "unit" = "%", "danger_level" = plasma_danger)) + + environment.garbage_collect() cur_tlv = TLV["other"] var/other_moles = 0 - for(var/datum/gas/G in environment.trace_gases) - other_moles+=G.moles + for(var/id in env_gases) + if(id in hardcoded_gases) + continue + other_moles += env_gases[id][MOLES] var/other_danger = cur_tlv.get_danger_level(other_moles*partial_pressure) environment_data += list(list("name" = "Other", "value" = other_moles / total * 100, "unit" = "%", "danger_level" = other_danger)) @@ -603,6 +610,7 @@ return 0 var/datum/gas_mixture/environment = location.return_air() + var/list/env_gases = environment.gases var/datum/tlv/cur_tlv var/GET_PP = R_IDEAL_GAS_EQUATION*environment.temperature/environment.volume @@ -611,19 +619,25 @@ var/environment_pressure = environment.return_pressure() var/pressure_dangerlevel = cur_tlv.get_danger_level(environment_pressure) + environment.assert_gases(arglist(hardcoded_gases)) + cur_tlv = TLV["oxygen"] - var/oxygen_dangerlevel = cur_tlv.get_danger_level(environment.oxygen*GET_PP) + var/oxygen_dangerlevel = cur_tlv.get_danger_level(env_gases["o2"][MOLES]*GET_PP) cur_tlv = TLV["carbon dioxide"] - var/co2_dangerlevel = cur_tlv.get_danger_level(environment.carbon_dioxide*GET_PP) + var/co2_dangerlevel = cur_tlv.get_danger_level(env_gases["co2"][MOLES]*GET_PP) cur_tlv = TLV["plasma"] - var/plasma_dangerlevel = cur_tlv.get_danger_level(environment.toxins*GET_PP) + var/plasma_dangerlevel = cur_tlv.get_danger_level(env_gases["plasma"][MOLES]*GET_PP) + + environment.garbage_collect() cur_tlv = TLV["other"] var/other_moles = 0 - for(var/datum/gas/G in environment.trace_gases) - other_moles+=G.moles + for(var/id in env_gases) + if(id in hardcoded_gases) + continue + other_moles += env_gases[id][MOLES] var/other_dangerlevel = cur_tlv.get_danger_level(other_moles*GET_PP) cur_tlv = TLV["temperature"] diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 89c4d084ced..0b9f6633758 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -37,6 +37,7 @@ signal.data["timestamp"] = world.time var/datum/gas_mixture/air_sample = return_air() + var/list/sample_gases = air_sample.gases if(output&1) signal.data["pressure"] = num2text(round(air_sample.return_pressure(),0.1)) @@ -46,14 +47,16 @@ if(output>4) var/total_moles = air_sample.total_moles() if(total_moles > 0) + air_sample.assert_gases(arglist(hardcoded_gases)) if(output&4) - signal.data["oxygen"] = round(100*air_sample.oxygen/total_moles,0.1) + signal.data["oxygen"] = round(100*sample_gases["o2"][MOLES]/total_moles,0.1) if(output&8) - signal.data["toxins"] = round(100*air_sample.toxins/total_moles,0.1) + signal.data["toxins"] = round(100*sample_gases["plasma"][MOLES]/total_moles,0.1) if(output&16) - signal.data["nitrogen"] = round(100*air_sample.nitrogen/total_moles,0.1) + signal.data["nitrogen"] = round(100*sample_gases["n2"][MOLES]/total_moles,0.1) if(output&32) - signal.data["carbon_dioxide"] = round(100*air_sample.carbon_dioxide/total_moles,0.1) + signal.data["carbon_dioxide"] = round(100*sample_gases["co2"][MOLES]/total_moles,0.1) + air_sample.garbage_collect() else signal.data["oxygen"] = 0 signal.data["toxins"] = 0 diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index 091f09bc22f..1318d338a08 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -9,10 +9,8 @@ icon_state = "yellow" density = 1 var/health = 100 - var/valve_open = 0 var/release_pressure = ONE_ATMOSPHERE - var/canister_color = "yellow" var/can_label = 1 var/filled = 0.5 @@ -22,40 +20,55 @@ use_power = 0 var/release_log = "" var/update_flag = 0 + var/gas_type = "" + var/static/list/label2types = list( + "caution" = /obj/machinery/portable_atmospherics/canister, + "n2o" = /obj/machinery/portable_atmospherics/canister/nitrous_oxide, + "n2" = /obj/machinery/portable_atmospherics/canister/nitrogen, + "o2" = /obj/machinery/portable_atmospherics/canister/oxygen, + "plasma" = /obj/machinery/portable_atmospherics/canister/toxins, + "co2" = /obj/machinery/portable_atmospherics/canister/carbon_dioxide, + "air" = /obj/machinery/portable_atmospherics/canister/air + ) -/obj/machinery/portable_atmospherics/canister/sleeping_agent - name = "canister: \[N2O\]" +/obj/machinery/portable_atmospherics/canister/nitrous_oxide + name = "n2o canister" desc = "Nitrous oxide gas. Known to cause drowsiness." icon_state = "redws" canister_color = "redws" can_label = 0 + gas_type = "n2o" /obj/machinery/portable_atmospherics/canister/nitrogen - name = "canister: \[N2\]" + name = "n2 canister" desc = "Nitrogen gas. Reportedly useful for something." icon_state = "red" canister_color = "red" can_label = 0 + gas_type = "n2" /obj/machinery/portable_atmospherics/canister/oxygen - name = "canister: \[O2\]" + name = "o2 canister" desc = "Oxygen. Necessary for human life." icon_state = "blue" canister_color = "blue" can_label = 0 + gas_type = "o2" /obj/machinery/portable_atmospherics/canister/toxins - name = "canister \[Plasma\]" + name = "plasma canister" desc = "Plasma gas. The reason YOU are here. Highly toxic." icon_state = "orange" canister_color = "orange" can_label = 0 + gas_type = "plasma" /obj/machinery/portable_atmospherics/canister/carbon_dioxide - name = "canister \[CO2\]" + name = "co2 canister" desc = "Carbon dioxide. What the fuck is carbon dioxide?" icon_state = "black" canister_color = "black" can_label = 0 + gas_type = "co2" /obj/machinery/portable_atmospherics/canister/air - name = "canister \[Air\]" + name = "air canister" desc = "Pre-mixed air." icon_state = "grey" canister_color = "grey" @@ -306,20 +319,11 @@ update_flag switch(action) if("relabel") if(can_label) - var/list/colors = list(\ - "\[N2O\]" = "redws", \ - "\[N2\]" = "red", \ - "\[O2\]" = "blue", \ - "\[Plasma\]" = "orange", \ - "\[CO2\]" = "black", \ - "\[Air\]" = "grey", \ - "\[CAUTION\]" = "yellow", \ - ) - var/label = input("Label canister:", "Gas Canister") as null|anything in colors - if(label) - src.canister_color = colors[label] - src.icon_state = colors[label] - src.name = "canister: [label]" + var/label = input("Label canister:", "Gas Canister") as null|anything in label2types + var/newtype = label2types[label] + if(newtype) + new newtype (loc, 0) + qdel(src) if("pressure") switch(params["pressure"]) if("custom") @@ -345,11 +349,10 @@ update_flag logmsg = "Valve was opened by [key_name(usr)], starting the transfer into the [holding]
" else logmsg = "Valve was opened by [key_name(usr)], starting the transfer into the air
" - if(air_contents.toxins > 0) + if(air_contents.gases["plasma"]) message_admins("[key_name_admin(usr)] (?) (FLW) opened a canister that contains plasma! (JMP)") log_admin("[key_name(usr)] opened a canister that contains plasma at [x], [y], [z]") - var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air_contents.trace_gases - if(sleeping_agent && (sleeping_agent.moles > 1)) + if(air_contents.gases["n2o"]) message_admins("[key_name_admin(usr)] (?) (FLW) opened a canister that contains N2O! (JMP)") log_admin("[key_name(usr)] opened a canister that contains N2O at [x], [y], [z]") investigate_log(logmsg, "atmos") @@ -365,38 +368,25 @@ update_flag update_icon() return 1 -/obj/machinery/portable_atmospherics/canister/toxins/New() +/obj/machinery/portable_atmospherics/canister/New(loc, fill = 1) ..() - src.air_contents.toxins = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) + if(fill) + create_gas() - src.update_icon() + update_icon() return 1 -/obj/machinery/portable_atmospherics/canister/oxygen/New() - ..() - - src.air_contents.oxygen = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/sleeping_agent/New() - ..() - - var/datum/gas/sleeping_agent/trace_gas = new - air_contents.trace_gases += trace_gas - trace_gas.moles = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 +/obj/machinery/portable_atmospherics/canister/proc/create_gas() + if(gas_type) + air_contents.assert_gas(gas_type) + air_contents.gases[gas_type][MOLES] = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) //Dirty way to fill room with gas. However it is a bit easier to do than creating some floor/engine/n2o -rastaf0 -/obj/machinery/portable_atmospherics/canister/sleeping_agent/roomfiller/New() +/obj/machinery/portable_atmospherics/canister/nitrous_oxide/roomfiller/New() ..() - var/datum/gas/sleeping_agent/trace_gas = air_contents.trace_gases[1] - trace_gas.moles = 9*4000 + air_contents.gases["n2o"][MOLES] = 9*4000 spawn(10) var/turf/simulated/location = src.loc if (istype(src.loc)) @@ -406,29 +396,7 @@ update_flag air_contents = new return 1 -/obj/machinery/portable_atmospherics/canister/nitrogen/New() - - ..() - - src.air_contents.nitrogen = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 - -/obj/machinery/portable_atmospherics/canister/carbon_dioxide/New() - - ..() - src.air_contents.carbon_dioxide = (src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 - - -/obj/machinery/portable_atmospherics/canister/air/New() - - ..() - src.air_contents.oxygen = (O2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - src.air_contents.nitrogen = (N2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - src.update_icon() - return 1 +/obj/machinery/portable_atmospherics/canister/air/create_gas() + air_contents.assert_gases("o2","n2") + air_contents.gases["o2"][MOLES] = (O2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) + air_contents.gases["n2"][MOLES] = (N2STANDARD*src.maximum_pressure*filled)*air_contents.volume/(R_IDEAL_GAS_EQUATION*air_contents.temperature) diff --git a/code/game/machinery/atmoalter/scrubber.dm b/code/game/machinery/atmoalter/scrubber.dm index 5b8100857c1..2bd2649d799 100644 --- a/code/game/machinery/atmoalter/scrubber.dm +++ b/code/game/machinery/atmoalter/scrubber.dm @@ -72,27 +72,29 @@ //Filter it if (removed) var/datum/gas_mixture/filtered_out = new + var/list/filtered_gases = filtered_out.gases + var/list/removed_gases = removed.gases + + filtered_out.assert_gases(arglist(hardcoded_gases)) + removed.assert_gases(arglist(hardcoded_gases)) filtered_out.temperature = removed.temperature - filtered_out.toxins = removed.toxins - removed.toxins = 0 + filtered_gases["plasma"][MOLES] = removed_gases["plasma"][MOLES] + removed_gases["plasma"][MOLES] = 0 - filtered_out.carbon_dioxide = removed.carbon_dioxide - removed.carbon_dioxide = 0 + filtered_gases["co2"][MOLES] = removed_gases["co2"][MOLES] + removed_gases["co2"][MOLES] = 0 - if(removed.trace_gases.len>0) - for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/sleeping_agent)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas + filtered_gases["agent_b"][MOLES] = removed_gases["agent_b"][MOLES] + removed_gases["agent_b"][MOLES] = 0 - 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 + filtered_gases["n2o"][MOLES] = removed_gases["n2o"][MOLES] + removed_gases["n2o"][MOLES] = 0 + + filtered_out.garbage_collect() + removed.garbage_collect() //Remix the resulting gases air_contents.merge(filtered_out) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index b1253d425dd..1a62efe579e 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -174,16 +174,15 @@ var/normaldoorcontrol = 0 var/specialfunctions = OPEN // Bitflag, see assembly file -/obj/machinery/button/door/New(loc, ndir = 0, built = 0) - ..() - if(id && !built && !device) +/obj/machinery/button/door/setup_device() + if(!device) if(normaldoorcontrol) var/obj/item/device/assembly/control/airlock/A = new(src) device = A A.specialfunctions = specialfunctions else device = new /obj/item/device/assembly/control(src) - + ..() /obj/machinery/button/massdriver name = "mass driver button" diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 58fa41b44d9..6cd7d3e221c 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -28,7 +28,6 @@ var/view_range = 7 var/short_range = 2 - var/light_disabled = 0 var/alarm_on = 0 var/busy = 0 var/emped = 0 //Number of consecutive EMP's on this camera @@ -358,6 +357,16 @@ busy = 0 return 0 +/obj/machinery/camera/proc/Togglelight(on=0) + for(var/mob/living/silicon/ai/A in ai_list) + for(var/obj/machinery/camera/cam in A.lit_cameras) + if(cam == src) + return + if(on) + src.SetLuminosity(AI_CAMERA_LUMINOSITY) + else + src.SetLuminosity(0) + /obj/machinery/camera/bullet_act(obj/item/projectile/proj) if(proj.damage_type == BRUTE) health = max(0, health - proj.damage) diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 97339c1bd53..2651ed274ed 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -108,8 +108,8 @@ || locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \ || locate(/obj/machinery/computer/cloning, get_step(src, EAST)) \ || locate(/obj/machinery/computer/cloning, get_step(src, WEST))) - - occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) + if(!occupant.suiciding && !(occupant.disabilities & NOCLONE)) + occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) var/obj/machinery/computer/scan_consolenew/console for(dir in list(NORTH,EAST,SOUTH,WEST)) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index e3968a27654..5f1322f6a32 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -75,10 +75,6 @@ /obj/machinery/door/CanAtmosPass() return !density -//used in the AStar algorithm to determinate if the turf the door is on is passable -/obj/machinery/door/proc/CanAStarPass(var/obj/item/weapon/card/id/ID) - return !density - /obj/machinery/door/proc/CheckForMobs() if(locate(/mob/living) in get_turf(src)) sleep(1) diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 236b15157c7..91c04b36e2e 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -93,6 +93,9 @@ //"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS. /obj/machinery/door/poddoor/ex_act(severity, target) + if(target == src) + qdel(src) + return switch(severity) if(1) if(prob(80)) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index d2cdf0153f1..96af58c8653 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -479,7 +479,7 @@ targets += C continue - if(C.stat || C.handcuffed || C.lying) //if the perp is handcuffed or lying or dead/dying, no need to bother really + if(C.stat || C.handcuffed || (C.lying && !(C.buckled))) //if the perp is handcuffed or lying or dead/dying, no need to bother really continue if(ai) //If it's set to attack all nonsilicons, target them! diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index a97f4cc6bc0..d8fce89f1ea 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -80,11 +80,18 @@ custom_objective.owner = N.mind N.mind.objectives += custom_objective - add_objective(N.mind, /datum/objective/escape_obj/escape, 1) + var/datum/objective/escape/escape_objective = new + escape_objective.owner = N.mind + N.mind.objectives += escape_objective M << "You have joined the ranks of the Syndicate and become a traitor to the station!" + var/obj_count = 1 + for(var/datum/objective/OBJ in M.mind.objectives) + M << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ + src.updateUsrDialog() return diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index f73c58acdd7..5b30ada2d0e 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -14,21 +14,11 @@ //6 = blood, open door //7 = blood, closed door //8 = blood, running - var/panel = 0 - //0 = closed - //1 = open - var/hacked = 1 //Bleh, screw hacking, let's have it hacked by default. - //0 = not hacked - //1 = hacked var/gibs_ready = 0 var/obj/crayon -/obj/machinery/washing_machine/verb/start() - set name = "Start Washing" - set category = "Object" - set src in oview(1) - - if(usr.stat || usr.restrained() || !usr.canmove) +/obj/machinery/washing_machine/AltClick(mob/user) + if(!user.canUseTopic(src)) return if( state != 4 ) @@ -183,12 +173,9 @@ /obj/machinery/washing_machine/update_icon() - icon_state = "wm_[state][panel]" + icon_state = "wm_[state]0" /obj/machinery/washing_machine/attackby(obj/item/weapon/W, mob/user, params) - /*if(istype(W,/obj/item/weapon/screwdriver)) - panel = !panel - user << "\blue you [panel ? "open" : "close"] the [src]'s maintenance panel"*/ if(istype(W,/obj/item/toy/crayon) ||istype(W,/obj/item/weapon/stamp)) if( state in list( 1, 3, 6 ) ) if(!crayon) @@ -201,7 +188,7 @@ else ..() else if(istype(W,/obj/item/weapon/grab)) - if( (state == 1) && hacked) + if(state == 1) var/obj/item/weapon/grab/G = W if(iscorgi(G.affecting)) G.affecting.loc = src @@ -249,9 +236,6 @@ if ( istype(W,/obj/item/clothing/head/syndicatefake ) ) user << "This item does not fit." return -// if ( istype(W,/obj/item/clothing/head/powered ) ) -// user << "This item does not fit." -// return if ( istype(W,/obj/item/clothing/head/helmet ) ) user << "This item does not fit." return @@ -305,4 +289,4 @@ state = 1 - update_icon() \ No newline at end of file + update_icon() diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 044ff57fa3f..7f07c585ddd 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -46,7 +46,14 @@ ticker.mode.traitors += user.mind user.mind.special_role = "Avatar of the Wish Granter" - add_objective(user.mind, /datum/objective/escape_obj/hijack, 1) + var/datum/objective/hijack/hijack = new + hijack.owner = user.mind + user.mind.objectives += hijack + + var/obj_count = 1 + for(var/datum/objective/OBJ in user.mind.objectives) + user << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ user << "You have a very bad feeling about this." diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 0f53b062e7f..a1ce789e73a 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -436,13 +436,14 @@ if(!T) return var/datum/gas_mixture/GM = new + GM.assert_gas("plasma") if(prob(10)) - GM.toxins += 100 + GM.gases["plasma"][MOLES] += 100 GM.temperature = 1500+T0C //should be enough to start a fire T.visible_message("The [src] suddenly disgorges a cloud of heated plasma.") qdel(src) else - GM.toxins += 5 + GM.gases["plasma"][MOLES] += 5 GM.temperature = istype(T) ? T.air.return_temperature() : T20C T.visible_message("The [src] suddenly disgorges a cloud of plasma.") T.assume_air(GM) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index a664b6227c5..c1ab8a6a7e6 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -177,8 +177,9 @@ cabin_air = new cabin_air.temperature = T20C cabin_air.volume = 200 - cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) - cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) + cabin_air.assert_gases("o2","n2") + cabin_air.gases["o2"][MOLES] = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) + cabin_air.gases["n2"][MOLES] = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) return cabin_air /obj/mecha/proc/add_radio() @@ -344,7 +345,7 @@ if(M.client) speech_bubble_recipients.Add(M.client) spawn(0) - flick_overlay(image('icons/mob/talk.dmi', src, "hR[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30) + flick_overlay(image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30) return //////////////////////////// @@ -412,7 +413,7 @@ var/atom/movable/backup = get_spacemove_backup() if(backup) - if(istype(backup) && movement_dir && !!backup.anchored) + if(istype(backup) && movement_dir && !backup.anchored) if(backup.newtonian_move(turn(movement_dir, 180))) if(occupant) occupant << "You push off of [backup] to propel yourself." diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index bbe88b07c86..2f5bd9ea000 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -1,6 +1,6 @@ /obj/effect/decal/cleanable/crayon name = "rune" - desc = "A rune drawn in crayon." + desc = "Graffiti. Damn kids." icon = 'icons/effects/crayondecal.dmi' icon_state = "rune1" layer = 2.1 @@ -17,7 +17,7 @@ loc = location name = e_name - desc = "A [name] drawn in crayon." + desc = "A [name] vandalizing the station." if(type == "poseur tag") type = pick(gang_name_pool) icon_state = type @@ -29,6 +29,7 @@ color = main + /obj/effect/decal/cleanable/crayon/gang layer = 3.6 //Harder to hide do_icon_rotate = FALSE //These are designed to always face south, so no rotation please. @@ -55,4 +56,4 @@ gang.territory -= territory.type gang.territory_new -= territory.type gang.territory_lost |= list(territory.type = territory.name) - return ..() \ No newline at end of file + return ..() diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index cb5f4de5cdd..a3b42392f70 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -163,9 +163,12 @@ T.air_update_turf() for(var/obj/effect/hotspot/H in T) qdel(H) - if(G.toxins) - G.nitrogen += (G.toxins) - G.toxins = 0 + var/list/G_gases = G.gases + if(G_gases["plasma"]) + G.assert_gas("n2") + G_gases["n2"][MOLES] += (G_gases["plasma"][MOLES]) + G_gases["plasma"][MOLES] = 0 + G.garbage_collect() for(var/obj/machinery/atmospherics/components/unary/U in T) if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber. U.welded = 1 diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 5b9f2917d15..3e5c5a29f55 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -39,6 +39,16 @@ spawn(duration) qdel(src) +/obj/effect/overlay/temp/guardian + randomdir = 0 + +/obj/effect/overlay/temp/guardian/phase + duration = 5 + icon_state = "phasein" + +/obj/effect/overlay/temp/guardian/phase/out + icon_state = "phaseout" + /obj/effect/overlay/temp/cult randomdir = 0 duration = 10 @@ -50,7 +60,7 @@ /obj/effect/overlay/temp/cult/turf name = "unholy glow" icon_state = "wallglow" - layer = 2.01 + layer = TURF_LAYER + 0.07 /obj/effect/overlay/temp/cult/turf/floor icon_state = "floorglow" diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm index 1171c646104..0d26ff0d940 100644 --- a/code/game/objects/items/candle.dm +++ b/code/game/objects/items/candle.dm @@ -59,8 +59,7 @@ if(!src.lit) src.lit = 1 //src.damtype = "fire" - for(var/mob/O in viewers(usr, null)) - O.show_message(flavor_text, 1) + usr.visible_message(flavor_text) SetLuminosity(CANDLE_LUMINOSITY) if(!infinite) SSobj.processing |= src diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 46f6c3c137c..9eb763b09ac 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -415,6 +415,7 @@ var/global/list/obj/item/device/pda/PDAs = list() dat += "Unable to obtain a reading.
" else var/datum/gas_mixture/environment = T.return_air() + var/list/env_gases = environment.gases var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() @@ -422,17 +423,11 @@ var/global/list/obj/item/device/pda/PDAs = list() dat += "Air Pressure: [round(pressure,0.1)] kPa
" if (total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - dat += "Nitrogen: [round(n2_level*100)]%
" - dat += "Oxygen: [round(o2_level*100)]%
" - dat += "Carbon Dioxide: [round(co2_level*100)]%
" - dat += "Plasma: [round(plasma_level*100)]%
" - if(unknown_level > 0.01) - dat += "OTHER: [round(unknown_level)]%
" + for(var/id in env_gases) + var/gas_level = env_gases[id][MOLES]/total_moles + if(id in hardcoded_gases || gas_level > 0.01) + dat += "[env_gases[id][GAS_NAME]]: [round(gas_level*100)]%
" + dat += "Temperature: [round(environment.temperature-T0C)]°C
" dat += "
" @@ -783,7 +778,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/proc/show_to_ghosts(mob/living/user, datum/data_pda_msg/msg,multiple = 0) for(var/mob/M in player_list) if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) - M.show_message("(F) [msg.sender] PDA Message --> [multiple ? "Everyone" : msg.recipient]: [msg.message][msg.get_photo_ref()]") + M << "(F) [msg.sender] PDA Message --> [multiple ? "Everyone" : msg.recipient]: [msg.message][msg.get_photo_ref()]" /obj/item/device/pda/proc/can_send(obj/item/device/pda/P) if(!P || qdeleted(P) || P.toff) @@ -949,9 +944,9 @@ var/global/list/obj/item/device/pda/PDAs = list() switch(scanmode) if(1) - user.visible_message(text("[] has analyzed []'s vitals!", user, C)) + C.visible_message("[user] has analyzed [C]'s vitals!") healthscan(user, C, 1) - src.add_fingerprint(user) + add_fingerprint(user) if(2) // Unused diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 954302bf055..639e59c9008 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -543,10 +543,10 @@ return b_stat = !( b_stat ) if(!istype(src, /obj/item/device/radio/beacon)) - if (b_stat) - user.show_message("The radio can now be attached and modified!") + if(b_stat) + user << "The radio can now be attached and modified!" else - user.show_message("The radio can no longer be modified or attached!") + user << "The radio can no longer be modified or attached!" updateDialog() //Foreach goto(83) add_fingerprint(user) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 32fdb40f65b..6a76998e260 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -114,7 +114,8 @@ MASS SPECTROMETER // Used by the PDA medical scanner too /proc/healthscan(mob/living/user, mob/living/M, mode = 1) - + if(user.stat || user.eye_blind) + return //Damage specifics var/oxy_loss = M.getOxyLoss() var/tox_loss = M.getToxLoss() @@ -199,8 +200,8 @@ MASS SPECTROMETER if(CI.status == ORGAN_ROBOTIC) implant_detect += "[H.name] is modified with a [CI.name].
" if(implant_detect) - user.show_message("Detected cybernetic modifications:") - user.show_message("[implant_detect]") + user << "Detected cybernetic modifications:" + user << "[implant_detect]" /proc/chemscan(mob/living/user, mob/living/M) if(ishuman(M)) @@ -250,11 +251,13 @@ MASS SPECTROMETER /obj/item/device/analyzer/attack_self(mob/user) - if (user.stat) + add_fingerprint(user) + + if (user.stat || user.eye_blind) return var/turf/location = user.loc - if (!( istype(location, /turf) )) + if(!istype(location)) return var/datum/gas_mixture/environment = location.return_air() @@ -262,43 +265,46 @@ MASS SPECTROMETER var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() - user.show_message("Results:", 1) + user << "Results:" if(abs(pressure - ONE_ATMOSPHERE) < 10) - user.show_message("Pressure: [round(pressure,0.1)] kPa", 1) + user << "Pressure: [round(pressure,0.1)] kPa" else - user.show_message("Pressure: [round(pressure,0.1)] kPa", 1) + user << "Pressure: [round(pressure,0.1)] kPa" if(total_moles) - var/o2_concentration = environment.oxygen/total_moles - var/n2_concentration = environment.nitrogen/total_moles - var/co2_concentration = environment.carbon_dioxide/total_moles - var/plasma_concentration = environment.toxins/total_moles + var/list/env_gases = environment.gases + + environment.assert_gases(arglist(hardcoded_gases)) + var/o2_concentration = env_gases["o2"][MOLES]/total_moles + var/n2_concentration = env_gases["n2"][MOLES]/total_moles + var/co2_concentration = env_gases["co2"][MOLES]/total_moles + var/plasma_concentration = env_gases["plasma"][MOLES]/total_moles + environment.garbage_collect() - var/unknown_concentration = 1-(o2_concentration+n2_concentration+co2_concentration+plasma_concentration) if(abs(n2_concentration - N2STANDARD) < 20) - user.show_message("Nitrogen: [round(n2_concentration*100)] %", 1) + user << "Nitrogen: [round(n2_concentration*100)] %" else - user.show_message("Nitrogen: [round(n2_concentration*100)] %", 1) + user << "Nitrogen: [round(n2_concentration*100)] %" if(abs(o2_concentration - O2STANDARD) < 2) - user.show_message("Oxygen: [round(o2_concentration*100)] %", 1) + user << "Oxygen: [round(o2_concentration*100)] %" else - user.show_message("Oxygen: [round(o2_concentration*100)] %", 1) + user << "Oxygen: [round(o2_concentration*100)] %" if(co2_concentration > 0.01) - user.show_message("CO2: [round(co2_concentration*100)] %", 1) + user << "CO2: [round(co2_concentration*100)] %" else - user.show_message("CO2: [round(co2_concentration*100)] %", 1) + user << "CO2: [round(co2_concentration*100)] %" if(plasma_concentration > 0.01) - user.show_message("Plasma: [round(plasma_concentration*100)] %", 1) + user << "Plasma: [round(plasma_concentration*100)] %" - if(unknown_concentration > 0.01) - user.show_message("Unknown: [round(unknown_concentration*100)] %", 1) + for(var/id in env_gases) + if(id in hardcoded_gases) + continue + var/gas_concentration = env_gases[id][MOLES]/total_moles + user << "[env_gases[id][GAS_NAME]]: [round(gas_concentration*100)] %" + user << "Temperature: [round(environment.temperature-T0C)] °C" - user.show_message("Temperature: [round(environment.temperature-T0C)] °C", 1) - - src.add_fingerprint(user) - return /obj/item/device/mass_spectrometer desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample." @@ -327,7 +333,7 @@ MASS SPECTROMETER icon_state = initial(icon_state) /obj/item/device/mass_spectrometer/attack_self(mob/user) - if (user.stat) + if (user.stat || user.eye_blind) return if (crit_fail) user << "This device has critically failed and is no longer functional!" @@ -340,7 +346,7 @@ MASS SPECTROMETER for(var/datum/reagent/R in reagents.reagent_list) if(R.id != "blood") reagents.clear_reagents() - user.show_message("The sample was contaminated! Please insert another sample.", 1) + user << "The sample was contaminated! Please insert another sample." return else blood_traces = params2list(R.data["trace_chem"]) @@ -367,7 +373,7 @@ MASS SPECTROMETER dat += "" user << dat reagents.clear_reagents() - return + /obj/item/device/mass_spectrometer/adv name = "advanced mass-spectrometer" @@ -389,32 +395,34 @@ MASS SPECTROMETER materials = list(MAT_METAL=30, MAT_GLASS=20) /obj/item/device/slime_scanner/attack(mob/living/M, mob/living/user) + if(user.stat || user.eye_blind) + return if (!isslime(M)) - user.show_message("This device can only scan slimes!", 1) + user << "This device can only scan slimes!" return var/mob/living/simple_animal/slime/T = M - user.show_message("Slime scan results:", 1) - user.show_message(text("[T.colour] [] slime", T.is_adult ? "adult" : "baby"), 1) - user.show_message(text("Nutrition: [T.nutrition]/[]", T.get_max_nutrition()), 1) + user << "Slime scan results:" + user << "[T.colour] [T.is_adult ? "adult" : "baby"] slime" + user << "Nutrition: [T.nutrition]/[T.get_max_nutrition()]" if (T.nutrition < T.get_starve_nutrition()) - user.show_message("Warning: slime is starving!", 1) + user << "Warning: slime is starving!" else if (T.nutrition < T.get_hunger_nutrition()) - user.show_message("Warning: slime is hungry", 1) - user.show_message("Electric change strength: [T.powerlevel]", 1) - user.show_message("Health: [T.health]", 1) + user << "Warning: slime is hungry" + user << "Electric change strength: [T.powerlevel]" + user << "Health: [T.health]" if (T.slime_mutation[4] == T.colour) - user.show_message("This slime does not evolve any further.", 1) + user << "This slime does not evolve any further." else if (T.slime_mutation[3] == T.slime_mutation[4]) if (T.slime_mutation[2] == T.slime_mutation[1]) - user.show_message("Possible mutation: [T.slime_mutation[3]]", 1) - user.show_message("Genetic destability: [T.mutation_chance/2] % chance of mutation on splitting", 1) + user << "Possible mutation: [T.slime_mutation[3]]" + user << "Genetic destability: [T.mutation_chance/2] % chance of mutation on splitting" else - user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)", 1) - user.show_message("Genetic destability: [T.mutation_chance] % chance of mutation on splitting", 1) + user << "Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]] (x2)" + user << "Genetic destability: [T.mutation_chance] % chance of mutation on splitting" else - user.show_message("Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]", 1) - user.show_message("Genetic destability: [T.mutation_chance] % chance of mutation on splitting", 1) + user << "Possible mutations: [T.slime_mutation[1]], [T.slime_mutation[2]], [T.slime_mutation[3]], [T.slime_mutation[4]]" + user << "Genetic destability: [T.mutation_chance] % chance of mutation on splitting" if (T.cores > 1) - user.show_message("Anomalious slime core amount detected", 1) - user.show_message("Growth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]", 1) + user << "Anomalious slime core amount detected" + user << "Growth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]" diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm index 96c48aab975..2695041736a 100644 --- a/code/game/objects/items/weapons/chrono_eraser.dm +++ b/code/game/objects/items/weapons/chrono_eraser.dm @@ -239,8 +239,9 @@ /obj/effect/chrono_field/return_air() //we always have nominal air and temperature var/datum/gas_mixture/GM = new - GM.oxygen = MOLES_O2STANDARD - GM.nitrogen = MOLES_N2STANDARD + GM.assert_gases("o2","n2") + GM.gases["o2"][MOLES] = MOLES_O2STANDARD + GM.gases["n2"][MOLES] = MOLES_N2STANDARD GM.temperature = T20C return GM diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index f81fc5dd559..40f851772f4 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -450,7 +450,8 @@ busy = 0 update_icon() return - H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) + if(!H.suiciding && !(H.disabilities & NOCLONE)) + H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest...") busy = 1 diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 9ed4f113aae..fffd768233c 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -207,7 +207,8 @@ //TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this... //Transfer 5% of current tank air contents to turf var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount) - air_transfer.toxins = air_transfer.toxins * 5 + if(air_transfer.gases["plasma"]) + air_transfer.gases["plasma"][MOLES] *= 5 target.assume_air(air_transfer) //Burn it based on transfered gas target.hotspot_expose((ptank.air_contents.temperature*2) + 380,500) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 47a339bd3e9..38c5d72b334 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -36,21 +36,21 @@ if (istype(W, /obj/item/weapon/screwdriver)) if (do_after(user, 20/W.toolspeed, target = src)) src.open =! src.open - user.show_message(text("You [] the service panel.", (src.open ? "open" : "close"))) + user.show_message("You [open ? "open" : "close"] the service panel.", 1) return if ((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking)) - user.show_message(text("Now attempting to reset internal memory, please hold."), 1) + user.show_message("Now attempting to reset internal memory, please hold.", 1) src.l_hacking = 1 if (do_after(usr, 100/W.toolspeed, target = src)) if (prob(40)) src.l_setshort = 1 src.l_set = 0 - user.show_message(text("Internal memory reset. Please give it a few seconds to reinitialize."), 1) + user.show_message("Internal memory reset. Please give it a few seconds to reinitialize.", 1) sleep(80) src.l_setshort = 0 src.l_hacking = 0 else - user.show_message(text("Unable to reset internal memory."), 1) + user.show_message("Unable to reset internal memory.", 1) src.l_hacking = 0 else src.l_hacking = 0 diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 3f6daf631b3..6dc851cd335 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -235,7 +235,7 @@ /obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade name = "boxed virus grenade kit" -/obj/item/weapon/storage/box/virus_kit/tuberculosisgrenade/New() +/obj/item/weapon/storage/box/syndie_kit/tuberculosisgrenade/New() ..() new /obj/item/weapon/grenade/chem_grenade/tuberculosis(src) for(var/i in 1 to 5) diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index 6d7db63e8a8..fea4e6db9fc 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -54,7 +54,7 @@ var/datum/gas_mixture/G = src.air_contents.remove(num) - var/allgases = G.carbon_dioxide + G.nitrogen + G.oxygen + G.toxins //fuck trace gases -Pete + var/allgases = G.total_moles() if(allgases >= 0.005) return 1 @@ -73,7 +73,8 @@ /obj/item/weapon/tank/jetpack/void/New() ..() - air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) /obj/item/weapon/tank/jetpack/oxygen @@ -84,7 +85,8 @@ /obj/item/weapon/tank/jetpack/oxygen/New() ..() - air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) /obj/item/weapon/tank/jetpack/oxygen/harness name = "jet harness (oxygen)" @@ -114,7 +116,8 @@ ..() ion_trail = new /datum/effect_system/trail_follow/ion() ion_trail.set_up(src) - air_contents.carbon_dioxide = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("co2") + air_contents.gases["co2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) /obj/item/weapon/tank/jetpack/suit diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 6ba4997fb41..9a4bdd9183f 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -20,7 +20,8 @@ /obj/item/weapon/tank/internals/oxygen/New() ..() - src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -45,13 +46,9 @@ /obj/item/weapon/tank/internals/anesthetic/New() ..() - - src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - - var/datum/gas/sleeping_agent/trace_gas = new() - trace_gas.moles = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD - - src.air_contents.trace_gases += trace_gas + air_contents.assert_gases("o2", "n2o") + air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD + air_contents.gases["n2o"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD return /* @@ -66,9 +63,9 @@ /obj/item/weapon/tank/internals/air/New() ..() - - src.air_contents.oxygen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD - src.air_contents.nitrogen = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD + air_contents.assert_gases("o2","n2") + air_contents.gases["o2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * O2STANDARD + air_contents.gases["n2"][MOLES] = (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) * N2STANDARD return @@ -86,8 +83,8 @@ /obj/item/weapon/tank/internals/plasma/New() ..() - - src.air_contents.toxins = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return /obj/item/weapon/tank/internals/plasma/attackby(obj/item/weapon/W, mob/user, params) @@ -106,7 +103,8 @@ /obj/item/weapon/tank/internals/plasma/full/New() ..() - src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -121,14 +119,14 @@ /obj/item/weapon/tank/internals/plasmaman/New() ..() - - src.air_contents.toxins = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return /obj/item/weapon/tank/internals/plasmaman/full/New() ..() - - src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -140,8 +138,8 @@ /obj/item/weapon/tank/internals/plasmaman/belt/full/New() ..() - - src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("plasma") + air_contents.gases["plasma"][MOLES] = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return @@ -163,7 +161,8 @@ /obj/item/weapon/tank/internals/emergency_oxygen/New() ..() - src.air_contents.oxygen = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) + air_contents.assert_gas("o2") + air_contents.gases["o2"][MOLES] = (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return /obj/item/weapon/tank/internals/emergency_oxygen/engi diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 20acad8eed8..6d2303a0483 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -158,7 +158,7 @@ Frequency: if(turfs.len) L["None (Dangerous)"] = pick(turfs) var/t1 = input(user, "Please select a teleporter to lock in on.", "Hand Teleporter") in L - if ((user.get_active_hand() != src || user.stat || user.restrained())) + if (user.get_active_hand() != src || user.incapacitated()) return if(active_portals >= 3) user.show_message("\The [src] is recharging!") @@ -168,7 +168,6 @@ Frequency: var/obj/effect/portal/P = new /obj/effect/portal(get_turf(src), T, src) try_move_adjacent(P) active_portals++ - src.add_fingerprint(user) - return + add_fingerprint(user) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 2cd7a772f8c..aab2bb1c402 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -199,3 +199,6 @@ tesla_zap(src, 3, power_bounced) spawn(10) being_shocked = 0 + +/obj/proc/CanAStarPass() + . = !density \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 4bd4b568a43..e700e03c8cd 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -66,13 +66,10 @@ var/datum/gas_mixture/gas = (..()) if(!gas) return null + var/datum/gas_mixture/newgas = new/datum/gas_mixture() - newgas.oxygen = gas.oxygen - newgas.carbon_dioxide = gas.carbon_dioxide - newgas.nitrogen = gas.nitrogen - newgas.toxins = gas.toxins - newgas.volume = gas.volume - newgas.temperature = gas.temperature + newgas.copy_from(gas) + if(newgas.temperature <= target_temp) return diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 3dfd2e7d0db..db6fadf1462 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -11,6 +11,7 @@ var/health = 10 var/destroyed = 0 var/obj/item/stack/rods/stored + level = 3 /obj/structure/grille/New() stored = new/obj/item/stack/rods(src) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 521d01bfbec..175971ef2c6 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -23,10 +23,12 @@ /obj/structure/janitorialcart/proc/wet_mop(obj/item/weapon/mop, mob/user) if(reagents.total_volume < 1) user << "[src] is out of water!" + return 0 else - reagents.trans_to(mop, 5) // + reagents.trans_to(mop, 5) user << "You wet [mop] in [src]." playsound(loc, 'sound/effects/slosh.ogg', 25, 1) + return 1 /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) if(!user.drop_item()) @@ -43,8 +45,8 @@ if(istype(I, /obj/item/weapon/mop)) var/obj/item/weapon/mop/m=I if(m.reagents.total_volume < m.reagents.maximum_volume) - wet_mop(m, user) - return + if (wet_mop(m, user)) + return if(!mymop) m.janicart_insert(user, src) else diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index b1b3d9994bf..343cfb5d940 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -61,6 +61,7 @@ /obj/structure/mirror/attackby(obj/item/I, mob/living/user, params) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(I.damtype == STAMINA) return @@ -90,6 +91,7 @@ /obj/structure/mirror/attack_alien(mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(islarva(user)) return @@ -106,6 +108,7 @@ var/mob/living/simple_animal/M = user if(M.melee_damage_upper <= 0) return + user.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) if(shattered) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) @@ -115,6 +118,7 @@ /obj/structure/mirror/attack_slime(mob/living/user) + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) if(shattered) playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) @@ -246,4 +250,4 @@ if(new_eye_color) H.eye_color = sanitize_hexcolor(new_eye_color) H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - H.update_body() \ No newline at end of file + H.update_body() diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm index eb15ba1d4c3..82bb58e9e08 100644 --- a/code/game/objects/structures/plasticflaps.dm +++ b/code/game/objects/structures/plasticflaps.dm @@ -7,6 +7,17 @@ anchored = 1 layer = 4 +/obj/structure/plasticflaps/CanAStarPass(ID, to_dir, caller) + if(istype(caller, /mob/living)) + if(istype(caller,/mob/living/simple_animal/bot/mulebot)) + return 1 + + var/mob/living/M = caller + if(!M.ventcrawler && M.mob_size != MOB_SIZE_TINY) + return 0 + + return 1 //diseases, stings, etc can pass + /obj/structure/plasticflaps/CanPass(atom/movable/A, turf/T) if(istype(A) && A.checkpass(PASSGLASS)) return prob(60) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 0370ec49f9d..f2cd240656f 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -11,8 +11,9 @@ /obj/structure/transit_tube_pod/New(loc) ..(loc) - air_contents.oxygen = MOLES_O2STANDARD * 2 - air_contents.nitrogen = MOLES_N2STANDARD + air_contents.assert_gases("o2", "n2") + air_contents.gases["o2"][MOLES] = MOLES_O2STANDARD * 2 + air_contents.gases["n2"][MOLES] = MOLES_N2STANDARD air_contents.temperature = T20C // Give auto tubes time to align before trying to start moving @@ -124,11 +125,7 @@ // datum, there might be problems if I don't... /obj/structure/transit_tube_pod/return_air() var/datum/gas_mixture/GM = new() - GM.oxygen = air_contents.oxygen - GM.carbon_dioxide = air_contents.carbon_dioxide - GM.nitrogen = air_contents.nitrogen - GM.toxins = air_contents.toxins - GM.temperature = air_contents.temperature + GM.copy_from(air_contents) return GM // For now, copying what I found in an unused FEA file (and almost identical in a diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 1c82949c0e8..3c0a54f43b1 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -439,6 +439,14 @@ /obj/structure/window/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) return 0 +/obj/structure/window/CanAStarPass(ID, to_dir) + if(!density) + return 1 + if((dir == SOUTHWEST) || (dir == to_dir)) + return 0 + + return 1 + /obj/structure/window/reinforced name = "reinforced window" icon_state = "rwindow" @@ -475,6 +483,7 @@ fulltile = 1 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile) + level = 3 /obj/structure/window/reinforced/tinted/fulltile icon = 'icons/obj/smooth_structures/tinted_window.dmi' @@ -483,12 +492,14 @@ fulltile = 1 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile/) + level = 3 /obj/structure/window/reinforced/fulltile/ice icon = 'icons/obj/smooth_structures/rice_window.dmi' icon_state = "ice_window" maxhealth = 150 canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/reinforced/fulltile/ice) + level = 3 /obj/structure/window/shuttle name = "shuttle window" @@ -503,3 +514,4 @@ smooth = SMOOTH_TRUE canSmoothWith = null explosion_block = 1 + level = 3 diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index d49d0ca0a33..06f9ce5d1f6 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -60,3 +60,16 @@ /turf/simulated/ChangeTurf(var/path) . = ..() smooth_icon_neighbors(src) + +/turf/simulated/proc/is_shielded() + +/turf/simulated/contents_explosion(severity, target) + var/affecting_level + if(severity == 1) + affecting_level = 1 + else + affecting_level = is_shielded() ? 2 : (intact ? 2 : 1) + for(var/V in contents) + var/atom/A = V + if(A.level >= affecting_level) + A.ex_act(severity, target) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 3a5e694d904..6ead73f0cae 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -49,11 +49,14 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," /turf/simulated/floor/ex_act(severity, target) ..() + if(is_shielded()) + return if(target == src) src.ChangeTurf(src.baseturf) if(target != null) ex_act(3) return + switch(severity) if(1) src.ChangeTurf(src.baseturf) @@ -75,7 +78,11 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," if (prob(50)) src.break_tile() src.hotspot_expose(1000,CELL_VOLUME) - return + +/turf/simulated/floor/is_shielded() + for(var/obj/structure/A in contents) + if(A.level == 3) + return 1 /turf/simulated/floor/blob_act() return @@ -169,4 +176,4 @@ var/list/icons_to_ignore_at_floor_init = list("damaged1","damaged2","damaged3"," ChangeTurf(/turf/simulated/floor/engine/cult) /turf/simulated/floor/can_have_cabling() - return !burnt & !broken + return !burnt && !broken diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index f1d67f5776e..1373a0501de 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -134,10 +134,9 @@ /turf/simulated/floor/engine/n20/New() ..() var/datum/gas_mixture/adding = new - var/datum/gas/sleeping_agent/trace_gas = new - trace_gas.moles = 6000 - adding.trace_gases += trace_gas + adding.assert_gas("n2o") + adding.gases["n2o"][MOLES] = 6000 adding.temperature = T20C assume_air(adding) diff --git a/code/game/turfs/simulated/river.dm b/code/game/turfs/simulated/river.dm new file mode 100644 index 00000000000..b602319fba6 --- /dev/null +++ b/code/game/turfs/simulated/river.dm @@ -0,0 +1,85 @@ +#define RANDOM_UPPER_X 200 +#define RANDOM_UPPER_Y 200 + +#define RANDOM_LOWER_X 50 +#define RANDOM_LOWER_Y 50 + +/proc/spawn_rivers(target_z = 5, nodes = 4, turf_type = /turf/simulated/floor/plating/lava/smooth) + var/list/river_nodes = list() + var/num_spawned = 0 + while(num_spawned < nodes) + var/turf/simulated/F = locate(rand(RANDOM_LOWER_X, RANDOM_UPPER_X), rand(RANDOM_LOWER_Y, RANDOM_UPPER_Y), target_z) + + river_nodes += new /obj/effect/landmark/river_waypoint(F) + num_spawned++ + + //make some randomly pathing rivers + for(var/A in river_nodes) + var/obj/effect/landmark/river_waypoint/W = A + if (W.z != target_z || W.connected) + continue + W.connected = 1 + var/turf/cur_turf = get_turf(W) + cur_turf.ChangeTurf(turf_type) + var/turf/target_turf = get_turf(pick(river_nodes - W)) + if(!target_turf) + break + var/detouring = 0 + var/cur_dir = get_dir(cur_turf, target_turf) + while(cur_turf != target_turf) + + if(detouring) //randomly snake around a bit + if(prob(20)) + detouring = 0 + cur_dir = get_dir(cur_turf, target_turf) + else if(prob(20)) + detouring = 1 + if(prob(50)) + cur_dir = turn(cur_dir, 45) + else + cur_dir = turn(cur_dir, -45) + else + cur_dir = get_dir(cur_turf, target_turf) + + cur_turf = get_step(cur_turf, cur_dir) + + if(!istype(cur_turf, /turf/simulated/wall)) //Rivers will flow around walls + var/turf/simulated/river_turf = cur_turf + river_turf.ChangeTurf(turf_type) + river_turf.Spread(30, 25) + else + detouring = 0 + cur_dir = get_dir(cur_turf, target_turf) + cur_turf = get_step(cur_turf, cur_dir) + continue + + + for(var/WP in river_nodes) + qdel(WP) + + +/obj/effect/landmark/river_waypoint + name = "river waypoint" + var/connected = 0 + invisibility = 101 + + +/turf/proc/Spread(probability = 30, prob_loss = 25) + if(probability <= 0) + return + + for(var/turf/simulated/F in orange(1, src)) + + var/turf/L = F + + L.ChangeTurf(src.type) + + if(L && prob(probability)) + L.Spread(probability - prob_loss) + + +#undef RANDOM_UPPER_X +#undef RANDOM_UPPER_Y + +#undef RANDOM_LOWER_X +#undef RANDOM_LOWER_Y diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 4717cf026ca..d7ad8f5fbc3 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -8,6 +8,7 @@ density = 1 blocks_air = 1 explosion_block = 1 + layer = TURF_LAYER + 0.05 thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 50e114bfecf..a7fafa6e2aa 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -142,32 +142,32 @@ //////Assimilate Air////// /turf/simulated/proc/Assimilate_Air() if(air) - var/aoxy = 0//Holders to assimilate air from nearby turfs - var/anitro = 0 - var/aco = 0 - var/atox = 0 - var/atemp = 0 + var/datum/gas_mixture/a_gas_mixture = new//Holders to assimilate air from nearby turfs + var/list/a_gases = a_gas_mixture.gases var/turf_count = 0 for(var/direction in cardinal)//Only use cardinals to cut down on lag var/turf/T = get_step(src,direction) + if(istype(T,/turf/space))//Counted as no air turf_count++//Considered a valid turf for air calcs continue + else if(istype(T,/turf/simulated/floor)) var/turf/simulated/S = T if(S.air)//Add the air's contents to the holders - aoxy += S.air.oxygen - anitro += S.air.nitrogen - aco += S.air.carbon_dioxide - atox += S.air.toxins - atemp += S.air.temperature - turf_count ++ - air.oxygen = (aoxy/max(turf_count,1))//Averages contents of the turfs, ignoring walls and the like - air.nitrogen = (anitro/max(turf_count,1)) - air.carbon_dioxide = (aco/max(turf_count,1)) - air.toxins = (atox/max(turf_count,1)) - air.temperature = (atemp/max(turf_count,1))//Trace gases can get bant + var/list/S_gases = S.air.gases + for(var/id in a_gases) + a_gases[id][MOLES] += S_gases[id][MOLES] + a_gas_mixture.temperature += S.air.temperature + turf_count++ + + air.copy_from(a_gas_mixture) + var/list/air_gases = air.gases + for(var/id in air_gases) + air_gases[id][MOLES] /= max(turf_count,1)//Averages contents of the turfs, ignoring walls and the like + + air.temperature /= max(turf_count,1) SSair.add_to_active(src) /turf/proc/ReplaceWithLattice() @@ -292,6 +292,7 @@ blocks_air = 1 opacity = 1 explosion_block = 50 + layer = TURF_LAYER + 0.05 /turf/indestructible/splashscreen name = "Space Station 13" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c624ae01ef5..b52ead67447 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -335,10 +335,12 @@ var/list/admin_verbs_hideable = list( if(istype(mob,/mob/dead/observer)) //re-enter var/mob/dead/observer/ghost = mob - if (!ghost.can_reenter_corpse) + if(!ghost.mind || !ghost.mind.current) //won't do anything if there is no body + return + if(!ghost.can_reenter_corpse) log_admin("[key_name(usr)] re-entered corpse") message_admins("[key_name_admin(usr)] re-entered corpse") - ghost.can_reenter_corpse = 1 //just in-case. + ghost.can_reenter_corpse = 1 //force re-entering even when otherwise not possible ghost.reenter_corpse() feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! else if(istype(mob,/mob/new_player)) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index f3800c812f7..81c34528e23 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2174,7 +2174,7 @@ else if(href_list["check_antagonist"]) if(!check_rights(R_ADMIN)) return - check_antagonists() + usr.client.check_antagonists() else if(href_list["kick_all_from_lobby"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index e6fd6cfb0d5..2abf4960131 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -197,14 +197,14 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return var/datum/gas_mixture/env = T.return_air() + var/list/env_gases = env.gases var/t = "" - t+= "Nitrogen : [env.nitrogen]\n" - t+= "Oxygen : [env.oxygen]\n" - t+= "Plasma : [env.toxins]\n" - t+= "CO2: [env.carbon_dioxide]\n" + for(var/id in env_gases) + if(id in hardcoded_gases || env_gases[id][MOLES]) + t+= "[env_gases[id][GAS_NAME]] : [env_gases[id][MOLES]]\n" - usr.show_message(t, 1) + usr << t feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_robotize(mob/M in mob_list) @@ -641,7 +641,8 @@ var/global/list/g_fancy_list_of_types = null if(Rad.anchored) if(!Rad.P) var/obj/item/weapon/tank/internals/plasma/Plasma = new/obj/item/weapon/tank/internals/plasma(Rad) - Plasma.air_contents.toxins = 70 + Plasma.air_contents.assert_gas("plasma") + Plasma.air_contents.gases["plasma"][MOLES] = 70 Rad.drainratio = 0 Rad.P = Plasma Plasma.loc = Rad diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index d11da6afb96..4aea5d08dbb 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -6,15 +6,17 @@ return var/datum/gas_mixture/GM = target.return_air() + var/list/GM_gases var/burning = 0 if(istype(target, /turf/simulated)) var/turf/simulated/T = target if(T.active_hotspot) burning = 1 - usr << "@[target.x],[target.y]: O:[GM.oxygen] T:[GM.toxins] N:[GM.nitrogen] C:[GM.carbon_dioxide] w [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]" - for(var/datum/gas/trace_gas in GM.trace_gases) - usr << "[trace_gas.type]: [trace_gas.moles]" + usr << "@[target.x],[target.y]: [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]" + for(var/id in GM_gases) + if(id in hardcoded_gases || GM_gases[id][MOLES]) + usr << "[GM_gases[id][GAS_NAME]]: [GM_gases[id][MOLES]]" feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/fix_next_move() diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 88cd7f16394..d856e5b8577 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -10,8 +10,20 @@ ticker.mode.traitors += H.mind H.mind.special_role = "traitor" - add_objective(H.mind, /datum/objective/default/steal) - add_objective(H.mind, /datum/objective/escape_obj/hijack, 1) + var/datum/objective/steal/steal_objective = new + steal_objective.owner = H.mind + steal_objective.set_target(new /datum/objective_item/steal/nukedisc) + H.mind.objectives += steal_objective + + var/datum/objective/hijack/hijack_objective = new + hijack_objective.owner = H.mind + H.mind.objectives += hijack_objective + + H << "You are the traitor." + var/obj_count = 1 + for(var/datum/objective/OBJ in H.mind.objectives) + H << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ for (var/obj/item/I in H) if (istype(I, /obj/item/weapon/implant)) diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 9e5cc53faf9..3a446749607 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -108,7 +108,10 @@ return /obj/item/weapon/tank/proc/ignite() //This happens when a bomb is told to explode - var/fuel_moles = air_contents.toxins + air_contents.oxygen/6 + air_contents.assert_gases("plasma", "o2") + var/fuel_moles = air_contents.gases["plasma"][MOLES] + air_contents.gases["o2"][MOLES]/6 + air_contents.garbage_collect() + var/strength = 1 var/turf/ground_zero = get_turf(loc) diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index 9b30d40a348..b753875e24b 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -76,7 +76,7 @@ if(!secured) user.show_message("The [name] is unsecured!") return 0 - var/dat = text("Health Sensor [scanning?"On":"Off"]") + var/dat = "Health Sensor [scanning?"On":"Off"]" if(scanning && health_scan) dat += "
Health: [health_scan]" user << browse(dat, "window=hscan") diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index eeca2c33add..f93f77882fd 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -168,7 +168,6 @@ obj/item/weapon/paper/crumpled/snowdin/shovel /obj/item/weapon/twohanded/dualsaber = 15, /obj/item/organ/internal/heart/demon = 7, /obj/item/weapon/gun/projectile/automatic/c20r/unrestricted = 16, - /obj/item/weapon/teleportation_scroll = 5, /obj/item/weapon/dice/d20/fate = 4, /obj/item/weapon/gun/magic/wand/resurrection/inert = 15, /obj/item/weapon/gun/magic/wand/resurrection = 10, diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 7a4bcc86671..5b9153cbd2c 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -96,8 +96,14 @@ user << "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart." ticker.mode.traitors += user.mind user.mind.special_role = "traitor" - add_objective(user.mind, /datum/objective/escape_obj/hijack, 1) + var/datum/objective/hijack/hijack = new + hijack.owner = user.mind + user.mind.objectives += hijack user << "Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!" + var/obj_count = 1 + for(var/datum/objective/OBJ in user.mind.objectives) + user << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ user.set_species(/datum/species/shadow) if("Peace") user << "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence." diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 2115af490f0..51cf2a1c2f6 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -13,7 +13,7 @@ var/obj/item/clothing/suit/space/hardsuit/suit item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite) action_button_name = "Toggle Helmet Light" - flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP + flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH @@ -40,6 +40,15 @@ if(on) user.AddLuminosity(-brightness_on) SetLuminosity(brightness_on) + if(suit) + suit.RemoveHelmet() + +/obj/item/clothing/head/helmet/space/hardsuit/equipped(mob/user, slot) + if(slot != slot_head) + if(suit) + suit.RemoveHelmet() + else + qdel(src) /obj/item/clothing/head/helmet/space/hardsuit/proc/display_visor_message(var/msg) var/mob/wearer = loc @@ -180,7 +189,7 @@ on = 0 var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null action_button_name = "Toggle Helmet Mode" - flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL | NODROP + flags = BLOCKHAIR | STOPSPRESSUREDMAGE | THICKMATERIAL flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH /obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon() diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 89c27f94d13..caccd580ebc 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -228,7 +228,7 @@ for(var/mob/living/M in view(6, owner)) if(M == owner) continue - owner.Beam(M,icon_state="purple_lightning",icon='icons/effects/effects.dmi',time=5) + owner.Beam(M,icon_state="lightning[rand(1, 12)]",icon='icons/effects/effects.dmi',time=5) M.adjustFireLoss(25) playsound(M, 'sound/machines/defib_zap.ogg', 50, 1, -1) return 1 diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 3ad99150f75..a50f174c9bc 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -137,6 +137,8 @@ helmet.attack_self(H) H.unEquip(helmet, 1) H.update_inv_wear_suit() + H << "The helmet on the hardsuit disengages." + playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) helmet.loc = src /obj/item/clothing/suit/space/hardsuit/dropped() @@ -163,6 +165,4 @@ H.update_inv_wear_suit() playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) else - H << "You disengage the helmet on the hardsuit." - playsound(src.loc, 'sound/mecha/mechmove03.ogg', 50, 1) RemoveHelmet() diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 3939fb4f527..1f661c8bdba 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -228,7 +228,10 @@ var/turf/simulated/floor/T = holder.loc if(istype(T)) var/datum/gas_mixture/GM = T.air - GM.oxygen = max(0, GM.oxygen - severity * holder.energy) + if(!GM.gases["o2"]) + return + GM.gases["o2"][MOLES] -= severity * holder.energy + GM.garbage_collect() /datum/spacevine_mutation/nitro_eater name = "nitrogen consuming" @@ -240,7 +243,10 @@ var/turf/simulated/floor/T = holder.loc if(istype(T)) var/datum/gas_mixture/GM = T.air - GM.nitrogen = max(0, GM.nitrogen - severity * holder.energy) + if(!GM.gases["n2"]) + return + GM.gases["n2"][MOLES] -= severity * holder.energy + GM.garbage_collect() /datum/spacevine_mutation/carbondioxide_eater name = "CO2 consuming" @@ -252,7 +258,10 @@ var/turf/simulated/floor/T = holder.loc if(istype(T)) var/datum/gas_mixture/GM = T.air - GM.carbon_dioxide = max(0, GM.carbon_dioxide - severity * holder.energy) + if(!GM.gases["co2"]) + return + GM.gases["co2"][MOLES] -= severity * holder.energy + GM.garbage_collect() /datum/spacevine_mutation/plasma_eater name = "toxins consuming" @@ -264,7 +273,10 @@ var/turf/simulated/floor/T = holder.loc if(istype(T)) var/datum/gas_mixture/GM = T.air - GM.toxins = max(0, GM.toxins - severity * holder.energy) + if(!GM.gases["plasma"]) + return + GM.gases["plasma"][MOLES] -= severity * holder.energy + GM.garbage_collect() /datum/spacevine_mutation/thorns name = "thorny" diff --git a/code/modules/events/wizard/imposter.dm b/code/modules/events/wizard/imposter.dm index 88a12c522f5..15b07a1c12d 100644 --- a/code/modules/events/wizard/imposter.dm +++ b/code/modules/events/wizard/imposter.dm @@ -46,9 +46,11 @@ ticker.mode.apprentices += I.mind I.mind.special_role = "imposter" - var/datum/objective/protect_objective = add_objective(I.mind, /datum/objective/default/protect) + var/datum/objective/protect/protect_objective = new /datum/objective/protect + protect_objective.owner = I.mind protect_objective.target = W.mind protect_objective.explanation_text = "Protect [W.real_name], the wizard." + I.mind.objectives += protect_objective ticker.mode.update_wiz_icons_added(I.mind) I.attack_log += "\[[time_stamp()]\] Is an imposter!" diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 1c3365cd59a..03648956916 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -128,7 +128,7 @@ Gunshots/explosions/opening doors/less rare audio (done) if(!U.welded) src.loc = U.loc break - image_state = pick("plasma","sleeping_agent") + image_state = pick("plasma","nitrous_oxide") flood_images += image(image_icon,src,image_state,MOB_LAYER) flood_turfs += get_turf(src.loc) if(target.client) target.client.images |= flood_images diff --git a/code/modules/food&drinks/drinks/drinks/bottle.dm b/code/modules/food&drinks/drinks/drinks/bottle.dm index 9b9bccc986e..ca560642fae 100644 --- a/code/modules/food&drinks/drinks/drinks/bottle.dm +++ b/code/modules/food&drinks/drinks/drinks/bottle.dm @@ -125,8 +125,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/proc/SplashReagents(var/mob/M) if(src.reagents.total_volume) - for(var/mob/O in viewers(M, null)) - O.show_message(text("The contents of \the [src] splashes all over [M]!"), 1) + M.visible_message("The contents of \the [src] splashes all over [M]!") reagents.reaction(M, TOUCH) reagents.clear_reagents() return @@ -141,6 +140,7 @@ throwforce = 5 throw_speed = 3 throw_range = 5 + w_class = 1 item_state = "beer" hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("stabbed", "slashed", "attacked") diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index b6bf0692c9f..3f570dcf2d8 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -92,7 +92,7 @@ return ..() /obj/item/weapon/deck/proc/dealTo(mob/living/target, mob/living/source) - if (!src.cards.len) + if (!cards.len) source.show_message("There are no cards in the deck.") return @@ -193,10 +193,10 @@ . = ..() if((!concealed || src.loc == usr) && cards.len) - usr.show_message("It contains: ") + usr.show_message("It contains: ", 1) for (var/datum/playingcard/card in cards) - usr.show_message("The [card.name].") + usr.show_message("The [card.name].", 1) /obj/item/weapon/hand/proc/update_conceal() if (src.concealed) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index f15c5a5c37e..40c0ea1d568 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -52,6 +52,7 @@ circuit = /obj/item/weapon/circuitboard/mining_shuttle shuttleId = "mining" possible_destinations = "mining_home;mining_away" + no_destination_swap = 1 /*********************Pickaxe & Drills**************************/ @@ -257,11 +258,7 @@ A.nitrogen = 82 A.carbon_dioxide = 0 A.toxins = 0 - A.air.oxygen = 21 - A.air.carbon_dioxide = 0 - A.air.nitrogen = 82 - A.air.toxins = 0 - A.air.temperature = 293.15 + A.air.copy_from_turf(A) SSair.add_to_active(A) A.overlays.Cut() var/area/Z = get_area(A) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index e6c2ad43328..e8eb3462876 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -16,6 +16,7 @@ var/global/list/rockTurfEdgeCache opacity = 1 density = 1 blocks_air = 1 + layer = TURF_LAYER + 0.05 temperature = TCMB var/environment_type = "asteroid" var/turf/simulated/floor/plating/asteroid/turf_type = /turf/simulated/floor/plating/asteroid //For basalt vs normal asteroid @@ -89,7 +90,7 @@ var/global/list/rockTurfEdgeCache icon_state = "rock" return -/turf/simulated/mineral/proc/Spread(turf/T) +/turf/simulated/mineral/Spread(turf/T) new src.type(T) /turf/simulated/mineral/random diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index d7302441fad..f3cc75ce5d4 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -341,6 +341,9 @@ /obj/item/weapon/coin/attack_self(mob/user) if(cooldown < world.time - 15) + if(string_attached) //does the coin have a wire attached + user << "The coin won't flip very well with something attached!" //Tell user it will not flip + return //do not flip the coin var/coinflip = pick(sideslist) cooldown = world.time flick("coin_[cmineral]_flip", src) @@ -350,5 +353,5 @@ sleep(15) if(loc == oldloc && user && !user.incapacitated()) user.visible_message("[user] has flipped [src]. It lands on [coinflip].", \ - "You flip [src]. It lands on [coinflip].", \ - "You hear the clattering of loose change.") \ No newline at end of file + "You flip [src]. It lands on [coinflip].", \ + "You hear the clattering of loose change.") diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 4e444378c6f..1d78e69955a 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -12,6 +12,7 @@ ventcrawler = 2 languages = ALIEN verb_say = "hisses" + bubble_icon = "alien" type_of_meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno var/nightvision = 1 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 05bc607668b..4f01f0ca45d 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -90,8 +90,7 @@ Doesn't work on other aliens/AI.*/ if(locate(/obj/structure/alien/weeds/node) in get_turf(user)) src << "There's already a weed node here." return 0 - for(var/mob/O in viewers(user, null)) - O.show_message(text("[user] has planted some alien weeds!"), 1) + user.visible_message("[user] has planted some alien weeds!") new/obj/structure/alien/weeds/node(user.loc) return 1 @@ -241,7 +240,7 @@ Doesn't work on other aliens/AI.*/ user << "There is already a resin structure there." return 0 var/choice = input("Choose what you wish to shape.","Resin building") as null|anything in structures - if(!choice) + if(!choice) return 0 if (!cost_check(check_turf,user)) return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index a27604dbb88..74e23947a4c 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -5,8 +5,9 @@ ventcrawler = 0 //pull over that ass too fat unique_name = 0 pixel_x = -16 + bubble_icon = "alienroyal" mob_size = MOB_SIZE_LARGE - layer = 6 + layer = MOB_LAYER + 0.5 //above most mobs, but below speechbubbles pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper. butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3) diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 4162a583675..ac23410cc38 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -9,22 +9,27 @@ var/toxins_used = 0 var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME + var/list/breath_gases = breath.gases + + breath.assert_gases("plasma", "o2") //Partial pressure of the toxins in our breath - var/Toxins_pp = (breath.toxins/breath.total_moles())*breath_pressure + var/Toxins_pp = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure if(Toxins_pp) // Detect toxins in air - adjustPlasma(breath.toxins*250) + adjustPlasma(breath_gases["plasma"][MOLES]*250) throw_alert("alien_tox", /obj/screen/alert/alien_tox) - toxins_used = breath.toxins + toxins_used = breath_gases["plasma"][MOLES] else clear_alert("alien_tox") //Breathe in toxins and out oxygen - breath.toxins -= toxins_used - breath.oxygen += toxins_used + breath_gases["plasma"][MOLES] -= toxins_used + breath_gases["o2"][MOLES] += toxins_used + + breath.garbage_collect() //BREATH TEMPERATURE handle_breath_temperature(breath) diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index f66c3c8794d..dec01676dd5 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -1,5 +1,5 @@ /mob/living/carbon/alien/say(message) - . = ..(message, "A") + . = ..() if(.) playsound(loc, "hiss", 25, 1, 1) //erp just isn't the same without sound feedback diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 65a66e7ef3d..d9d330e3a7a 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -83,15 +83,12 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 update_body() var/word = pick("dizzy","woozy","faint") src << "You feel [word]." - if(oxyloss < 20) - oxyloss += 3 + oxyloss += max(0, (20-oxyloss)*0.2) if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) if(!pale) pale = 1 update_body() - if(oxyloss < 50) - oxyloss += 10 - oxyloss += 1 + oxyloss += max(1, (50-oxyloss)*0.2) if(prob(5)) eye_blurry += 6 var/word = pick("dizzy","woozy","faint") @@ -310,4 +307,4 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 else B.blood_DNA[source.data["blood_DNA"]] = "O+" - return B \ No newline at end of file + return B diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 8eb86681f9c..9b51ef746a7 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -37,8 +37,6 @@ make_blood() ..() - var/mob/M = src - faction |= "\ref[M]" /mob/living/carbon/human/prepare_data_huds() //Update med hud images... diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index e3c6d588a28..d4f4e91e080 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -1,7 +1,12 @@ /mob/living/carbon/human/attack_hulk(mob/living/carbon/human/user) if(user.a_intent == "harm") ..(user, 1) + playsound(loc, user.dna.species.attack_sound, 25, 1, -1) + var/hulk_verb = pick("smash","pummel") + visible_message("[user] has [hulk_verb]ed [src]!", \ + "[user] has [hulk_verb]ed [src]!") adjustBruteLoss(15) + return 1 /mob/living/carbon/human/attack_hand(mob/living/carbon/human/M) if(..()) //to allow surgery to return properly. diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 1bef224b24e..6a2eb0948f1 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1185,10 +1185,14 @@ var/gas_breathed = 0 + var/list/breath_gases = breath.gases + + breath.assert_gases("o2", "plasma", "co2", "n2o") + //Partial pressures in our breath - var/O2_pp = breath.get_breath_partial_pressure(breath.oxygen) - var/Toxins_pp = breath.get_breath_partial_pressure(breath.toxins) - var/CO2_pp = breath.get_breath_partial_pressure(breath.carbon_dioxide) + var/O2_pp = breath.get_breath_partial_pressure(breath_gases["o2"][MOLES]) + var/Toxins_pp = breath.get_breath_partial_pressure(breath_gases["plasma"][MOLES]) + var/CO2_pp = breath.get_breath_partial_pressure(breath_gases["co2"][MOLES]) //-- OXY --// @@ -1196,7 +1200,7 @@ //Too much oxygen! //Yes, some species may not like it. if(safe_oxygen_max) if(O2_pp > safe_oxygen_max && !(NOBREATH in specflags)) - var/ratio = (breath.oxygen/safe_oxygen_max) * 10 + var/ratio = (breath_gases["o2"][MOLES]/safe_oxygen_max) * 10 H.adjustOxyLoss(Clamp(ratio,oxy_breath_dam_min,oxy_breath_dam_max)) H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy) else @@ -1205,17 +1209,17 @@ //Too little oxygen! if(safe_oxygen_min) if(O2_pp < safe_oxygen_min) - gas_breathed = handle_too_little_breath(H,O2_pp,safe_oxygen_min,breath.oxygen) + gas_breathed = handle_too_little_breath(H,O2_pp,safe_oxygen_min,breath_gases["o2"][MOLES]) H.throw_alert("oxy", /obj/screen/alert/oxy) else H.failed_last_breath = 0 H.adjustOxyLoss(-5) - gas_breathed = breath.oxygen/6 + gas_breathed = breath_gases["o2"][MOLES]/6 H.clear_alert("oxy") //Exhale - breath.oxygen -= gas_breathed - breath.carbon_dioxide += gas_breathed + breath_gases["o2"][MOLES] -= gas_breathed + breath_gases["co2"][MOLES] += gas_breathed gas_breathed = 0 @@ -1242,17 +1246,17 @@ //Too little CO2! if(safe_co2_min) if(CO2_pp < safe_co2_min) - gas_breathed = handle_too_little_breath(H,CO2_pp, safe_co2_min,breath.carbon_dioxide) + gas_breathed = handle_too_little_breath(H,CO2_pp, safe_co2_min,breath_gases["co2"][MOLES]) H.throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) else H.failed_last_breath = 0 H.adjustOxyLoss(-5) - gas_breathed = breath.carbon_dioxide/6 + gas_breathed = breath_gases["co2"][MOLES]/6 H.clear_alert("not_enough_co2") //Exhale - breath.carbon_dioxide -= gas_breathed - breath.oxygen += gas_breathed + breath_gases["co2"][MOLES] -= gas_breathed + breath_gases["o2"][MOLES] += gas_breathed gas_breathed = 0 @@ -1261,7 +1265,7 @@ //Too much toxins! if(safe_toxins_max) if(Toxins_pp > safe_toxins_max && !(NOBREATH in specflags)) - var/ratio = (breath.toxins/safe_toxins_max) * 10 + var/ratio = (breath_gases["plasma"][MOLES]/safe_toxins_max) * 10 if(H.reagents) H.reagents.add_reagent("plasma", Clamp(ratio, tox_breath_dam_min, tox_breath_dam_max)) H.throw_alert("tox_in_air", /obj/screen/alert/tox_in_air) @@ -1272,34 +1276,33 @@ //Too little toxins! if(safe_toxins_min) if(Toxins_pp < safe_toxins_min && !(NOBREATH in specflags)) - gas_breathed = handle_too_little_breath(H,Toxins_pp, safe_toxins_min, breath.toxins) + gas_breathed = handle_too_little_breath(H,Toxins_pp, safe_toxins_min, breath_gases["plasma"][MOLES]) H.throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) else H.failed_last_breath = 0 H.adjustOxyLoss(-5) - gas_breathed = breath.toxins/6 + gas_breathed = breath_gases["plasma"][MOLES]/6 H.clear_alert("not_enough_tox") //Exhale - breath.toxins -= gas_breathed - breath.carbon_dioxide += gas_breathed + breath_gases["plasma"][MOLES] -= gas_breathed + breath_gases["co2"][MOLES] += gas_breathed gas_breathed = 0 //-- TRACES --// - if(breath.trace_gases.len && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here. - for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) - var/SA_pp = breath.get_breath_partial_pressure(SA.moles) - if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit - H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! - if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - H.sleeping = max(H.sleeping+2, 10) - else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning - if(prob(20)) - H.emote(pick("giggle", "laugh")) - - handle_breath_temperature(breath, H) + if(breath && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here. + var/SA_pp = breath.get_breath_partial_pressure(breath_gases["n2o"][MOLES]) + if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit + H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! + if(SA_pp > SA_sleep_min) // Enough to make us sleep as well + H.sleeping = max(H.sleeping+2, 10) + else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning + if(prob(20)) + H.emote(pick("giggle", "laugh")) + handle_breath_temperature(breath, H) + breath.garbage_collect() return 1 diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index 177a21f0589..4b819853b4e 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -466,7 +466,7 @@ datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) if(target_spec.team == team) H << rendered for(var/mob/M in dead_mob_list) - M << "(F)[rendered]" + M << "(F) [rendered]" return "" @@ -510,7 +510,7 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_ if(environment) var/total_moles = environment.total_moles() if(total_moles) - if((environment.oxygen /total_moles) >= 0.01) + if(environment.gases["o2"] && (environment.gases["o2"][MOLES] /total_moles) >= 0.01) H.adjust_fire_stacks(0.5) if(!H.on_fire && H.fire_stacks > 0) H.visible_message("[H]'s body reacts with the atmosphere and bursts into flames!","Your body reacts with the atmosphere and bursts into flame!") diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 1dcf71767f0..dfa0a8427d7 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -105,9 +105,12 @@ var/oxygen_used = 0 var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME - var/O2_partialpressure = (breath.oxygen/breath.total_moles())*breath_pressure - var/Toxins_partialpressure = (breath.toxins/breath.total_moles())*breath_pressure - var/CO2_partialpressure = (breath.carbon_dioxide/breath.total_moles())*breath_pressure + var/list/breath_gases = breath.gases + breath.assert_gases("o2","plasma","co2","n2o") + + var/O2_partialpressure = (breath_gases["o2"][MOLES]/breath.total_moles())*breath_pressure + var/Toxins_partialpressure = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure + var/CO2_partialpressure = (breath_gases["co2"][MOLES]/breath.total_moles())*breath_pressure //OXYGEN @@ -118,7 +121,7 @@ var/ratio = safe_oxy_min/O2_partialpressure adjustOxyLoss(min(5*ratio, 3)) failed_last_breath = 1 - oxygen_used = breath.oxygen*ratio/6 + oxygen_used = breath_gases["o2"][MOLES]*ratio/6 else adjustOxyLoss(3) failed_last_breath = 1 @@ -127,11 +130,11 @@ else //Enough oxygen failed_last_breath = 0 adjustOxyLoss(-5) - oxygen_used = breath.oxygen/6 + oxygen_used = breath_gases["o2"][MOLES]/6 clear_alert("oxy") - breath.oxygen -= oxygen_used - breath.carbon_dioxide += oxygen_used + breath_gases["o2"][MOLES] -= oxygen_used + breath_gases["co2"][MOLES] += oxygen_used //CARBON DIOXIDE if(CO2_partialpressure > safe_co2_max) @@ -150,24 +153,24 @@ //TOXINS/PLASMA if(Toxins_partialpressure > safe_tox_max) - var/ratio = (breath.toxins/safe_tox_max) * 10 + var/ratio = (breath_gases["plasma"][MOLES]/safe_tox_max) * 10 if(reagents) reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) throw_alert("tox_in_air", /obj/screen/alert/tox_in_air) else clear_alert("tox_in_air") - //TRACE GASES - if(breath.trace_gases.len) - for(var/datum/gas/sleeping_agent/SA in breath.trace_gases) - var/SA_partialpressure = (SA.moles/breath.total_moles())*breath_pressure - if(SA_partialpressure > SA_para_min) - Paralyse(3) - if(SA_partialpressure > SA_sleep_min) - sleeping = max(sleeping+2, 10) - else if(SA_partialpressure > 0.01) - if(prob(20)) - emote(pick("giggle","laugh")) + //NITROUS OXIDE + if(breath_gases["n2o"]) + var/SA_partialpressure = (breath_gases["n2o"][MOLES]/breath.total_moles())*breath_pressure + if(SA_partialpressure > SA_para_min) + Paralyse(3) + if(SA_partialpressure > SA_sleep_min) + sleeping = max(sleeping+2, 10) + else if(SA_partialpressure > 0.01) + if(prob(20)) + emote(pick("giggle","laugh")) + breath.garbage_collect() //BREATH TEMPERATURE handle_breath_temperature(breath) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 1a5020ecdec..b1e60e3e517 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -82,6 +82,8 @@ switch(M.a_intent) if("help") help_shake_act(M) + if("grab") + grabbedby(M) if("harm") M.do_attack_animation(src) if (prob(75)) @@ -103,6 +105,20 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to punch [name]!", \ "[M] has attempted to punch [name]!") + if("disarm") + if (!( paralysis )) + M.do_attack_animation(src) + if (prob(25)) + Paralyse(2) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + add_logs(M, src, "pushed") + visible_message("[M] has pushed down [src]!", \ + "[M] has pushed down [src]!") + else + if(drop_item()) + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + visible_message("[M] has disarmed [src]!", \ + "[M] has disarmed [src]!") /mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M) if(..()) //if harm or disarm intent. diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 281711ed41f..17422b0f5dc 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -23,6 +23,8 @@ Sorry Giacom. Please don't be mad :( if(unique_name) name = "[name] ([rand(1, 1000)])" real_name = name + + faction |= "\ref[src]" /mob/living/Destroy() @@ -160,10 +162,10 @@ Sorry Giacom. Please don't be mad :( set name = "Pull" set category = "Object" - if(pulling == AM) + if(istype(AM) && AM.Adjacent(src)) + start_pulling(AM) + else stop_pulling() - else if(AM.Adjacent(src)) - src.start_pulling(AM) //same as above /mob/living/pointed(atom/A as mob|obj|turf in view()) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 1af50b500f1..a41f907d439 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -142,7 +142,7 @@ ExtinguishMob() return var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment - if(G.oxygen < 1) + if(!G.gases["o2"] || G.gases["o2"][MOLES] < 1) ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire return var/turf/location = get_turf(src) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 27bd2ccb751..4d70e5f0a6a 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -50,6 +50,8 @@ var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message" + var/bubble_icon = "default" //what icon the mob uses for speechbubbles + var/last_bumped = 0 var/unique_name = 0 //if a mob's name should be appended with an id when created e.g. Mob (666) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 471cec390b6..c273cf9371f 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -142,7 +142,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) show_message(message, 2, deaf_message, deaf_type) return message -/mob/living/send_speech(message, message_range = 7, obj/source = src, bubble_type, list/spans) +/mob/living/send_speech(message, message_range = 7, obj/source = src, bubble_type = bubble_icon, list/spans) var/list/listening = get_hearers_in_view(message_range, source) for(var/mob/M in player_list) if(M.stat == DEAD && M.client && ((M.client.prefs.chat_toggles & CHAT_GHOSTEARS) || (get_dist(M, src) <= 7)) && client) // client is so that ghosts don't have to listen to mice @@ -158,7 +158,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) if(M.client) speech_bubble_recipients.Add(M.client) spawn(0) - flick_overlay(image('icons/mob/talk.dmi', src, "h[bubble_type][say_test(message)]",MOB_LAYER+1), speech_bubble_recipients, 30) + flick_overlay(image('icons/mob/talk.dmi', src, "[bubble_type][say_test(message)]",MOB_LAYER+1), speech_bubble_recipients, 30) /mob/proc/binarycheck() return 0 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 9a4875bfe9a..3be94e46b2f 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -764,7 +764,7 @@ var/list/ai_list = list() var/list/obj/machinery/camera/visible = list() for (var/datum/camerachunk/CC in eyeobj.visibleCameraChunks) for (var/obj/machinery/camera/C in CC.cameras) - if (!C.can_use() || C.light_disabled || get_dist(C, eyeobj) > 7) + if (!C.can_use() || get_dist(C, eyeobj) > 7) continue visible |= C @@ -772,10 +772,10 @@ var/list/ai_list = list() remove = lit_cameras - visible for (var/obj/machinery/camera/C in remove) - C.SetLuminosity(0) - lit_cameras -= C + lit_cameras -= C //Removed from list before turning off the light so that it doesn't check the AI looking away. + C.Togglelight(0) for (var/obj/machinery/camera/C in add) - C.SetLuminosity(AI_CAMERA_LUMINOSITY) + C.Togglelight(1) lit_cameras |= C /mob/living/silicon/ai/proc/control_integrated_radio() diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index f3199167178..c1939b30910 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -32,6 +32,8 @@ SSshuttle.emergency.mode = SHUTTLE_DOCKED SSshuttle.emergency.timer = world.time priority_announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg', "Priority") + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) + point.the_disk = null //Point back to the disk. if(doomsday_device) doomsday_device.timing = 0 diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 73ab599959b..14849006ea5 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -71,14 +71,14 @@ if(home.powered(EQUIP)) home.use_power(1000, EQUIP) - if (src:aiRestorePowerRoutine==2) + if (aiRestorePowerRoutine==2) src << "Alert cancelled. Power has been restored without our assistance." - src:aiRestorePowerRoutine = 0 + aiRestorePowerRoutine = 0 src.blind.layer = 0 return - else if (src:aiRestorePowerRoutine==3) + else if (aiRestorePowerRoutine==3) src << "Alert cancelled. Power has been restored." - src:aiRestorePowerRoutine = 0 + aiRestorePowerRoutine = 0 src.blind.layer = 0 return else @@ -94,8 +94,8 @@ src.see_invisible = SEE_INVISIBLE_LIVING if (lacks_power()) - if (src:aiRestorePowerRoutine==0) - src:aiRestorePowerRoutine = 1 + if (aiRestorePowerRoutine==0) + aiRestorePowerRoutine = 1 src << "You've lost power!" // world << "DEBUG CODE TIME! [loc] is the area the AI is sucking power from" @@ -110,7 +110,7 @@ if (loc.master.power_equip) if (!istype(T, /turf/space)) src << "Alert cancelled. Power has been restored without our assistance." - src.aiRestorePowerRoutine = 0 + aiRestorePowerRoutine = 0 src.blind.layer = 0 return src << "Fault confirmed: missing external power. Shutting down main control system to save power." @@ -119,7 +119,7 @@ sleep(50) if (istype(T, /turf/space)) src << "Unable to verify! No power connection detected!" - src:aiRestorePowerRoutine = 2 + aiRestorePowerRoutine = 2 return src << "Connection verified. Searching for APC in power network." sleep(50) @@ -143,12 +143,12 @@ switch(PRP) if (1) src << "Unable to locate APC!" else src << "Lost connection with the APC!" - src:aiRestorePowerRoutine = 2 + aiRestorePowerRoutine = 2 return if (loc.master.power_equip) if (!istype(T, /turf/space)) src << "Alert cancelled. Power has been restored without our assistance." - src:aiRestorePowerRoutine = 0 + aiRestorePowerRoutine = 0 src.blind.layer = 0 //This, too, is a fix to issue 603 return switch(PRP) @@ -164,7 +164,7 @@ apc_override = 1 theAPC.ui_interact(src, state = conscious_state) apc_override = 0 - src:aiRestorePowerRoutine = 3 + aiRestorePowerRoutine = 3 src << "Here are your current laws:" src.show_laws() sleep(50) @@ -184,4 +184,4 @@ if(!fire_res_on_core) health -= getFireLoss() diag_hud_set_status() - diag_hud_set_health() \ No newline at end of file + diag_hud_set_health() diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index 014dd45b84c..b43ef3552f4 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -49,7 +49,7 @@ var/obj/machinery/hologram/holopad/T = current if(istype(T) && T.masters[src])//If there is a hologram and its master is the user. - send_speech(message, 7, T, "R", get_spans()) + send_speech(message, 7, T, "robot", get_spans()) src << "Holopad transmitted, [real_name] \"[message]\""//The AI can "hear" its own message. else src << "No holopad connected." diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index c1ea89972d6..3c11b2851a8 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -190,6 +190,10 @@ CRASH("pAI without card") loc = card +/mob/living/silicon/pai/canUseTopic(atom/movable/M) + return 1 + + //Addition by Mord_Sith to define AI's network change ability /* /mob/living/silicon/pai/proc/pai_network_change() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index 3616833212b..80009d6fee4 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -260,8 +260,7 @@ if(href_list["cable"]) var/turf/T = get_turf(src.loc) src.cable = new /obj/item/weapon/pai_cable(T) - for (var/mob/M in viewers(T)) - M.show_message("A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", 3, "You hear the soft click of something light and hard falling to the ground.", 2) + T.visible_message("A port on [src] opens to reveal [src.cable], which promptly falls to the floor.", "You hear the soft click of something light and hard falling to the ground.") //src.updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window src.paiInterface() // So we'll just call the update directly rather than doing some default checks return @@ -527,6 +526,7 @@ dat += "Unable to obtain a reading.
" else var/datum/gas_mixture/environment = T.return_air() + var/list/env_gases = environment.gases var/pressure = environment.return_pressure() var/total_moles = environment.total_moles() @@ -534,17 +534,10 @@ dat += "Air Pressure: [round(pressure,0.1)] kPa
" if (total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - dat += "Nitrogen: [round(n2_level*100)]%
" - dat += "Oxygen: [round(o2_level*100)]%
" - dat += "Carbon Dioxide: [round(co2_level*100)]%
" - dat += "Plasma: [round(plasma_level*100)]%
" - if(unknown_level > 0.01) - dat += "OTHER: [round(unknown_level)]%
" + for(var/id in env_gases) + var/gas_level = env_gases[id][MOLES]/total_moles + if(id in hardcoded_gases || gas_level > 0.01) + dat += "[env_gases[id][GAS_NAME]]: [round(gas_level*100)]%
" dat += "Temperature: [round(environment.temperature-T0C)]°C
" dat += "Refresh Reading
" dat += "
" diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 353b6766f16..7ac7de0eb23 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -1,10 +1,11 @@ /mob/living/silicon/robot name = "Cyborg" real_name = "Cyborg" - icon = 'icons/mob/robots.dmi'// + icon = 'icons/mob/robots.dmi' icon_state = "robot" maxHealth = 100 health = 100 + bubble_icon = "robot" var/sight_mode = 0 var/custom_name = "" designation = "Default" //used for displaying the prefix & getting the current module of cyborg @@ -1110,6 +1111,7 @@ scrambledcodes = 1 modtype = "Synd" faction = list("syndicate") + bubble_icon = "syndibot" designation = "Syndicate Assault" req_access = list(access_syndicate) var/playstyle_string = "You are a Syndicate assault cyborg!
\ diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 00cdfcc10e4..2d8e31e3c97 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -1,5 +1,3 @@ -/mob/living/silicon/say(message) - return ..(message, "R") /mob/living/silicon/get_spans() return ..() | SPAN_ROBOT diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 8d7a53e441d..5c9e80a66c0 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -7,6 +7,7 @@ verb_ask = "queries" verb_exclaim = "declares" verb_yell = "alarms" + bubble_icon = "machine" var/syndicate = 0 var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS var/list/alarms_to_show = list() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index f5ffb053051..a1573a2e7fa 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -15,6 +15,9 @@ sentience_type = SENTIENCE_ARTIFICIAL status_flags = NONE //no default canpush + speak_emote = list("states") + bubble_icon = "machine" + var/obj/machinery/bot_core/bot_core = null var/bot_core_type = /obj/machinery/bot_core var/list/users = list() //for dialog updates @@ -289,9 +292,6 @@ say(message) return -/mob/living/simple_animal/bot/say(message) - return ..(message, "R") - /mob/living/simple_animal/bot/get_spans() return ..() | SPAN_ROBOT @@ -328,7 +328,7 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r */ /mob/living/simple_animal/bot/proc/scan(scan_type, old_target, scan_range = DEFAULT_SCAN_RANGE) var/final_result - for (var/scan in view (scan_range, src) ) //Search for something in range! + for (var/scan in shuffle(view(scan_range, src))) //Search for something in range! if(!istype(scan, scan_type)) //Check that the thing we found is the type we want! continue //If not, keep searching! if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness @@ -408,7 +408,7 @@ Pass a positive integer as an argument to override a bot's default speed. var/datum/job/captain/All = new/datum/job/captain all_access.access = All.get_access() - path = get_path_to(src, waypoint, src, /turf/proc/Distance_cardinal, 0, 200, id=all_access) + path = get_path_to(src, waypoint, /turf/proc/Distance_cardinal, 0, 200, id=all_access) calling_ai = caller //Link the AI to the bot! ai_waypoint = waypoint @@ -631,12 +631,12 @@ Pass a positive integer as an argument to override a bot's default speed. // given an optional turf to avoid /mob/living/simple_animal/bot/proc/calc_path(turf/avoid) check_bot_access() - path = get_path_to(loc, patrol_target, src, /turf/proc/Distance_cardinal, 0, 120, id=access_card, exclude=avoid) + path = get_path_to(src, patrol_target, /turf/proc/Distance_cardinal, 0, 120, id=access_card, exclude=avoid) /mob/living/simple_animal/bot/proc/calc_summon_path(turf/avoid) check_bot_access() spawn() - path = get_path_to(loc, summon_target, src, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid) + path = get_path_to(src, summon_target, /turf/proc/Distance_cardinal, 0, 150, id=access_card, exclude=avoid) if(!path.len || tries >= 5) //Cannot reach target. Give up and announce the issue. speak("Summon command failed, destination unreachable.",radio_channel) bot_reset() @@ -782,3 +782,7 @@ Pass a positive integer as an argument to override a bot's default speed. /mob/living/simple_animal/bot/Logout() . = ..() bot_reset() + +/mob/living/simple_animal/bot/revive() + ..() + update_icon() diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 97a5c7174a3..f2ad2462ab5 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -118,7 +118,7 @@ if(target) if(!path || path.len == 0) //No path, need a new one //Try to produce a path to the target, and ignore airlocks to which it has access. - path = get_path_to(loc, target.loc, src, /turf/proc/Distance_cardinal, 0, 30, id=access_card) + path = get_path_to(src, target.loc, /turf/proc/Distance_cardinal, 0, 30, id=access_card) if (!bot_move(target)) add_to_ignore(target) target = null diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index a8c3c93aaa5..0b64ad5ad13 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -217,9 +217,9 @@ if(path.len == 0) if(!istype(target, /turf/)) var/turf/TL = get_turf(target) - path = get_path_to(loc, TL, src, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = 0) + path = get_path_to(src, TL, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = 0) else - path = get_path_to(loc, target, src, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = 0) + path = get_path_to(src, target, /turf/proc/Distance_cardinal, 0, 30, id=access_card,simulated_only = 0) if(!bot_move(target)) add_to_ignore(target) diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index bf77108174d..7bd16d4f6a4 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -302,10 +302,10 @@ return if(patient && path.len == 0 && (get_dist(src,patient) > 1)) - path = get_path_to(loc, get_turf(patient), src, /turf/proc/Distance_cardinal, 0, 30,id=access_card) + path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,id=access_card) mode = BOT_MOVING if(!path.len) //try to get closer if you can't reach the patient directly - path = get_path_to(loc, get_turf(patient), src, /turf/proc/Distance_cardinal, 0, 30,1,id=access_card) + path = get_path_to(src, get_turf(patient), /turf/proc/Distance_cardinal, 0, 30,1,id=access_card) if(!path.len) //Do not chase a patient we cannot reach. soft_reset() diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index fc0d4bab71c..8bda6918e34 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -43,7 +43,6 @@ var/global/mulebot_count = 0 var/reached_target = 1 //true if already reached the target - var/refresh = 1 // true to refresh dialogue var/auto_return = 1 // true if auto return to home beacon after unload var/auto_pickup = 1 // true if auto-pickup at beacon var/report_delivery = 1 // true if bot will announce an arrival to a location. @@ -214,8 +213,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset() dat += "Toggle Auto Return Home ([auto_return ? "On":"Off"])
" dat += "Toggle Auto Pickup Crate ([auto_pickup ? "On":"Off"])
" dat += "Toggle Delivery Reporting ([report_delivery ? "On" : "Off"])
" - dat += "Toggle Interface Refreshing ([refresh ? "On" : "Off"])
" - if(load) dat += "Unload Now
" dat += "
The maintenance hatch is closed.
" @@ -297,11 +294,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset() return switch(command) - - if("autorefresh") - refresh = !refresh - update_controls() - if("stop") if(mode >= BOT_DELIVER) bot_reset() @@ -318,26 +310,21 @@ mob/living/simple_animal/bot/mulebot/bot_reset() update_controls() if("destination") - refresh=0 var/new_dest = input(user, "Select M.U.L.E. Destination", "Mulebot [suffix ? "([suffix])" : ""]", destination) as null|anything in deliverybeacontags - refresh=1 if(new_dest) set_destination(new_dest) + update_controls() if("setid") - refresh=0 var/new_id = stripped_input(user, "Enter new bot ID", "Mulebot [suffix ? "([suffix])" : ""]", suffix, MAX_NAME_LEN) - refresh=1 if(new_id) suffix = new_id name = "\improper Mulebot ([suffix])" update_controls() if("sethome") - refresh=0 var/new_home = stripped_input(user, "Enter new home tag", "Mulebot [suffix ? "([suffix])" : ""]", home_destination) - refresh=1 if(new_home) home_destination = new_home update_controls() @@ -512,8 +499,6 @@ mob/living/simple_animal/bot/mulebot/bot_reset() sleep(2) process_bot() - if(refresh) update_controls() - /mob/living/simple_animal/bot/mulebot/proc/process_bot() if(!on) return @@ -619,7 +604,7 @@ mob/living/simple_animal/bot/mulebot/bot_reset() // calculates a path to the current destination // given an optional turf to avoid /mob/living/simple_animal/bot/mulebot/calc_path(turf/avoid = null) - path = get_path_to(loc, target, src, /turf/proc/Distance_cardinal, 0, 250, id=access_card, exclude=avoid) + path = get_path_to(src, target, /turf/proc/Distance_cardinal, 0, 250, id=access_card, exclude=avoid) // sets the current destination // signals all beacons matching the delivery code diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 5ea94615935..c7ed281b154 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -231,6 +231,18 @@ + + + +/////////////////////////////Non-cult Artificer///////////////////////// +/mob/living/simple_animal/hostile/construct/builder/noncult + construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, + /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, + /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult, + /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, + /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) + + /////////////////////////////Harvester///////////////////////// /mob/living/simple_animal/hostile/construct/harvester name = "Harvester" diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index 54a6b86c314..ebc51360660 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -35,6 +35,8 @@ status_flags = (CANPUSH | CANSTUN | CANWEAKEN) gender = NEUTER voice_name = "synthesized chirp" + speak_emote = list("chirps") + bubble_icon = "machine" languages = DRONE mob_size = MOB_SIZE_SMALL has_unlimited_silicon_privilege = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm index e17a9a0dcb0..597b528ea9f 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/extra_drone_types.dm @@ -17,6 +17,8 @@ health = 30 maxHealth = 120 //If you murder other drones and cannibalize them you can get much stronger faction = list("syndicate") + speak_emote = list("hisses") + bubble_icon = "syndibot" heavy_emp_damage = 10 laws = \ "1. Interfere.\n"+\ diff --git a/code/modules/mob/living/simple_animal/friendly/drone/say.dm b/code/modules/mob/living/simple_animal/friendly/drone/say.dm index b8152458ea6..5bd5dbb8eb7 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/say.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/say.dm @@ -5,11 +5,6 @@ //Drone speach //Drone hearing - -/mob/living/simple_animal/drone/say(message) - return ..(message, "R") - - /mob/living/simple_animal/drone/lang_treat(atom/movable/speaker, message_langs, raw_message) //This is so drones can understand humans without being able to speak human . = ..() var/hear_override_langs = HUMAN diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 147649d87ce..be62cfce185 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -1,15 +1,16 @@ /mob/living/simple_animal/hostile/guardian name = "Guardian Spirit" real_name = "Guardian Spirit" - desc = "A mysterious being that stands by it's charge, ever vigilant." + desc = "A mysterious being that stands by its charge, ever vigilant." speak_emote = list("hisses") + bubble_icon = "guardian" response_help = "passes through" response_disarm = "flails at" response_harm = "punches" icon = 'icons/mob/guardian.dmi' - icon_state = "guardianorange" - icon_living = "guardianorange" - icon_dead = "stand" + icon_state = "magicOrange" + icon_living = "magicOrange" + icon_dead = "magicOrange" speed = 0 a_intent = "harm" stop_automated_movement = 1 @@ -21,13 +22,13 @@ attacktext = "punches" maxHealth = INFINITY //The spirit itself is invincible health = INFINITY + damage_coeff = list(BRUTE = 0.5, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) //how much damage from each damage type we transfer to the owner environment_smash = 0 melee_damage_lower = 15 melee_damage_upper = 15 butcher_results = list(/obj/item/weapon/ectoplasm = 1) AIStatus = AI_OFF var/cooldown = 0 - var/damage_transfer = 1 //how much damage from each attack we transfer to the owner var/mob/living/summoner var/range = 10 //how far from the user the spirit can be var/playstyle_string = "You are a standard Guardian. You shouldn't exist!" @@ -53,11 +54,12 @@ ghostize() qdel(src) if(summoner) - if (get_dist(get_turf(summoner),get_turf(src)) <= range) + if(get_dist(get_turf(summoner),get_turf(src)) <= range) return else src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]" visible_message("The [src] jumps back to its user.") + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src)) loc = get_turf(summoner) /mob/living/simple_animal/hostile/guardian/Move() //Returns to summoner if they move out of range @@ -68,37 +70,44 @@ else src << "You moved out of range, and were pulled back! You can only move [range] meters from [summoner.real_name]" visible_message("The [src] jumps back to its user.") + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src)) loc = get_turf(summoner) /mob/living/simple_animal/hostile/guardian/canSuicide() return 0 +/mob/living/simple_animal/hostile/guardian/AttackingTarget() + if(src.loc == summoner) + src << "You must be manifested to attack!" + return 0 + else + ..() + return 1 + /mob/living/simple_animal/hostile/guardian/death() ..() summoner << "Your [name] died somehow!" summoner.death() /mob/living/simple_animal/hostile/guardian/adjustHealth(amount) //The spirit is invincible, but passes on damage to the summoner - var/damage = amount * damage_transfer - if (summoner) + if(summoner) if(loc == summoner) return - summoner.adjustBruteLoss(damage) - if(damage) + summoner.adjustBruteLoss(amount) + if(amount) summoner << "Your [name] is under attack! You take damage!" summoner.visible_message("Blood sprays from [summoner] as [src] takes damage!") if(summoner.stat == UNCONSCIOUS) summoner << "Your body can't take the strain of sustaining [src] in this condition, it begins to fall apart!" - summoner.adjustCloneLoss(damage/2) + summoner.adjustCloneLoss(amount*0.5) //dying hosts take 50% bonus damage as cloneloss /mob/living/simple_animal/hostile/guardian/ex_act(severity, target) - switch (severity) - if (1) + switch(severity) + if(1) gib() return - if (2) + if(2) adjustBruteLoss(60) - if(3) adjustBruteLoss(30) @@ -121,6 +130,7 @@ /mob/living/simple_animal/hostile/guardian/proc/Recall() if(cooldown > world.time) return + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(src)) loc = summoner buckled = null cooldown = world.time + 30 @@ -139,7 +149,7 @@ log_say("[src.real_name]/[src.key] : [input]") /mob/living/simple_animal/hostile/guardian/proc/ToggleMode() - src << "You dont have another mode!" + src << "You don't have another mode!" /mob/living/proc/guardian_comm() @@ -192,8 +202,10 @@ /mob/living/simple_animal/hostile/guardian/proc/ToggleLight() if(!luminosity) + src << "You activate your light." SetLuminosity(3) else + src << "You deactivate your light." SetLuminosity(0) @@ -201,14 +213,13 @@ //Fire. Low damage, low resistance, sets mobs on fire when bumping - /mob/living/simple_animal/hostile/guardian/fire a_intent = "help" melee_damage_lower = 10 melee_damage_upper = 10 attack_sound = 'sound/items/Welder.ogg' attacktext = "sears" - damage_transfer = 0.8 + damage_coeff = list(BRUTE = 0.8, BURN = 0.8, TOX = 0.8, CLONE = 0.8, STAMINA = 0, OXY = 0.8) range = 10 playstyle_string = "As a Chaos type, you have only light damage resistance, but will ignite any enemy you bump into. In addition, your melee attacks will randomly teleport enemies." environment_smash = 1 @@ -222,12 +233,14 @@ summoner.adjust_fire_stacks(-20) /mob/living/simple_animal/hostile/guardian/fire/AttackingTarget() - ..() - if(prob(45)) - if(istype(target, /atom/movable)) - var/atom/movable/M = target - if(!M.anchored && M != summoner) - do_teleport(M, M, 10) + if(..()) + if(prob(45)) + if(istype(target, /atom/movable)) + var/atom/movable/M = target + if(!M.anchored && M != summoner) + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(M)) + do_teleport(M, M, 10) + PoolOrNew(/obj/effect/overlay/temp/guardian/phase, get_turf(M)) /mob/living/simple_animal/hostile/guardian/fire/Crossed(AM as mob|obj) ..() @@ -251,12 +264,11 @@ /mob/living/simple_animal/hostile/guardian/fire/Bump(AM as mob|obj) ..() collision_ignite(AM) -//Standard +//Standard /mob/living/simple_animal/hostile/guardian/punch melee_damage_lower = 20 melee_damage_upper = 20 - damage_transfer = 0.5 playstyle_string = "As a standard type you have no special abilities, but have a high damage resistance and a powerful attack capable of smashing through walls." environment_smash = 2 magic_fluff_string = "..And draw the Assistant, faceless and generic, but never to be underestimated." @@ -284,11 +296,11 @@ playsound(loc, src.attack_sound, 50, 1, 1) //Healer - /mob/living/simple_animal/hostile/guardian/healer a_intent = "harm" friendly = "heals" speed = 0 + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) melee_damage_lower = 15 melee_damage_upper = 15 playstyle_string = "As a Support type, you may toggle your basic attacks to a healing mode. In addition, Alt-Clicking on an adjacent mob will warp them to your bluespace beacon after a short delay." @@ -304,24 +316,21 @@ medsensor.add_hud_to(src) /mob/living/simple_animal/hostile/guardian/healer/AttackingTarget() - ..() - if(toggle == TRUE) - if(src.loc == summoner) - src << "You must be manifested to heal!" - return - if(iscarbon(target)) - var/mob/living/carbon/C = target - C.adjustBruteLoss(-5) - C.adjustFireLoss(-5) - C.adjustOxyLoss(-5) - C.adjustToxLoss(-5) + if(..()) + if(toggle == TRUE) + if(iscarbon(target)) + var/mob/living/carbon/C = target + C.adjustBruteLoss(-5) + C.adjustFireLoss(-5) + C.adjustOxyLoss(-5) + C.adjustToxLoss(-5) /mob/living/simple_animal/hostile/guardian/healer/ToggleMode() if(src.loc == summoner) if(toggle) a_intent = "harm" speed = 0 - damage_transfer = 0.7 + damage_coeff = list(BRUTE = 0.7, BURN = 0.7, TOX = 0.7, CLONE = 0.7, STAMINA = 0, OXY = 0.7) melee_damage_lower = 15 melee_damage_upper = 15 src << "You switch to combat mode." @@ -329,7 +338,7 @@ else a_intent = "help" speed = 1 - damage_transfer = 1 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) melee_damage_lower = 0 melee_damage_upper = 0 src << "You switch to healing mode." @@ -339,7 +348,7 @@ /mob/living/simple_animal/hostile/guardian/healer/verb/Beacon() - set name = "Place Bluespsace Beacon" + set name = "Place Bluespace Beacon" set category = "Guardian" set desc = "Mark a floor as your beacon point, allowing you to warp targets to it. Your beacon will not work in unfavorable atmospheric conditions." if(beacon_cooldownYou must be adjacent to your target!" return if((A.anchored)) - src << "Your target can not be anchored!" + src << "Your target cannot be anchored!" return src << "You begin to warp [A]" if(do_mob(src, A, 50)) @@ -380,11 +389,21 @@ if(src.beacon) //Check that the beacon still exists and is in a safe place. No instant kills. if(beacon.air) var/datum/gas_mixture/Z = beacon.air - if(Z.oxygen >= 16 && !Z.toxins && Z.carbon_dioxide < 10 && !Z.trace_gases.len) + var/list/Z_gases = Z.gases + var/trace_gases = FALSE + + for(var/id in Z_gases) + if(id in hardcoded_gases) + continue + trace_gases = TRUE + break + if((Z_gases["o2"] && Z_gases["o2"][MOLES] >= 16) && !Z_gases["plasma"] && (!Z_gases["co2"] || Z_gases["co2"][MOLES] < 10) && !trace_gases) if((Z.temperature > 270) && (Z.temperature < 360)) var/pressure = Z.return_pressure() if((pressure > 20) && (pressure < 550)) + PoolOrNew(/obj/effect/overlay/temp/guardian/phase/out, get_turf(A)) do_teleport(A, beacon, 0) + PoolOrNew(/obj/effect/overlay/temp/guardian/phase, get_turf(A)) else src << "The beacon isn't in a safe location!" else @@ -396,7 +415,6 @@ ///////////////////Ranged - /obj/item/projectile/guardian name = "crystal spray" icon_state = "guardian" @@ -409,7 +427,7 @@ friendly = "quietly assesses" melee_damage_lower = 10 melee_damage_upper = 10 - damage_transfer = 0.9 + damage_coeff = list(BRUTE = 0.9, BURN = 0.9, TOX = 0.9, CLONE = 0.9, STAMINA = 0, OXY = 0.9) projectiletype = /obj/item/projectile/guardian ranged_cooldown_cap = 0 projectilesound = 'sound/effects/hit_on_shattered_glass.ogg' @@ -486,11 +504,10 @@ G.summoner << "[AM] has crossed your surveillance trap at [get_area(snare_loc)]." ////Bomb - /mob/living/simple_animal/hostile/guardian/bomb melee_damage_lower = 15 melee_damage_upper = 15 - damage_transfer = 0.6 + damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 0.6, CLONE = 0.6, STAMINA = 0, OXY = 0.6) range = 13 playstyle_string = "As an explosive type, you have only moderate close combat abilities, but are capable of converting any adjacent item into a disguised bomb via alt click." magic_fluff_string = "..And draw the Scientist, master of explosive death." @@ -622,7 +639,7 @@ G.summoner = user G.key = key G << "You are a [mob_name] bound to serve [user.real_name]." - G << "You are capable of manifesting or recalling to your master with verbs in the Guardian tab. You will also find a verb to communicate with them privately there." + G << "You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with them privately there." G << "While personally invincible, you will die if [user.real_name] does, and any damage dealt to you will have a portion passed on to them as you feed upon them to sustain yourself." G << "[G.playstyle_string]" G.faction = user.faction @@ -630,19 +647,25 @@ user.verbs += /mob/living/proc/guardian_recall user.verbs += /mob/living/proc/guardian_reset - var/picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces") - var/colour = pick("orange", "pink", "red", "blue", "green") - G.name = "[picked_name] [capitalize(colour)]" - G.real_name = "[picked_name] [capitalize(colour)]" - G.icon_living = "guardian[colour]" - G.icon_state = "guardian[colour]" - G.icon_dead = "guardian[colour]" - - switch (theme) + var/colour + var/picked_name + switch(theme) if("magic") user << "[G.magic_fluff_string]." + colour = pick("Pink", "Red", "Orange", "Green", "Blue") + picked_name = pick("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces") if("tech") user << "[G.tech_fluff_string]." + G.bubble_icon = "holo" + colour = pick("Rose", "Peony", "Lily", "Daisy", "Zinnia", "Ivy", "Iris", "Petunia", "Violet", "Lilac", "Orchid") //technically not colors, just flowers that can be specific colors + picked_name = pick("Gallium", "Indium", "Thallium", "Bismuth", "Aluminium", "Mercury", "Iron", "Silver", "Zinc", "Titanium", "Chromium", "Nickel", "Platinum", "Tellurium", "Palladium", "Rhodium", "Cobalt", "Osmium", "Tungsten", "Iridium") + + G.name = "[picked_name] [colour]" + G.real_name = "[picked_name] [colour]" + G.icon_living = "[theme][colour]" + G.icon_state = "[theme][colour]" + G.icon_dead = "[theme][colour]" + G.mind.name = "[G.real_name]" /obj/item/weapon/guardiancreator/choose @@ -650,7 +673,7 @@ /obj/item/weapon/guardiancreator/tech name = "holoparasite injector" - desc = "It contains alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel." + desc = "It contains an alien nanoswarm of unknown origin. Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, it requires an organic host as a home base and source of fuel." icon = 'icons/obj/syringe.dmi' icon_state = "combat_hypo" theme = "tech" @@ -665,19 +688,19 @@ /obj/item/weapon/paper/guardian name = "Holoparasite Guide" - icon_state = "alienpaper_words" + icon_state = "paper_words" info = {"A list of Holoparasite Types

- Chaos: Ignites mobs on touch. teleports them at random on attack. Automatically extinguishes the user if they catch fire.
+ Chaos: Ignites enemies on touch and teleports them at random on attack. Automatically extinguishes the user if they catch on fire.

- Standard:Devestating close combat attacks and high damage resist. No special powers.
+ Standard:Devastating close combat attacks and high damage resist. Can smash through weak walls.

- Ranged: Has two modes. Ranged: Extremely weak, highly spammable projectile attack. Scout: Can not attack, but can move through walls. Can lay surveillance snares in either mode.
+ Ranged: Has two modes. Ranged; which fires a constant stream of weak, armor-ignoring projectiles. Scout; Cannot attack, but can move through walls and is quite hard to see. Can lay surveillance snares, which alert it when crossed, in either mode.

- Support:Has two modes. Combat: Medium power attacks and damage resist. Healer: Attacks heal damage, but low damage resist and slow movemen. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.
+ Support:Has two modes. Combat; Medium power attacks and damage resist. Healer; Heals instead of attack, but has low damage resist and slow movement. Can deploy a bluespace beacon and warp targets to it (including you) in either mode.

- Explosive: High damage resist and medium power attack. Can turn any object into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered.
+ Explosive: High damage resist and medium power attack. Can turn any object, including objects too large to pick up, into a bomb, dealing explosive damage to the next person to touch it. The object will return to normal after the trap is triggered or after a delay.
"} /obj/item/weapon/paper/guardian/update_icon() diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index c7f49bf27a2..8bd71dd3313 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -19,6 +19,7 @@ melee_damage_upper = 25 attacktext = "slashes" speak_emote = list("hisses") + bubble_icon = "alien" a_intent = "harm" attack_sound = 'sound/weapons/bladeslice.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) @@ -125,6 +126,7 @@ icon_state = "alienq" icon_living = "alienq" icon_dead = "alienq_dead" + bubble_icon = "alienroyal" move_to_delay = 4 maxHealth = 400 health = 400 diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index ed4ec3fdfde..8058ef8717c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -139,7 +139,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca return 1 return 0 -/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/creator, destroy_original = 0) +/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(obj/O, mob/living/user, destroy_original = 0) if(destroy_original || CheckObject(O)) O.loc = src name = O.name @@ -164,8 +164,8 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca melee_damage_upper = 2 + I.force move_to_delay = 2 * I.w_class + 1 maxHealth = health - if(creator) - creator = creator + if(user) + creator = user faction += "\ref[creator]" // very unique if(destroy_original) qdel(O) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 0eb03cb8083..994bc45d9d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -127,6 +127,7 @@ mob_size = MOB_SIZE_TINY flying = 1 speak_emote = list("states") + bubble_icon = "syndibot" gold_core_spawnable = 1 del_on_death = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 885a188ac4c..26817a3f3c9 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -41,12 +41,12 @@ ..() if(istype(src.loc, /turf/simulated)) var/turf/simulated/T = src.loc - if(T.air) - var/co2 = T.air.carbon_dioxide + if(T.air && T.air.gases["co2"]) + var/co2 = T.air.gases["co2"][MOLES] if(co2 > 0) if(prob(25)) var/amt = min(co2, 9) - T.air.carbon_dioxide -= amt + T.air.gases["co2"][MOLES] -= amt T.atmos_spawn_air(SPAWN_OXYGEN, amt) /mob/living/simple_animal/hostile/tree/AttackingTarget() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index eb62324b13f..1891322dc3b 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -623,7 +623,7 @@ if((C.l_hand && C.l_hand.w_class <= 2) || (C.r_hand && C.r_hand.w_class <= 2)) item = C if(item) - if(!AStar(loc, get_turf(item), src, /turf/proc/Distance_cardinal)) + if(!AStar(src, get_turf(item), /turf/proc/Distance_cardinal)) item = null continue return item diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 416a8079c15..805156d5c13 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -196,10 +196,15 @@ if(istype(T,/turf/simulated)) var/turf/simulated/ST = T if(ST.air) - var/tox = ST.air.toxins - var/oxy = ST.air.oxygen - var/n2 = ST.air.nitrogen - var/co2 = ST.air.carbon_dioxide + var/ST_gases = ST.air.gases + ST.air.assert_gases(arglist(hardcoded_gases)) + + var/tox = ST_gases["plasma"][MOLES] + var/oxy = ST_gases["o2"][MOLES] + var/n2 = ST_gases["n2"][MOLES] + var/co2 = ST_gases["co2"][MOLES] + + ST.air.garbage_collect() if(atmos_requirements["min_oxy"] && oxy < atmos_requirements["min_oxy"]) atmos_suitable = 0 diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 598a031ba2d..3c3cda43cff 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -17,6 +17,7 @@ response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") speak_emote = list("chirps") + bubble_icon = "slime" layer = 5 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index abe7cb7222b..ba0486b7520 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -33,118 +33,101 @@ var/next_mob_id = 0 var/datum/gas_mixture/environment = loc.return_air() - var/t = "Coordinates: [x],[y] \n" - t+= "Temperature: [environment.temperature] \n" - t+= "Nitrogen: [environment.nitrogen] \n" - t+= "Oxygen: [environment.oxygen] \n" - t+= "Plasma : [environment.toxins] \n" - t+= "Carbon Dioxide: [environment.carbon_dioxide] \n" - for(var/datum/gas/trace_gas in environment.trace_gases) - t+= "[trace_gas.type]: [trace_gas.moles] \n" + var/t = "Coordinates: [x],[y] \n" + t += "Temperature: [environment.temperature] \n" + for(var/id in environment.gases) + var/gas = environment.gases[id] + if(gas[MOLES]) + t+="[gas[GAS_NAME]]: [gas[MOLES]] \n" - usr.show_message(t, 1) + usr << t -/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) +/mob/proc/show_message(msg, type, alt_msg, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) if(!client) return msg = copytext(msg, 1, MAX_MESSAGE_LEN) - if (type) - if(type & 1 && (disabilities & BLIND || paralysis) )//Vision related - if (!( alt )) + if(type) + if(type & 1 && eye_blind )//Vision related + if(!alt_msg) return else - msg = alt + msg = alt_msg type = alt_type - if (type & 2 && ear_deaf)//Hearing related - if (!( alt )) + + if(type & 2 && ear_deaf)//Hearing related + if(!alt_msg) return else - msg = alt + msg = alt_msg type = alt_type - if ((type & 1 && disabilities & BLIND)) + if(type & 1 && eye_blind) return - // Added voice muffling for Issue 41. - if(stat == UNCONSCIOUS || sleeping > 0) - src << "... You can almost hear someone talking ..." + // voice muffling + if(stat == UNCONSCIOUS) + if(type & 2) //audio + src << "... You can almost hear something ..." else src << msg - return -// Show a message to all mobs who sees the src mob and the src mob itself +// Show a message the src mob and to all player mobs who sees the src mob // This would be for visible actions by the src mob // message is the message output to anyone who can see e.g. "[src] does something!" // self_message (optional) is what the src mob sees e.g. "You do something!" // blind_message (optional) is what blind people will hear e.g. "You hear something!" /mob/visible_message(message, self_message, blind_message) - var/list/mob_viewers = list() - var/list/possible_viewers = list() - mob_viewers |= src - mob_viewers |= viewers(src) - var/heard = get_hear(7, src) - for(var/atom/movable/A in heard) - possible_viewers |= recursive_hear_check(A) - for(var/mob/B in possible_viewers) - if(B in mob_viewers) + var/turf/T = get_turf(src) + if(!T) + return + for(var/mob/M in get_hearers_in_view(7, src)) + if(!M.client) continue - if(isturf(B.loc)) - continue - var/turf/T = get_turf(B) - if(src in view(T)) - mob_viewers |= B - - for(var/mob/M in mob_viewers) - if(M.see_invisible < invisibility) - continue //can't view the invisible var/msg = message - if(self_message && M==src) - msg = self_message - M.show_message(msg, 1) + if(M == src) //the src always see the main message or self message + if(self_message) + msg = self_message + else + if(M.see_invisibleSPACE NINJA!") diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 4334e1cb26a..ecfeff8a460 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -597,7 +597,9 @@ interact(user) /obj/machinery/power/apc/attack_alien(mob/living/carbon/alien/humanoid/user) - if(!user) return + if(!user) + return + user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) user.visible_message("[user.name] slashes at the [src.name]!", "You slash at the [src.name]!") playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) @@ -802,6 +804,7 @@ malfai.malfhack = null malfai.malfhacking = 0 locked = 1 + malfhack = 1 malfai.malf_picker.processing_time += 10 if(usr:parent) src.malfai = usr:parent @@ -849,8 +852,8 @@ qdel(malf) src.occupier.verbs += /mob/living/silicon/ai/proc/corereturn src.occupier.cancel_camera() - if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) - for(var/obj/item/weapon/pinpointer/point in world) + if ((seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) && malf.nuking) + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) point.the_disk = src //the pinpointer will detect the shunted AI @@ -864,9 +867,9 @@ src.occupier.parent.cancel_camera() qdel(src.occupier) if (seclevel2num(get_security_level()) == SEC_LEVEL_DELTA) - for(var/obj/item/weapon/pinpointer/point in world) - for(var/mob/living/silicon/ai/A in living_mob_list) - if(A.stat != DEAD) + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) + for(var/mob/living/silicon/ai/A in ai_list) + if((A.stat != DEAD) && A.nuking) point.the_disk = A //The pinpointer tracks the AI back into its core. else @@ -875,32 +878,10 @@ src.occupier.loc = src.loc src.occupier.death() src.occupier.gib() - for(var/obj/item/weapon/pinpointer/point in world) + for(var/obj/item/weapon/pinpointer/point in pinpointer_list) point.the_disk = null //the pinpointer will go back to pointing at the nuke disc. -/obj/machinery/power/apc/proc/ion_act() - //intended to be exactly the same as an AI malf attack - if(!src.malfhack && src.z == ZLEVEL_STATION) - if(prob(3)) - src.locked = 1 - if (src.cell.charge > 0) -// world << "\red blew APC in [src.loc.loc]" - src.cell.charge = 0 - cell.corrupt() - src.malfhack = 1 - update_icon() - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(1, src.loc) - smoke.attach(src) - smoke.start() - var/datum/effect_system/spark_spread/s = new - s.set_up(3, 1, src) - s.start() - visible_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", \ - "You hear sizzling electronics.") - - /obj/machinery/power/apc/surplus() if(terminal) return terminal.surplus() diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index aab80c9e97f..304e5a37a1f 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -26,12 +26,12 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/process() if(P) - if(P.air_contents.toxins <= 0) + if(!P.air_contents.gases["plasma"]) investigate_log("out of fuel.","singulo") - P.air_contents.toxins = 0 eject() else - P.air_contents.toxins -= 0.001*drainratio + P.air_contents.gases["plasma"][MOLES] -= 0.001*drainratio + P.air_contents.garbage_collect() return @@ -43,7 +43,7 @@ var/global/list/rad_collectors = list() toggle_power() user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \ "You turn the [src.name] [active? "on":"off"].") - investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.toxins/0.29)]%":"It is empty"].","singulo") + investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.gases["plasma"][MOLES]/0.29)]%":"It is empty"].","singulo") return else user << "The controls are locked!" @@ -129,8 +129,8 @@ var/global/list/rad_collectors = list() /obj/machinery/power/rad_collector/proc/receive_pulse(pulse_strength) if(P && active) - var/power_produced = 0 - power_produced = P.air_contents.toxins*pulse_strength*20 + var/power_produced = P.air_contents.gases["plasma"] ? P.air_contents.gases["plasma"][MOLES] : 0 + power_produced *= pulse_strength*20 add_avail(power_produced) last_power = power_produced return diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 5918c639f8c..82e147f97d3 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -71,14 +71,19 @@ /obj/machinery/power/smes/RefreshParts() var/IO = 0 - var/C = 0 + var/MC = 0 + var/list/C = list() for(var/obj/item/weapon/stock_parts/capacitor/CP in component_parts) IO += CP.rating input_level_max = 200000 * IO output_level_max = 200000 * IO for(var/obj/item/weapon/stock_parts/cell/PC in component_parts) - C += PC.maxcharge - capacity = C / (15000) * 1e6 + MC += PC.maxcharge + C.Add(MC / PC.charge) + capacity = MC / (15000) * 1e6 + if(charge) + var/summ = Mean(C) + charge = capacity * summ /obj/machinery/power/smes/attackby(obj/item/I, mob/user, params) //opening using screwdriver @@ -164,6 +169,10 @@ log_game("[src] has been deconstructed by [key_name(user)]") investigate_log("SMES deconstructed by [key_name(user)]","singulo") +/obj/machinery/power/smes/deconstruction() + for(var/obj/item/weapon/stock_parts/cell/cell in component_parts) + cell.charge = (charge / capacity) * cell.maxcharge + /obj/machinery/power/smes/Destroy() if(ticker && ticker.current_state == GAME_STATE_PLAYING) var/area/area = get_area(src) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 18a05a582a4..4cc508f6f37 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -138,7 +138,13 @@ damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 ) //Ok, 100% oxygen atmosphere = best reaction //Maxes out at 100% oxygen pressure - oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0) + var/removed_nitrogen = 0 + if(removed.gases["n2"]) + removed_nitrogen = (removed.gases["n2"][MOLES] * NITROGEN_RETARDATION_FACTOR) + + removed.assert_gases("o2", "plasma") + + oxygen = max(min((removed.gases["o2"][MOLES] - removed_nitrogen) / MOLES_CELLSTANDARD, 1), 0) var/temp_factor = 50 @@ -169,9 +175,9 @@ removed.temperature = max(0, min(removed.temperature, 2500)) //Calculate how much gas to release - removed.toxins += max(device_energy / PLASMA_RELEASE_MODIFIER, 0) + removed.gases["plasma"][MOLES] += max(device_energy / PLASMA_RELEASE_MODIFIER, 0) - removed.oxygen += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0) + removed.gases["o2"][MOLES] += max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0) env.merge(removed) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 9835371591d..8c32c860c1e 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -13,7 +13,8 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, /obj/structure/particle_accelerator/power_box, /obj/structure/particle_accelerator/end_cap, /obj/machinery/field/containment, - /obj/structure/disposalpipe) + /obj/structure/disposalpipe, + /obj/machinery/gateway) /obj/singularity/energy_ball name = "energy ball" diff --git a/code/modules/procedural mapping/mapGenerator.dm b/code/modules/procedural mapping/mapGenerator.dm index f421b1db0ee..ce6b5a18c89 100644 --- a/code/modules/procedural mapping/mapGenerator.dm +++ b/code/modules/procedural mapping/mapGenerator.dm @@ -38,7 +38,6 @@ if(replace) undefineRegion() - map |= block(Start,End) return map diff --git a/code/modules/procedural mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural mapping/mapGeneratorModules/helpers.dm index 2c76915504b..ff7ea4fc8f7 100644 --- a/code/modules/procedural mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural mapping/mapGeneratorModules/helpers.dm @@ -14,11 +14,7 @@ SSair.remove_from_active(T) for(var/turf/simulated/T in map) if(T.air) - T.air.oxygen = T.oxygen - T.air.nitrogen = T.nitrogen - T.air.carbon_dioxide = T.carbon_dioxide - T.air.toxins = T.toxins - T.air.temperature = T.temperature + T.air.copy_from_turf(T) SSair.add_to_active(T) //Only places atoms/turfs on area borders diff --git a/code/modules/procedural mapping/mapGenerators/lava_river.dm b/code/modules/procedural mapping/mapGenerators/lava_river.dm new file mode 100644 index 00000000000..124868557d9 --- /dev/null +++ b/code/modules/procedural mapping/mapGenerators/lava_river.dm @@ -0,0 +1,18 @@ +/datum/mapGenerator/lavaland + var/start_z = 5 + modules = list(/datum/mapGeneratorModule/river) + +/datum/mapGenerator/lavaland/defineRegion(turf/Start, turf/End, replace = 0) + start_z = Start.z + ..() + +/datum/mapGeneratorModule/river + var/river_type = /turf/simulated/floor/plating/lava/smooth + var/river_nodes = 4 + var/start_z = 5 + +/datum/mapGeneratorModule/river/generate() + if(istype(mother, /datum/mapGenerator/lavaland)) + var/datum/mapGenerator/lavaland/L = mother + start_z = L.start_z + spawn_rivers(start_z, river_nodes, river_type) diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm index a7d14066c38..0430ef12f13 100644 --- a/code/modules/projectiles/ammunition/boxes.dm +++ b/code/modules/projectiles/ammunition/boxes.dm @@ -1,5 +1,6 @@ /obj/item/ammo_box/a357 name = "speed loader (.357)" + desc = "Designed to quickly reload revolvers." icon_state = "357" ammo_type = /obj/item/ammo_casing/a357 max_ammo = 7 @@ -7,6 +8,7 @@ /obj/item/ammo_box/c38 name = "speed loader (.38)" + desc = "Designed to quickly reload revolvers." icon_state = "38" ammo_type = /obj/item/ammo_casing/c38 max_ammo = 6 diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index ea35c457cb9..a5ff5364b5e 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -154,6 +154,7 @@ /obj/item/ammo_box/magazine/m10mm name = "pistol magazine (10mm)" + desc = "A gun magazine." icon_state = "9x19p" origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c10mm @@ -272,6 +273,7 @@ obj/item/ammo_box/magazine/tommygunm45 /obj/item/ammo_box/magazine/m12g name = "shotgun magazine (12g slugs)" + desc = "A drum magazine." icon_state = "m12gb" ammo_type = /obj/item/ammo_casing/shotgun origin_tech = "combat=3;syndicate=1" diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index f1690cbbfc0..33694ceb8d6 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -148,6 +148,7 @@ icon_state = ".50" /obj/item/projectile/bullet/sniper/penetrator + icon_state = "gauss" name = "penetrator round" damage = 60 forcedodge = 1 @@ -172,7 +173,7 @@ icon_state = ".50" /obj/item/projectile/bullet/sniper/accelerator - icon_state = "red_laser" + icon_state = "gaussweak" name = "accelerator round" damage = 5 stun = 0 @@ -183,7 +184,7 @@ ..() damage += 5 if(damage > 40) - icon_state = "heavylaser" + icon_state = "gaussstrong" breakthings = TRUE else if(damage > 25) - icon_state = "laser" + icon_state = "gauss" diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 896efc52326..0d699ae5fe8 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -80,24 +80,25 @@ var/const/INJECT = 5 //injection current_list_element = 1 var/datum/reagent/current_reagent = reagent_list[current_list_element] - src.remove_reagent(current_reagent.id, 1) + remove_reagent(current_reagent.id, 1) current_list_element++ total_transfered++ - src.update_total() + update_total() handle_reactions() return total_transfered /datum/reagents/proc/remove_all(amount = 1) - var/part = amount / src.total_volume - for (var/datum/reagent/current_reagent in src.reagent_list) - var/current_reagent_transfer = current_reagent.volume * part - src.remove_reagent(current_reagent.id, current_reagent_transfer) + if(total_volume > 0) + var/part = amount / total_volume + for(var/datum/reagent/current_reagent in reagent_list) + var/current_reagent_transfer = current_reagent.volume * part + remove_reagent(current_reagent.id, current_reagent_transfer) - src.update_total() - src.handle_reactions() - return amount + update_total() + handle_reactions() + return amount /datum/reagents/proc/get_master_reagent_name() var/the_name = null diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index aa84460deb4..cbc3d93db26 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -100,10 +100,9 @@ /datum/chemical_reaction/slimecrit/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") spawn(50) - chemical_mob_spawn(holder, 5, "Gold Slime") /datum/chemical_reaction/slimecritlesser @@ -117,10 +116,9 @@ /datum/chemical_reaction/slimecritlesser/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") spawn(50) - chemical_mob_spawn(holder, 3, "Lesser Gold Slime", "neutral") /datum/chemical_reaction/slimecritfriendly @@ -134,10 +132,9 @@ /datum/chemical_reaction/slimecritfriendly/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate adorably !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate adorably !") spawn(50) - chemical_mob_spawn(holder, 1, "Friendly Gold Slime", "neutral") //Silver @@ -262,8 +259,8 @@ /datum/chemical_reaction/slimefreeze/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate adorably !") spawn(50) if(holder && holder.my_atom) playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) @@ -310,8 +307,8 @@ /datum/chemical_reaction/slimefire/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/TU = get_turf(holder.my_atom) + TU.visible_message("The slime extract begins to vibrate adorably !") spawn(50) if(holder && holder.my_atom) var/turf/simulated/T = get_turf(holder.my_atom) @@ -359,8 +356,8 @@ /datum/chemical_reaction/slimeglow/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime begins to emit a soft light. Squeezing it will cause it to grow brightly."), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.") var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime F.loc = get_turf(holder.my_atom) @@ -438,8 +435,7 @@ feedback_add_details("slime_cores_used","[type]") for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null)) slime.rabid = 1 - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The [slime] is driven into a frenzy!"), 1) + slime.visible_message("The [slime] is driven into a frenzy!") /datum/chemical_reaction/slimespeed @@ -498,8 +494,8 @@ /datum/chemical_reaction/slimeexplosion/on_reaction(datum/reagents/holder) feedback_add_details("slime_cores_used","[type]") - for(var/mob/O in viewers(get_turf(holder.my_atom), null)) - O.show_message(text("The slime extract begins to vibrate violently !"), 1) + var/turf/T = get_turf(holder.my_atom) + T.visible_message("The slime extract begins to vibrate violently !") spawn(50) if(holder && holder.my_atom) explosion(get_turf(holder.my_atom), 1 ,3, 6) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 65c6f0df827..eac5a5259e0 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -170,28 +170,25 @@ if(!linked_console) dat += "Scan for R&D Console
" if(loaded_item) - if(recentlyExperimented) - dat += "The [src] is still resetting!" - else - dat += "Loaded Item: [loaded_item]
" - dat += "Technology:
" - var/list/D = ConvertReqString2List(loaded_item.origin_tech) - for(var/T in D) - dat += "[T]
" - dat += "

Available tests:" - dat += "
Poke" - dat += "
Irradiate" - dat += "
Gas" - dat += "
Burn" - dat += "
Freeze" - dat += "
Destroy
" - if(istype(loaded_item,/obj/item/weapon/relic)) - dat += "
Discover
" - dat += "
Eject" + dat += "Loaded Item: [loaded_item]
" + dat += "Technology:
" + var/list/D = ConvertReqString2List(loaded_item.origin_tech) + for(var/T in D) + dat += "[T]
" + dat += "

Available tests:" + dat += "
Poke" + dat += "
Irradiate" + dat += "
Gas" + dat += "
Burn" + dat += "
Freeze" + dat += "
Destroy
" + if(istype(loaded_item,/obj/item/weapon/relic)) + dat += "
Discover
" + dat += "
Eject" else dat += "Nothing loaded." dat += "
Refresh
" - dat += "
Close
" + dat += "
Close
" var/datum/browser/popup = new(user, "experimentor","Experimentor", 700, 400, src) popup.set_content(dat) popup.open() @@ -544,8 +541,9 @@ var/scantype = href_list["function"] var/obj/item/process = locate(href_list["item"]) in src - if(scantype == "close") + if(href_list["close"]) usr << browse(null, "window=experimentor") + return else if(scantype == "search") var/obj/machinery/computer/rdconsole/D = locate(/obj/machinery/computer/rdconsole) in oview(3,src) if(D) @@ -558,6 +556,14 @@ if(recentlyExperimented) usr << "[src] has been used too recently!" return + else if(!loaded_item) + updateUsrDialog() //Set the interface to unloaded mode + usr << "[src] is not currently loaded!" + return + else if(!process || process != loaded_item) //Interface exploit protection (such as hrefs or swapping items with interface set to old item) + updateUsrDialog() //Refresh interface to update interface hrefs + usr << "Interface failure detected in [src]. Please try again." + return var/dotype if(text2num(scantype) == SCANTYPE_DISCOVER) dotype = SCANTYPE_DISCOVER @@ -571,8 +577,7 @@ for(var/T in temp_tech) linked_console.files.UpdateTech(T, temp_tech[T]) linked_console.files.UpdateDesigns(process,process.type) - if(scantype != "close") - src.updateUsrDialog() + src.updateUsrDialog() return //~~~~~~~~Admin logging proc, aka the Powergamer Alarm~~~~~~~~ diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index a5696333211..40e57b9eab0 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -531,6 +531,7 @@ var/shuttleId var/possible_destinations = "" var/admin_controlled + var/no_destination_swap = 0 /obj/machinery/computer/shuttle/New(location, obj/item/weapon/circuitboard/shuttle/C) ..() @@ -577,6 +578,11 @@ return if(href_list["move"]) + if(no_destination_swap) + var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) + if(M.mode != SHUTTLE_IDLE) + usr << "Shuttle already in transit." + return switch(SSshuttle.moveShuttle(shuttleId, href_list["move"], 1)) if(0) usr << "Shuttle received message and will be sent shortly." diff --git a/code/modules/tgui/states/states.dm b/code/modules/tgui/states/states.dm index 11653b30a0d..799ae542d81 100644 --- a/code/modules/tgui/states/states.dm +++ b/code/modules/tgui/states/states.dm @@ -18,11 +18,11 @@ var/src_object = ui_host() if(istype(user, /mob/dead/observer)) // Special-case ghosts. - if(check_rights_for(user.client, R_ADMIN)) + if(IsAdminGhost(user)) return UI_INTERACTIVE // Admins can interact anyway. - if(get_dist(src_object, src) > user.client.view) - return UI_CLOSE // Keep ghosts from opening too many UIs. - return UI_UPDATE // Ghosts can only view. + if(get_dist(src_object, src) < user.client.view) + return UI_UPDATE // Keep ghosts from opening too many UIs. + return UI_CLOSE // Ghosts can only view. return state.can_use_topic(src_object, user) // Check if the state allows interaction. /** diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 427a664efa4..e7ef928b975 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -197,6 +197,7 @@ else html = SStgui.basehtml html = replacetextEx(html, "\[ref]", "\ref[src]") + html = replacetextEx(html, "\[style]", style) return html /** @@ -257,16 +258,16 @@ * If the src_object's ui_act() returns 1, update all UIs attacked to it. **/ /datum/tgui/Topic(href, href_list) - var/action = href_list["action"] // Pull the action out. - href_list -= "action" + var/action = href_list["action"] + var/params = href_list; params -= "action" // Handle any special actions. switch(action) if("tgui:initialize") user << output(url_encode(get_json(initial_data)), "[window_id].browser:initialize") return - if("tgui:ie") - user << link("http://windows.microsoft.com/en-us/internet-explorer/download-ie") + if("tgui:link") + user << link(params["url"]) return if("tgui:fancy") user.client.prefs.tgui_fancy = TRUE @@ -279,7 +280,7 @@ if(status != UI_INTERACTIVE || user != usr) return // If UI is not interactive or usr calling Topic is not the UI user. - var/update = src_object.ui_act(action, href_list, state) // Call ui_act() on the src_object. + var/update = src_object.ui_act(action, params, state) // Call ui_act() on the src_object. if(src_object && update) SStgui.update_uis(src_object) // If we have a src_object and its ui_act() told us to update. diff --git a/code/orphaned procs/AStar.dm b/code/orphaned procs/AStar.dm index fdcd3f531f1..64648dbea73 100644 --- a/code/orphaned procs/AStar.dm +++ b/code/orphaned procs/AStar.dm @@ -62,14 +62,19 @@ Actual Adjacent procs : return b.f - a.f //wrapper that returns an empty list if A* failed to find a path -/proc/get_path_to(start, end, atom, dist, maxnodes, maxnodedepth = 30, mintargetdist, adjacent = /turf/proc/reachableAdjacentTurfs, id=null, turf/exclude=null, simulated_only = 1) - var/list/path = AStar(start, end, atom, dist, maxnodes, maxnodedepth, mintargetdist, adjacent,id, exclude, simulated_only) +/proc/get_path_to(caller, end, dist, maxnodes, maxnodedepth = 30, mintargetdist, adjacent = /turf/proc/reachableAdjacentTurfs, id=null, turf/exclude=null, simulated_only = 1) + var/list/path = AStar(caller, end, dist, maxnodes, maxnodedepth, mintargetdist, adjacent,id, exclude, simulated_only) if(!path) path = list() return path //the actual algorithm -/proc/AStar(start, end, atom, dist, maxnodes, maxnodedepth = 30, mintargetdist, adjacent = /turf/proc/reachableAdjacentTurfs, id=null, turf/exclude=null, simulated_only = 1) +/proc/AStar(caller, end, dist, maxnodes, maxnodedepth = 30, mintargetdist, adjacent = /turf/proc/reachableAdjacentTurfs, id=null, turf/exclude=null, simulated_only = 1) + + //sanitation + var/start = get_turf(caller) + if(!start) + return 0 if(maxnodes) //if start turf is farther than maxnodes from end turf, no need to do anything @@ -82,11 +87,6 @@ Actual Adjacent procs : var/list/path = null //the returned path, if any var/PathNode/cur //current processed turf - //sanitation - start = get_turf(start) - if(!start) - return 0 - //initialization open.Insert(new /PathNode(start,null,0,call(start,dist)(end),0)) @@ -118,7 +118,7 @@ Actual Adjacent procs : break //get adjacents turfs using the adjacent proc, checking for access with id - var/list/L = call(cur.source,adjacent)(atom,id, simulated_only) + var/list/L = call(cur.source,adjacent)(caller,id, simulated_only) for(var/turf/T in L) if(T == exclude || (T in closed)) continue @@ -151,7 +151,7 @@ Actual Adjacent procs : //Returns adjacent turfs in cardinal directions that are reachable //simulated_only controls whether only simulated turfs are considered or not -/turf/proc/reachableAdjacentTurfs(atom, ID, simulated_only) +/turf/proc/reachableAdjacentTurfs(caller, ID, simulated_only) var/list/L = new() var/turf/simulated/T @@ -159,7 +159,7 @@ Actual Adjacent procs : T = get_step(src,dir) if(simulated_only && !istype(T)) continue - if(!T.density && !LinkBlockedWithAccess(T, ID)) + if(!T.density && !LinkBlockedWithAccess(T,ID, caller)) L.Add(T) return L @@ -177,27 +177,15 @@ Actual Adjacent procs : L.Add(T) return L -/turf/proc/LinkBlockedWithAccess(turf/T, obj/item/weapon/card/id/ID) +/turf/proc/LinkBlockedWithAccess(turf/T, ID, caller) var/adir = get_dir(src, T) var/rdir = get_dir(T, src) - if(DirBlockedWithAccess(src, adir, ID)) - return 1 - if(DirBlockedWithAccess(T, rdir, ID)) - return 1 - for(var/obj/O in T) - if(O.density && !istype(O, /obj/machinery/door) && !(O.flags & ON_BORDER)) - return 1 - return 0 -/proc/DirBlockedWithAccess(turf/T, dir, ID) - for(var/obj/structure/window/D in T) - if(!D.density) - continue - if(D.dir == SOUTHWEST) + for(var/obj/structure/window/W in src) + if(!W.CanAStarPass(ID, adir)) return 1 - if(D.dir == dir) + for(var/obj/O in T) + if(!O.CanAStarPass(ID, rdir, caller)) return 1 - for(var/obj/machinery/door/D in T) - if(!D.CanAStarPass(ID, dir)) - return 1 - return 0 + + return 0 \ No newline at end of file diff --git a/config/admins.txt b/config/admins.txt index 1da322c5d64..1540aa455c3 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -105,4 +105,5 @@ As334 = Game Master neersighted = Game Master Swankcookie = Game Master Ressler = Game Master +Folix = Game Master Bawhoppennn = Game Master \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 66c2c991a0a..ed191d89f80 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,73 @@ -->
+

17 January 2016

+

Joan updated:

+
    +
  • You can once again repair a hacked APC by using an APC frame on it instead of welding it off the wall, at the same stage as you'd weld it off the wall.
  • +
+

MrStonedOne updated:

+
    +
  • Control clicking on a turf now un-pulls
  • +
+ +

16 January 2016

+

Joan updated:

+
    +
  • Alien queens and praetorians have suitably large speechbubbles.
  • +
  • Syndicate cyborgs and syndrones have suitably evil robotic speechbubbles.
  • +
  • Blob mobs have suitably uncomfortable-looking speechbubbles.
  • +
  • Holoparasites and guardians have suitably robotic and magical speechbubbles.
  • +
  • Swarmers have suitably holographic speechbubbles.
  • +
  • Slimes have suitably slimy speechbubbles.
  • +
+ +

15 January 2016

+

Joan updated:

+
    +
  • Holoparasites can no longer beat their owner to death while inside of them.
  • +
  • Updates traitor holoparasite descriptions for accuracy.
  • +
  • Adds 8 additional silvery metals to the holoparasite name pool.
  • +
  • Adds two new holoparasite colors, light purple and red.
  • +
  • Holoparasite HUD buttons now have new sprites.
  • +
  • Adds glow effects when guardians teleport or recall, including fire guardian teleporting and support guardian teleporting.
  • +
+

Kor updated:

+
    +
  • Washing machines are activated via alt+click rather than a right click verb.
  • +
+ +

13 January 2016

+

Joan updated:

+
    +
  • Alien whisper ability has a new icon
  • +
+

MrStonedOne updated:

+
    +
  • Control clicking on the thing you are pulling will no longer unpull, instead control clicking on anything too far away to be pulled will unpull. (reminder that the delete key also unpulls)
  • +
+

OneArmedYeti updated:

+
    +
  • To help with colorblindness, gang HUDs have been changed so leaders have a border and normal gangster icons are smaller.
  • +
+ +

11 January 2016

+

Joan updated:

+
    +
  • Blob cores and nodes no longer cause normal pulsed blobs to animate. Factories and resource nodes will still animate.
  • +
  • Holoparasite sprites have been updated again, are now named after silvery metals and flowers and can also be colored purple, blue or yellow.
  • +
+

xxalpha updated:

+
    +
  • Pipes and cables under walls, intact floors, grilles and reinforced windows will now be shielded from explosions until exposed.
  • +
+ +

09 January 2016

+

Wjohnston updated:

+
    +
  • AI Satellite has been remapped to make it more secure.
  • +
+

07 January 2016

KorPhaeron updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 392eaff2d0b..4ca78f77ec0 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -3195,3 +3195,52 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. seconds. TrustyGun: - rscadd: 'Added two new UI styles: black and green Operative and pale green Slimecore.' +2016-01-09: + Wjohnston: + - wip: AI Satellite has been remapped to make it more secure. +2016-01-11: + Joan: + - rscdel: Blob cores and nodes no longer cause normal pulsed blobs to animate. Factories + and resource nodes will still animate. + - imageadd: Holoparasite sprites have been updated again, are now named after silvery + metals and flowers and can also be colored purple, blue or yellow. + xxalpha: + - tweak: Pipes and cables under walls, intact floors, grilles and reinforced windows + will now be shielded from explosions until exposed. +2016-01-13: + Joan: + - imageadd: Alien whisper ability has a new icon + MrStonedOne: + - tweak: Control clicking on the thing you are pulling will no longer unpull, instead + control clicking on anything too far away to be pulled will unpull. (reminder + that the delete key also unpulls) + OneArmedYeti: + - imageadd: To help with colorblindness, gang HUDs have been changed so leaders + have a border and normal gangster icons are smaller. +2016-01-15: + Joan: + - bugfix: Holoparasites can no longer beat their owner to death while inside of + them. + - spellcheck: Updates traitor holoparasite descriptions for accuracy. + - spellcheck: Adds 8 additional silvery metals to the holoparasite name pool. + - imageadd: Adds two new holoparasite colors, light purple and red. + - imageadd: Holoparasite HUD buttons now have new sprites. + - imageadd: Adds glow effects when guardians teleport or recall, including fire + guardian teleporting and support guardian teleporting. + Kor: + - rscadd: Washing machines are activated via alt+click rather than a right click + verb. +2016-01-16: + Joan: + - imageadd: Alien queens and praetorians have suitably large speechbubbles. + - imageadd: Syndicate cyborgs and syndrones have suitably evil robotic speechbubbles. + - imageadd: Blob mobs have suitably uncomfortable-looking speechbubbles. + - imageadd: Holoparasites and guardians have suitably robotic and magical speechbubbles. + - imageadd: Swarmers have suitably holographic speechbubbles. + - imageadd: Slimes have suitably slimy speechbubbles. +2016-01-17: + Joan: + - bugfix: You can once again repair a hacked APC by using an APC frame on it instead + of welding it off the wall, at the same stage as you'd weld it off the wall. + MrStonedOne: + - bugfix: Control clicking on a turf now un-pulls diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index bb86a8b46f2..9aeb40dcdea 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/tile_effects.dmi b/icons/effects/tile_effects.dmi index 4c78f8f2e06..6476b5a2a16 100644 Binary files a/icons/effects/tile_effects.dmi and b/icons/effects/tile_effects.dmi differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index c114de2421e..4f06d9fca78 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/guardian.dmi b/icons/mob/guardian.dmi index 9da38ca7706..2b9e0957b68 100644 Binary files a/icons/mob/guardian.dmi and b/icons/mob/guardian.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 0bd0e0fefb5..50e9757cf3a 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/swarmer.dmi b/icons/mob/swarmer.dmi index dffd6b2490c..f8ff43f3b9f 100644 Binary files a/icons/mob/swarmer.dmi and b/icons/mob/swarmer.dmi differ diff --git a/icons/mob/talk.dmi b/icons/mob/talk.dmi index 7f0efa39cbe..e5074d3d03f 100644 Binary files a/icons/mob/talk.dmi and b/icons/mob/talk.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 03faadce202..efb46f7b0cd 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 76a16844108..5354cad0eff 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -108,6 +108,7 @@ #include "code\_onclick\hud\screen_objects.dm" #include "code\ATMOSPHERICS\atmospherics.dm" #include "code\ATMOSPHERICS\datum_pipeline.dm" +#include "code\ATMOSPHERICS\gas_types.dm" #include "code\ATMOSPHERICS\components\components_base.dm" #include "code\ATMOSPHERICS\components\binary_devices\binary_atmos_base.dm" #include "code\ATMOSPHERICS\components\binary_devices\circulator.dm" @@ -824,6 +825,7 @@ #include "code\game\turfs\turf.dm" #include "code\game\turfs\simulated\dirtystation.dm" #include "code\game\turfs\simulated\floor.dm" +#include "code\game\turfs\simulated\river.dm" #include "code\game\turfs\simulated\walls.dm" #include "code\game\turfs\simulated\walls_mineral.dm" #include "code\game\turfs\simulated\walls_misc.dm" @@ -1446,6 +1448,7 @@ #include "code\modules\procedural mapping\mapGeneratorModules\nature.dm" #include "code\modules\procedural mapping\mapGenerators\asteroid.dm" #include "code\modules\procedural mapping\mapGenerators\cellular.dm" +#include "code\modules\procedural mapping\mapGenerators\lava_river.dm" #include "code\modules\procedural mapping\mapGenerators\nature.dm" #include "code\modules\procedural mapping\mapGenerators\shuttle.dm" #include "code\modules\procedural mapping\mapGenerators\syndicate.dm" diff --git a/tgui/.babelrc b/tgui/.babelrc new file mode 100644 index 00000000000..3c078e9f990 --- /dev/null +++ b/tgui/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": [ + "es2015" + ] +} diff --git a/tgui/.gitattributes b/tgui/.gitattributes index 3acb4c9ebd7..6da3dcfc2d0 100644 --- a/tgui/.gitattributes +++ b/tgui/.gitattributes @@ -1 +1 @@ -assets/* binary +assets/* binary diff --git a/tgui/Gulpfile.js b/tgui/Gulpfile.js deleted file mode 100644 index d1c580b989f..00000000000 --- a/tgui/Gulpfile.js +++ /dev/null @@ -1,2 +0,0 @@ -require('coffee-script/register'); -require('./gulp'); diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index a79f25a2dbf..3226be8ae16 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -.normal{color:#40628a}.good{color:#537d29}.average{color:#be6209}.bad{color:#b00e0e}.highlight{color:#8ba5c4}html{box-sizing:border-box;min-height:100%;margin:0;cursor:default}*,:after,:before{box-sizing:inherit}body{min-height:100%;height:100%;margin:0 6px;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff}main{display:block;margin-top:32px;padding-top:3px}hr{height:2px;background-color:#40628a;border:none}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}.bar .barText,span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.bold{font-weight:700}.italic{font-style:italic}[unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}.bar .barText{position:absolute;top:0;right:3px}.bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}.bar .barFill.good{background-color:#537d29}.bar .barFill.average{background-color:#be6209}.bar .barFill.bad{background-color:#b00e0e}.bar .barFill.highlight{background-color:#8ba5c4}span.button{display:inline-block;vertical-align:middle;height:20px;line-height:19px;padding:0 5px;white-space:nowrap}span.button .fa{padding-right:2px}span.button.normal{transition:background-color .5s;background-color:#40628a}span.button.normal.active:focus,span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}span.button.disabled{transition:background-color .5s;background-color:#999}span.button.disabled.active:focus,span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}span.button.selected{transition:background-color .5s;background-color:#2f943c}span.button.selected.active:focus,span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}span.button.caution{transition:background-color .5s;background-color:#9a9d00}span.button.caution.active:focus,span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}span.button.danger{transition:background-color .5s;background-color:#9d0808}span.button.danger.active:focus,span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}span.button.gridable{width:125px;margin:2px 0}div.display,div.notice{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}div.display header,div.notice header,div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;border-bottom:2px solid #40628a}div.display header .buttonRight,div.notice header .buttonRight,div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}div.display article,div.notice article,div.subdisplay article{display:table;width:100%;border-spacing:4px 6px}div.notice{background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px);margin:8px 0;box-shadow:none;color:#000;font-weight:700;font-style:italic}div.notice .button{outline:1px solid #272727}div.notice .label{color:#000}div.notice hr{background-color:#272727}div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}section .content,section .label,section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle}section{display:table-row;width:100%;padding:3px 0}section:not(first-child){padding-top:4px}section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}section .content:not(:last-child){padding-right:16px}section .line{width:100%}section .buttoninfo{margin-left:5px}div.subdisplay{width:100%;margin:0}header.titlebar .close,header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#98b0c3}header.titlebar .close:hover,header.titlebar .minimize:hover{color:#a7bccc}header.titlebar{position:fixed;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}header.titlebar .title{position:absolute;top:6px;left:46px;color:#98b0c3;font-size:16px;white-space:nowrap}header.titlebar .minimize{position:absolute;top:6px;right:46px}header.titlebar .close{position:absolute;top:4px;right:12px}.wf-inactive .minimize:after{content:"-"}.wf-inactive .close:after{content:"X"}body.generic{background:linear-gradient(180deg,0,100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff000000',endColorstr='#ff000000',GradientType=0)}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo=") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA4NS4yNSAxMTQuMzUiIG9wYWNpdHk9Ii4zMyI+CiAgPHRleHQKICAgIHN0eWxlPSJmb250LXNpemU6MjAwcHg7Zm9udC1mYW1pbHk6J1ZlcmRhbmEnLHNhbnMtc2VyaWYiCiAgICB4PSItMTAuNzQyMTg4IgogICAgeT0iMTExLjcxODc1Ij4KICAgIDx0c3Bhbj5zPC90c3Bhbj4KICA8L3RleHQ+Cjwvc3ZnPgo=") no-repeat fixed center/70% 70%,linear-gradient(180deg,#b30f0f 0,#740d0d);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb30f0f',endColorstr='#ff740d0d',GradientType=0)} \ No newline at end of file +.normal{color:#40628a}.good{color:#537d29}.average{color:#be6209}.bad{color:#b00e0e}.highlight{color:#8ba5c4}html{box-sizing:border-box;min-height:100%;margin:0;cursor:default}*,:after,:before{box-sizing:inherit}body{min-height:100%;height:100%;margin:0 6px;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}main{display:block;margin-top:32px;padding-top:3px}hr{height:2px;background-color:#40628a;border:none}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.nanotrasen .bar .barText,body.nanotrasen span.button,body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}.bold{font-weight:700}.italic{font-style:italic}[unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo=") no-repeat fixed center/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;height:20px;line-height:19px;padding:0 5px;white-space:nowrap}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-spacing:4px 6px}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .button{outline:1px solid #272727}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle}body.nanotrasen section{display:table-row;width:100%;padding:3px 0}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .buttoninfo{margin-left:5px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen .wf-inactive .statusicon:after{content:"O"}body.nanotrasen .wf-inactive .minimize:after{content:"-"}body.nanotrasen .wf-inactive .close:after{content:"X"}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA4NS4yNSAxMTQuMzUiIG9wYWNpdHk9Ii4zMyI+CiAgPHRleHQKICAgIHN0eWxlPSJmb250LXNpemU6MjAwcHg7Zm9udC1mYW1pbHk6J1ZlcmRhbmEnLHNhbnMtc2VyaWYiCiAgICB4PSItMTAuNzQyMTg4IgogICAgeT0iMTExLjcxODc1Ij4KICAgIDx0c3Bhbj5zPC90c3Bhbj4KICA8L3RleHQ+Cjwvc3ZnPgo=") no-repeat fixed center/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#80ff80}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;height:20px;line-height:19px;padding:0 5px;white-space:nowrap}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#272727}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#474747;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-spacing:4px 6px}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .button{outline:1px solid #272727}body.syndicate div.notice .label{color:#000}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle}body.syndicate section{display:table-row;width:100%;padding:3px 0}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .buttoninfo{margin-left:5px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate .wf-inactive .statusicon:after{content:"O"}body.syndicate .wf-inactive .minimize:after{content:"-"}body.syndicate .wf-inactive .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index 7ac31566ac5..2ab39d08d0d 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,9 +1,10 @@ -!function t(e,n,r){function i(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(a)return a(o,!0);var c=Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[o]={exports:{}};e[o][0].call(l.exports,function(t){var n=e[o][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[o].exports}for(var a="function"==typeof require&&require,o=0;o-1}}([].indexOf||function(t){for(V=this.length;V--&&this[V]!==t;);return V}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e0||-1)*Math.floor(Math.abs(e))),e},ToPrimitive:function(e){var n,r,i;if(R(e))return e;if(r=e.valueOf,t(r)&&(n=r.call(e),R(n)))return n;if(i=e.toString,t(i)&&(n=i.call(e),R(n)))return n;throw new TypeError},ToObject:function(t){if(null==t)throw new TypeError("can't convert "+t+" to object");return r(t)},ToUint32:function(t){return t>>>0}},D=function(){};M(a,{bind:function(e){var n=this;if(!t(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var i,a=l.call(arguments,1),o=function(){if(this instanceof i){var t=n.apply(this,d.call(a,l.call(arguments)));return r(t)===t?t:this}return n.apply(e,d.call(a,l.call(arguments)))},s=g(0,n.length-a.length),u=[],c=0;s>c;c++)h.call(u,"$"+c);return i=Function("binder","return function ("+u.join(",")+"){ return binder.apply(this, arguments); }")(o),n.prototype&&(D.prototype=n.prototype,i.prototype=new D,D.prototype=null),i}});var U=m.bind(i.hasOwnProperty),V=m.bind(i.toString),B=m.bind(l),q=v.bind(l),z=m.bind(s.slice),W=m.bind(s.split),H=m.bind(s.indexOf),$=m.bind(h),G=m.bind(i.propertyIsEnumerable),K=m.bind(n.sort),Q=e.isArray||function(t){return"[object Array]"===V(t)},Y=1!==[].unshift(0);M(n,{unshift:function(){return f.apply(this,arguments),this.length}},Y),M(e,{isArray:Q});var Z=r("a"),J="a"!==Z[0]||!(0 in Z),X=function(t){var e=!0,n=!0;return t&&(t.call("foo",function(t,n,r){"object"!=typeof r&&(e=!1)}),t.call([1],function(){"use strict";n="string"==typeof this},"x")),!!t&&e&&n};M(n,{forEach:function(e){var n,r=I.ToObject(this),i=J&&A(this)?W(this,""):r,a=-1,o=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++a1&&(r=arguments[1]),!t(n))throw new TypeError("Array.prototype.map callback must be a function");for(var u=0;o>u;u++)u in a&&(void 0===r?s[u]=n(a[u],u,i):s[u]=n.call(r,a[u],u,i));return s}},!X(n.map)),M(n,{filter:function(e){var n,r,i=I.ToObject(this),a=J&&A(this)?W(this,""):i,o=I.ToUint32(a.length),s=[];if(arguments.length>1&&(r=arguments[1]),!t(e))throw new TypeError("Array.prototype.filter callback must be a function");for(var u=0;o>u;u++)u in a&&(n=a[u],(void 0===r?e(n,u,i):e.call(r,n,u,i))&&$(s,n));return s}},!X(n.filter)),M(n,{every:function(e){var n,r=I.ToObject(this),i=J&&A(this)?W(this,""):r,a=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.every callback must be a function");for(var o=0;a>o;o++)if(o in i&&!(void 0===n?e(i[o],o,r):e.call(n,i[o],o,r)))return!1;return!0}},!X(n.every)),M(n,{some:function(e){var n,r=I.ToObject(this),i=J&&A(this)?W(this,""):r,a=I.ToUint32(i.length);if(arguments.length>1&&(n=arguments[1]),!t(e))throw new TypeError("Array.prototype.some callback must be a function");for(var o=0;a>o;o++)if(o in i&&(void 0===n?e(i[o],o,r):e.call(n,i[o],o,r)))return!0;return!1}},!X(n.some));var tt=!1;n.reduce&&(tt="object"==typeof n.reduce.call("es5",function(t,e,n,r){return r})),M(n,{reduce:function(e){var n=I.ToObject(this),r=J&&A(this)?W(this,""):n,i=I.ToUint32(r.length);if(!t(e))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===i&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var a,o=0;if(arguments.length>=2)a=arguments[1];else for(;;){if(o in r){a=r[o++];break}if(++o>=i)throw new TypeError("reduce of empty array with no initial value")}for(;i>o;o++)o in r&&(a=e(a,r[o],o,n));return a}},!tt);var et=!1;n.reduceRight&&(et="object"==typeof n.reduceRight.call("es5",function(t,e,n,r){return r})),M(n,{reduceRight:function(e){var n=I.ToObject(this),r=J&&A(this)?W(this,""):n,i=I.ToUint32(r.length);if(!t(e))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===i&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var a,o=i-1;if(arguments.length>=2)a=arguments[1];else for(;;){if(o in r){a=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>o)return a;do o in r&&(a=e(a,r[o],o,n));while(o--);return a}},!et);var nt=n.indexOf&&-1!==[0,1].indexOf(1,2);M(n,{indexOf:function(t){var e=J&&A(this)?W(this,""):I.ToObject(this),n=I.ToUint32(e.length);if(0===n)return-1;var r=0;for(arguments.length>1&&(r=I.ToInteger(arguments[1])),r=r>=0?r:g(0,n+r);n>r;r++)if(r in e&&e[r]===t)return r;return-1}},nt);var rt=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);M(n,{lastIndexOf:function(t){var e=J&&A(this)?W(this,""):I.ToObject(this),n=I.ToUint32(e.length);if(0===n)return-1;var r=n-1;for(arguments.length>1&&(r=b(r,I.ToInteger(arguments[1]))),r=r>=0?r:n-Math.abs(r);r>=0;r--)if(r in e&&t===e[r])return r;return-1}},rt);var it=function(){var t=[1,2],e=t.splice();return 2===t.length&&Q(e)&&0===e.length}();M(n,{splice:function(t,e){return 0===arguments.length?[]:p.apply(this,arguments)}},!it);var at=function(){var t={};return n.splice.call(t,0,0,1),1===t.length}();M(n,{splice:function(t,e){if(0===arguments.length)return[];var n=arguments;return this.length=g(I.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof e&&(n=B(arguments),n.length<2?$(n,this.length-t):n[1]=I.ToInteger(e)),p.apply(this,n)}},!at);var ot=function(){var t=new e(1e5);return t[8]="x",t.splice(1,1),7===t.indexOf("x")}(),st=function(){var t=256,e=[];return e[t]="a",e.splice(t+1,0,"b"),"a"===e[t]}();M(n,{splice:function(t,e){for(var n,r=I.ToObject(this),i=[],a=I.ToUint32(r.length),s=I.ToInteger(t),u=0>s?g(a+s,0):b(s,a),c=b(g(I.ToInteger(e),0),a-u),l=0;c>l;)n=o(u+l),U(r,n)&&(i[l]=r[n]),l+=1;var p,h=B(arguments,2),f=h.length;if(c>f){for(l=u;a-c>l;)n=o(l+c),p=o(l+f),U(r,n)?r[p]=r[n]:delete r[p],l+=1;for(l=a;l>a-c+f;)delete r[l-1],l-=1}else if(f>c)for(l=a-c;l>u;)n=o(l+c-1),p=o(l+f-1),U(r,n)?r[p]=r[n]:delete r[p],l-=1;l=u;for(var d=0;d=0&&!Q(e)&&t(e.callee)},At=Ot(arguments)?Ot:St;M(r,{keys:function(e){var n=t(e),r=At(e),i=null!==e&&"object"==typeof e,a=i&&A(e);if(!i&&!n&&!r)throw new TypeError("Object.keys called on a non-object");var s=[],u=yt&&n;if(a&&wt||r)for(var c=0;ch;h++){var f=Tt[h];p&&"constructor"===f||!U(e,f)||$(s,f)}return s}});var Pt=r.keys&&function(){return 2===r.keys(arguments).length}(1,2),jt=r.keys&&function(){var t=r.keys(arguments);return 1!==arguments.length||1!==t.length||1!==t[0]}(1),Ft=r.keys;M(r,{keys:function(t){return Ft(At(t)?B(t):t)}},!Pt||jt);var Nt=-621987552e5,Mt="-000001",Rt=Date.prototype.toISOString&&-1===new Date(Nt).toISOString().indexOf(Mt),Lt=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();M(Date.prototype,{toISOString:function(){var t,e,n,r,i;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(r=this.getUTCFullYear(),i=this.getUTCMonth(),r+=Math.floor(i/12),i=(i%12+12)%12,t=[i+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],r=(0>r?"-":r>9999?"+":"")+z("00000"+Math.abs(r),r>=0&&9999>=r?-4:-6),e=t.length;e--;)n=t[e],10>n&&(t[e]="0"+n);return r+"-"+B(t,0,2).join("-")+"T"+B(t,2).join(":")+"."+z("000"+this.getUTCMilliseconds(),-3)+"Z"}},Rt||Lt);var It=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Nt).toJSON().indexOf(Mt)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(t){return!1}}();It||(Date.prototype.toJSON=function(e){var n=r(this),i=I.ToPrimitive(n);if("number"==typeof i&&!isFinite(i))return null;var a=n.toISOString;if(!t(a))throw new TypeError("toISOString property is not callable");return a.call(n)});var Dt=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Ut=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),Vt=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(Vt||Ut||!Dt){var Bt=Math.pow(2,31)-1,qt=L(new Date(1970,0,1,0,0,0,Bt+1).getTime());Date=function(t){var e=function(n,r,i,a,s,u,c){var l,p=arguments.length;if(this instanceof t){var h=u,f=c;if(qt&&p>=7&&c>Bt){var d=Math.floor(c/Bt)*Bt,m=Math.floor(d/1e3);h+=m,f-=1e3*m}l=1===p&&o(n)===n?new t(e.parse(n)):p>=7?new t(n,r,i,a,s,h,f):p>=6?new t(n,r,i,a,s,h):p>=5?new t(n,r,i,a,s):p>=4?new t(n,r,i,a):p>=3?new t(n,r,i):p>=2?new t(n,r):p>=1?new t(n):new t}else l=t.apply(this,arguments);return R(l)||M(l,{constructor:e},!0),l},n=RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),r=[0,31,59,90,120,151,181,212,243,273,304,334,365],i=function(t,e){var n=e>1?1:0;return r[e]+Math.floor((t-1969+n)/4)-Math.floor((t-1901+n)/100)+Math.floor((t-1601+n)/400)+365*(t-1970)},a=function(e){var n=0,r=e;if(qt&&r>Bt){var i=Math.floor(r/Bt)*Bt,a=Math.floor(i/1e3);n+=a,r-=1e3*a}return u(new t(1970,0,1,0,0,n,r))};for(var s in t)U(t,s)&&(e[s]=t[s]);M(e,{now:t.now,UTC:t.UTC},!0),e.prototype=t.prototype,M(e.prototype,{constructor:e},!0);var c=function(e){var r=n.exec(e);if(r){var o,s=u(r[1]),c=u(r[2]||1)-1,l=u(r[3]||1)-1,p=u(r[4]||0),h=u(r[5]||0),f=u(r[6]||0),d=Math.floor(1e3*u(r[7]||0)),m=!(!r[4]||r[8]),v="-"===r[9]?1:-1,g=u(r[10]||0),b=u(r[11]||0),y=h>0||f>0||d>0;return(y?24:25)>p&&60>h&&60>f&&1e3>d&&c>-1&&12>c&&24>g&&60>b&&l>-1&&l=-864e13&&864e13>=o)?o:NaN}return t.parse.apply(this,arguments)};return M(e,{parse:c}),e}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var zt=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),Wt={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(t,e){for(var n=-1,r=e;++n=0;)n+=Wt.data[e],Wt.data[e]=Math.floor(n/t),n=n%t*Wt.base},numToString:function(){for(var t=Wt.size,e="";--t>=0;)if(""!==e||0===t||0!==Wt.data[t]){var n=o(Wt.data[t]);""===e?e=n:e+=z("0000000",0,7-n.length)+n}return e},pow:function ue(t,e,n){return 0===e?n:e%2===1?ue(t,e-1,n*t):ue(t*t,e/2,n)},log:function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e}},Ht=function(t){var e,n,r,i,a,s,c,l;if(e=u(t),e=L(e)?0:Math.floor(e),0>e||e>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=u(this),L(n))return"NaN";if(-1e21>=n||n>=1e21)return o(n);if(r="",0>n&&(r="-",n=-n),i="0",n>1e-21)if(a=Wt.log(n*Wt.pow(2,69,1))-69,s=0>a?n*Wt.pow(2,-a,1):n/Wt.pow(2,a,1),s*=4503599627370496,a=52-a,a>0){for(Wt.multiply(0,s),c=e;c>=7;)Wt.multiply(1e7,0),c-=7;for(Wt.multiply(Wt.pow(10,c,1),0),c=a-1;c>=23;)Wt.divide(1<<23),c-=23;Wt.divide(1<0?(l=i.length,i=e>=l?r+z("0.0000000000000000000",0,e-l+2)+i:r+z(i,0,l-e)+"."+z(i,l-e)):i=r+i,i};M(c,{toFixed:Ht},zt);var $t=function(){try{return"1"===1..toPrecision(void 0)}catch(t){return!0}}(),Gt=c.toPrecision;M(c,{toPrecision:function(t){return void 0===t?Gt.call(this):Gt.call(this,t)}},$t),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var t=void 0===/()??/.exec("")[1],e=Math.pow(2,32)-1;s.split=function(n,r){var i=this+"";if(void 0===n&&0===r)return[];if(!T(n))return W(this,n,r);var a,o,s,u,c=[],l=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),p=0,f=RegExp(n.source,l+"g");t||(a=RegExp("^"+f.source+"$(?!\\s)",l));var d=void 0===r?e:I.ToUint32(r);for(o=f.exec(i);o&&(s=o.index+o[0].length,!(s>p&&($(c,z(i,p,o.index)),!t&&o.length>1&&o[0].replace(a,function(){for(var t=1;t1&&o.index=d)));)f.lastIndex===o.index&&f.lastIndex++,o=f.exec(i);return p===i.length?(u||!f.test(""))&&$(c,""):$(c,z(i,p)),c.length>d?z(c,0,d):c}}():"0".split(void 0,0).length&&(s.split=function(t,e){return void 0===t&&0===e?[]:W(this,t,e)});var Kt=s.replace,Qt=function(){var t=[];return"x".replace(/x(.)?/g,function(e,n){$(t,n)}),1===t.length&&void 0===t[0]}();Qt||(s.replace=function(e,n){var r=t(n),i=T(e)&&/\)[*?]/.test(e.source);if(r&&i){var a=function(t){var r=arguments.length,i=e.lastIndex;e.lastIndex=0;var a=e.exec(t)||[];return e.lastIndex=i,$(a,arguments[r-2],arguments[r-1]),n.apply(this,a)};return Kt.call(this,e,a)}return Kt.call(this,e,n)});var Yt=s.substr,Zt="".substr&&"b"!=="0b".substr(-1);M(s,{substr:function(t,e){var n=t;return 0>t&&(n=g(this.length+t,0)),Yt.call(this,n,e)}},Zt);var Jt=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",Xt="​",te="["+Jt+"]",ee=RegExp("^"+te+te+"*"),ne=RegExp(te+te+"*$"),re=s.trim&&(Jt.trim()||!Xt.trim());M(s,{trim:function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");return o(this).replace(ee,"").replace(ne,"")}},re);var ie=s.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);M(s,{lastIndexOf:function(t){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");for(var e=o(this),n=o(t),r=arguments.length>1?u(arguments[1]):NaN,i=L(r)?1/0:I.ToInteger(r),a=b(g(i,0),e.length),s=n.length,c=a+s;c>0;){c=g(0,c-s);var l=H(z(e,c,a+s),n);if(-1!==l)return c+l}return-1}},ie);var ae=s.lastIndexOf;if(M(s,{lastIndexOf:function(t){return ae.apply(this,arguments)}},1!==s.lastIndexOf.length),(8!==parseInt(Jt+"08")||22!==parseInt(Jt+"0x16"))&&(parseInt=function(t){var e=/^[\-+]?0[xX]/;return function(n,r){var i=o(n).trim(),a=u(r)||(e.test(i)?16:10);return t(i,a)}}(parseInt)),new RangeError("test")+""!="RangeError: test"){var oe=function(){if(void 0===this||null===this)throw new TypeError("can't convert "+this+" to object");var t=this.name;void 0===t?t="Error":"string"!=typeof t&&(t=o(t));var e=this.message;return void 0===e?e="":"string"!=typeof e&&(e=o(e)),t?e?t+": "+e:t:e};Error.prototype.toString=oe}if(N){var se=function(t,e){if(G(t,e)){var n=Object.getOwnPropertyDescriptor(t,e);n.enumerable=!1,Object.defineProperty(t,e,n)}};se(Error.prototype,"message"),""!==Error.prototype.message&&(Error.prototype.message=""),se(Error.prototype,"name")}})},{}],3:[function(t,e,n){!function(t,n){function r(t,e){var n=t.createElement("p"),r=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}function i(){var t=w.elements;return"string"==typeof t?t.split(" "):t}function a(t,e){var n=w.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),w.elements=n+" "+t,l(e)}function o(t){var e=y[t[g]];return e||(e={},b++,t[g]=b,y[b]=e),e}function s(t,e,r){if(e||(e=n),h)return e.createElement(t);r||(r=o(e));var i;return i=r.cache[t]?r.cache[t].cloneNode():v.test(t)?(r.cache[t]=r.createElem(t)).cloneNode():r.createElem(t),!i.canHaveChildren||m.test(t)||i.tagUrn?i:r.frag.appendChild(i)}function u(t,e){if(t||(t=n),h)return t.createDocumentFragment();e=e||o(t);for(var r=e.frag.cloneNode(),a=0,s=i(),u=s.length;u>a;a++)r.createElement(s[a]);return r}function c(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return w.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+i().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(w,e.frag)}function l(t){t||(t=n);var e=o(t);return!w.shivCSS||p||e.hasCSS||(e.hasCSS=!!r(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),h||c(t,e),t}var p,h,f="3.7.3-pre",d=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",p="hidden"in t,h=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){p=!0,h=!0}}();var w={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:f,shivCSS:d.shivCSS!==!1,supportsUnknownElements:h,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:l,createElement:s,createDocumentFragment:u,addElements:a};t.html5=w,l(n),"object"==typeof e&&e.exports&&(e.exports=w)}("undefined"!=typeof window?window:this,document)},{}],4:[function(t,e,n){(function(t){!function(t){function e(t,e,n,r){for(var a,o=n.slice(),s=i(e,t),u=0,c=o.length;c>u&&(handler=o[u],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(s):handler.call(t,s),!s.stoppedImmediatePropagation);u++);return a=!s.stoppedPropagation,r&&a&&t.parentNode?t.parentNode.dispatchEvent(s):!s.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function r(t,e,r){var i=b(e||t,r);v(t,"textContent",n(function(){return i.get.call(this)},function(t){i.set.call(this,t)}))}function i(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function a(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!h&&k.test(document.readyState)&&(h=!h,document.detachEvent(f,u),t=document.createEvent("Event"),t.initEvent(d,!0,!0),document.dispatchEvent(t))}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function l(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var p=!0,h=!1,f="onreadystatechange",d="DOMContentLoaded",m="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},g=Object.defineProperties||function(e,n){for(var r in n)if(y.call(n,r))try{v(e,r,n[r])}catch(i){t.console&&console.log(r+" failed on object:",e,i.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,w=t.Element.prototype,x=t.Text.prototype,_=/^[a-z]+$/,k=/loaded|complete/,E={},T=document.createElement("div"),C=document.documentElement,O=C.removeAttribute,S=C.setAttribute;r(t.HTMLCommentElement.prototype,w,"nodeValue"),r(t.HTMLScriptElement.prototype,null,"text"),r(x,null,"nodeValue"),r(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(b(t.CSSStyleSheet.prototype,"cssText"))),g(w,{textContent:{get:o,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:{value:function(t,n,r){var i,o,u=this,c="on"+t,p=u[m]||v(u,m,{value:{}})[m],h=p[c]||(p[c]={}),f=h.h||(h.h=[]);if(!y.call(h,"w")){if(h.w=function(t){return t[m]||e(u,l(u,t),f,!1)},!y.call(E,c))if(_.test(t)){try{i=document.createEventObject(),i[m]=!0,9!=u.nodeType&&(null==u.parentNode&&T.appendChild(u),(o=u.getAttribute(c))&&O.call(u,c)),u.fireEvent(c,i),E[c]=!0}catch(i){for(E[c]=!1;T.hasChildNodes();)T.removeChild(T.firstChild)}null!=o&&S.call(u,c,o)}else E[c]=!1;(h.n=E[c])&&u.attachEvent(c,h.w)}a(f,n)<0&&f[r?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",s)}},dispatchEvent:{value:function(t){var n,r=this,i="on"+t.type,a=r[m],o=a&&a[i],s=!!o;return t.target||(t.target=r),s?o.n?r.fireEvent(i,t):e(r,t,o.h,!0):(n=r.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}},removeEventListener:{value:function(t,e,n){var r=this,i="on"+t,o=r[m],s=o&&o[i],u=s&&s.h,c=u?a(u,e):-1;c>-1&&u.splice(c,1)}}}),g(x,{addEventListener:{value:w.addEventListener},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener}}),g(t.XMLHttpRequest.prototype,{addEventListener:{value:function(t,e,n){var r=this,i="on"+t,o=r[m]||v(r,m,{value:{}})[m],s=o[i]||(o[i]={}),u=s.h||(s.h=[]);a(u,e)<0&&(r[i]||(r[i]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),r.dispatchEvent(e)}),u[n?"unshift":"push"](e))}},dispatchEvent:{value:function(t){var n=this,r="on"+t.type,i=n[m],a=i&&i[r],o=!!a;return o&&(a.n?n.fireEvent(r,t):e(n,t,a.h,!0))}},removeEventListener:{value:w.removeEventListener}}),g(t.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),g(t.HTMLDocument.prototype,{defaultView:{get:function(){ -return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:{value:function(e,n,r){var i=this;w.addEventListener.call(i,e,n,r),p&&e===d&&!k.test(i.readyState)&&(p=!1,i.attachEvent(f,u),t==top&&!function a(t){try{i.documentElement.doScroll("left"),u()}catch(e){setTimeout(a,50)}}())}},dispatchEvent:{value:w.dispatchEvent},removeEventListener:{value:w.removeEventListener},createEvent:{value:function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e}}}),g(t.Window.prototype,{getComputedStyle:{value:function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,r=/^(top|right|bottom|left)$/,i=/\-([a-z])/g,a=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,u=this._,c=u.style,l=u.currentStyle,p=u.runtimeStyle;return t=("float"===t?"style-float":t).replace(i,a),e=l?l[t]:c[t],n.test(e)&&!r.test(t)&&(o=c.left,s=p&&p.left,s&&(p.left=l.left),c.left="fontSize"===t?"1em":e,e=c.pixelLeft+"px",c.left=o,s&&(p.left=s)),null==e?e:e+""||"auto"},e.prototype.getPropertyValue=function(){return null},function(n,r){return r?new e(n):new t(n)}}()},addEventListener:{value:function(n,r,i){var o,s=t,u="on"+n;s[u]||(s[u]=function(t){return e(s,l(s,t),o,!1)}),o=s[u][m]||(s[u][m]=[]),a(o,r)<0&&o[i?"unshift":"push"](r)}},dispatchEvent:{value:function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}},removeEventListener:{value:function(e,n,r){var i="on"+e,o=(t[i]||Object)[m],s=o?a(o,n):-1;s>-1&&o.splice(s,1)}}}),function(t,e,n){for(n=0;n1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];for(var i,a;a=n.shift();)for(i in a)So.call(a,i)&&(t[i]=a[i]);return t}function i(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function a(t){return"[object Array]"===Ao.call(t)}function o(t){return Po.test(Ao.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function u(t){return!isNaN(parseFloat(t))&&isFinite(t)}function c(t){return t&&"[object Object]"===Ao.call(t)}function l(t,e){return t.replace(/%s/g,function(){return e.shift()})}function p(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];throw t=l(t,n),Error(t)}function h(){Av.DEBUG&&To.apply(null,arguments)}function f(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=l(t,n),Co(t,n)}function d(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;e>r;r++)n[r-1]=arguments[r];t=l(t,n),Fo[t]||(Fo[t]=!0,Co(t,n))}function m(){Av.DEBUG&&f.apply(null,arguments)}function v(){Av.DEBUG&&d.apply(null,arguments)}function g(t,e,n){var r=b(t,e,n);return r?r[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function w(t){var e,n,r,i,a,o;for(e=t.split("."),(n=Bo[e.length])||(n=x(e.length)),a=[],r=function(t,n){return t?"*":e[n]},i=n.length;i--;)o=n[i].map(r).join("."),a.hasOwnProperty(o)||(a.push(o),a[o]=!0);return a}function x(t){var e,n,r,i,a,o,s,u,c="";if(!Bo[t]){for(r=[];c.length=a;a+=1){for(n=a.toString(2);n.lengtho;o++)u.push(i(n[o]));r[a]=u}Bo[t]=r}return Bo[t]}function _(t,e,n,r){var i=t[e];if(!i||!i.equalsOrStartsWith(r)&&i.equalsOrStartsWith(n))return t[e]=i?i.replace(n,r):r,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&u(e)?+e:e}function E(t){return null==t?t:(Wo.hasOwnProperty(t)||(Wo[t]=new Ho(t)),Wo[t])}function T(t,e){function n(e,n){var r,i,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(r=t.viewmodel.wrapped[n.str],i=r?r.get():t.viewmodel.get(n),o=i?Object.keys(i):null),o&&o.forEach(function(t){"_ractive"===t&&a(i)||e.push(n.join(t))}),e}var r,i,o;for(r=e.str.split("."),o=[Go];i=r.shift();)"*"===i?o=o.reduce(n,[]):o[0]===Go?o[0]=E(i):o=o.map(C(i));return o}function C(t){return function(e){return e.join(t)}}function O(t){return t?t.replace(qo,".$1"):""}function S(t,e,n){if("string"!=typeof e||!u(n))throw Error("Bad arguments");var r=void 0,i=void 0;if(/\*/.test(e))return i={},T(t,E(O(e))).forEach(function(e){var r=t.viewmodel.get(e);if(!u(r))throw Error(Qo);i[e.str]=r+n}),t.set(i);if(r=t.get(e),!u(r))throw Error(Qo);return t.set(e,+r+n)}function A(t,e){return Ko(this,t,void 0===e?1:+e)}function P(t){this.event=t,this.method="on"+t,this.deprecate=ts[t]}function j(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function F(t,e){for(var n=0,r=t.length;r>n;n++)if(t[n]==e)return!0;return!1}function N(t,e){var n;if(!a(t)||!a(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function M(t){return"string"==typeof t?[t]:void 0===t?[]:t}function R(t){return t[t.length-1]}function L(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function I(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function D(t){setTimeout(t,0)}function U(t,e){return function(){for(var n;n=t.shift();)n(e)}}function V(t,e,n,r){var i;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof es)e.then(n,r);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{i=e.then}catch(a){return void r(a)}if("function"==typeof i){var o,s,u;s=function(e){o||(o=!0,V(t,e,n,r))},u=function(t){o||(o=!0,r(t))};try{i.call(e,s,u)}catch(a){if(!o)return r(a),void(o=!0)}}else n(e)}}function B(t,e,n){var r;return e=O(e),"~/"===e.substr(0,2)?(r=E(e.substring(2)),W(t,r.firstKey,n)):"."===e[0]?(r=q(ss(n),e),r&&W(t,r.firstKey,n)):r=z(t,E(e),n),r}function q(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return E(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),E(n.join("."))}return E(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function z(t,e,n,r){var i,a,o,s,u;if(e.isRoot)return e;for(a=e.firstKey;n;)if(i=n.context,n=n.parent,i&&(s=!0,o=t.viewmodel.get(i),o&&("object"==typeof o||"function"==typeof o)&&a in o))return i.join(e.str);return H(t.viewmodel,a)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,a=E(a),u=z(t.parent,a,n,!0))?(t.viewmodel.map(a,{origin:t.parent.viewmodel,keypath:u}),e):r||s?void 0:(t.viewmodel.set(e,void 0),e)}function W(t,e){var n;!t.parent||t.isolated||H(t.viewmodel,e)||(e=E(e),(n=z(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function H(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function $(t){t.teardown()}function G(t){t.unbind()}function K(t){t.unrender()}function Q(t){t.cancel()}function Y(t){t.detach()}function Z(t){t.detachNodes()}function J(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function X(){for(var t,e,n;ls.ractives.length;)e=ls.ractives.pop(),n=e.viewmodel.applyChanges(),n&&ds.fire(e,n);for(tt(),t=0;t=0;a--)i=t._subs[e[a]],i&&(s=gt(t,i,n,r)&&s);if(Vs.dequeue(t),t.parent&&s){if(o&&t.component){var u=t.component.name+"."+e[e.length-1];e=E(u).wildcardMatches(),n&&(n.component=t)}vt(t.parent,e,n,r)}}function gt(t,e,n,r){var i=null,a=!1;n&&!n._noArg&&(r=[n].concat(r)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,r)===!1&&(a=!0);return n&&!n._noArg&&a&&(i=n.original)&&(i.preventDefault&&i.preventDefault(),i.stopPropagation&&i.stopPropagation()),!a}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};Bs(this,t,e)}function yt(t){var e;return t=E(O(t)),e=this.viewmodel.get(t,Ws),void 0===e&&this.parent&&!this.isolated&&us(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function wt(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,xt(this)}function xt(t){$s.fire(t),t.findAllComponents("*").forEach(function(t){xt(t.instance)})}function _t(t,e,n){var r,i;return t=E(O(t)),r=this.viewmodel.get(t),a(r)&&a(e)?(i=ms.start(this,!0),this.viewmodel.merge(t,r,e,n),ms.end(),i):this.set(t,e,n&&n.complete)}function kt(t,e){var n,r;return n=T(t,e),r={},n.forEach(function(e){r[e.str]=t.get(e.str)}),r}function Et(t,e,n,r){var i,a,o;e=E(O(e)),r=r||su,e.isPattern?(i=new au(t,e,n,r),t.viewmodel.patternObservers.push(i),a=!0):i=new Ys(t,e,n,r),i.init(r.init),t.viewmodel.register(e,i,a?"patternObservers":"observers"),i.ready=!0;var s={cancel:function(){var n;o||(a?(n=t.viewmodel.patternObservers.indexOf(i),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,i,"patternObservers")):t.viewmodel.unregister(e,i,"observers"),o=!0)}};return t._observers.push(s),s}function Tt(t,e,n){var r,i,a,o;if(c(t)){n=e,i=t,r=[];for(t in i)i.hasOwnProperty(t)&&(e=i[t],r.push(this.observe(t,e,n)));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",ou(this,t,e,n);if(a=t.split(" "),1===a.length)return ou(this,t,e,n);for(r=[],o=a.length;o--;)t=a[o],t&&r.push(ou(this,t,e,n));return{cancel:function(){for(;r.length;)r.pop().cancel()}}}function Ct(t,e,n){var r=this.observe(t,function(){e.apply(this,arguments),r.cancel()},{init:!1,defer:n&&n.defer});return r}function Ot(t,e){var n,r=this;if(t)n=t.split(" ").map(lu).filter(pu),n.forEach(function(t){var n,i;(n=r._subs[t])&&(e?(i=n.indexOf(e),-1!==i&&n.splice(i,1)):r._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function St(t,e){var n,r,i,a=this;if("object"==typeof t){n=[];for(r in t)t.hasOwnProperty(r)&&n.push(this.on(r,t[r]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return i=t.split(" ").map(lu).filter(pu),i.forEach(function(t){(a._subs[t]||(a._subs[t]=[])).push(e)}),{cancel:function(){return a.off(t,e)}}}function At(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Pt(t,e,n){var r,i,a,o,s,u,c=[];if(r=jt(t,e,n),!r)return null;for(i=t.length,s=r.length-2-r[1],a=Math.min(i,r[0]),o=a+r[1],u=0;a>u;u+=1)c.push(u);for(;o>u;u+=1)c.push(-1);for(;i>u;u+=1)c.push(u+s);return 0!==s?c.touchedFrom=r[0]:c.touchedFrom=t.length,c}function jt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Ft(e,n){var r,i,a,o=this;if(a=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),r=ms.start(this,!0),ms.scheduleTask(function(){return Su.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&Nt(s),e.innerHTML=""}return this.cssId&&Cu.apply(),e&&((i=e.__ractive_instances__)?i.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),ms.end(),this.transitionsEnabled=a,r.then(function(){return Au.fire(o)})}function Nt(t){t.splice(0,t.length).forEach($)}function Mt(t,e){for(var n=t.slice(),r=e.length;r--;)~n.indexOf(e[r])||n.push(e[r]);return n}function Rt(t,e){var n,r,i;return r='[data-ractive-css~="{'+e+'}"]',i=function(t){var e,n,i,a,o,s,u,c=[];for(e=[];n=Ru.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(a=e.map(It),u=e.length;u--;)s=a.slice(),i=e[u],s[u]=i.base+r+i.modifiers||"",o=a.slice(),o[u]=r+" "+o[u],c.push(s.join(" "),o.join(" "));return c.join(", ")},n=Iu.test(t)?t.replace(Iu,r):t.replace(Mu,"").replace(Nu,function(t,e){var n,r;return Lu.test(e)?t:(n=e.split(",").map(Lt),r=n.map(i).join(", ")+" ",t.replace(e,r))})}function Lt(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function It(t){return t.str}function Dt(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?p("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Ut(t,e){Dt(e);var n="function"==typeof t,r="function"==typeof e;return e||n||(e={}),n||r?function(){var i=r?Vt(e,this):e,a=n?Vt(t,this):t;return Bt(i,a)}:Bt(e,t)}function Vt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&p("Data function must return an object"),n.constructor!==Object&&v("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Bt(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function qt(t){var e=wo(Hu);return e.parse=function(e,n){return zt(e,n||t)},e}function zt(t,e){if(!zu)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return zu(t,e||this.options)}function Wt(t,e){var n;if(!Ja){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Ht(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a - -
    -
    - {{yield}} -
    diff --git a/tgui/scripts/components/button.ract b/tgui/scripts/components/button.ract deleted file mode 100644 index 80e0551d72d..00000000000 --- a/tgui/scripts/components/button.ract +++ /dev/null @@ -1,37 +0,0 @@ - - - - {{#if icon}} - - {{/if}} - {{yield}} - diff --git a/tgui/scripts/components/resize.ract b/tgui/scripts/components/resize.ract deleted file mode 100644 index 1968034699b..00000000000 --- a/tgui/scripts/components/resize.ract +++ /dev/null @@ -1,12 +0,0 @@ - - -{{#if config.fancy}} -
    -{{/if}} diff --git a/tgui/scripts/components/titlebar.ract b/tgui/scripts/components/titlebar.ract deleted file mode 100644 index b5ec50a5b1f..00000000000 --- a/tgui/scripts/components/titlebar.ract +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - - {{yield}} - {{#if config.fancy}} - - - {{/if}} -
    diff --git a/tgui/scripts/components/warnings.ract b/tgui/scripts/components/warnings.ract deleted file mode 100644 index ae6bf9aa27e..00000000000 --- a/tgui/scripts/components/warnings.ract +++ /dev/null @@ -1,33 +0,0 @@ - - - -{{#if config.fancy && ie && ie <= 8}} - - You have an old (<= 8) version of Internet Explorer installed. Please upgrade to the latest available version of IE.
    - To upgrade, please click 'Check For Upgrades' below to download the latest available version from Microsoft.
    - Otherwise, if you are unable (XP/Wine) or unwilling to upgrade past IE8, please click 'No Frills' below to disable incompatible features (and this message). -
    - Check For Upgrades - No Frills - Debug Info - {{#if debug}} -
    - Detected: IE{{ie}}
    - User Agent: {{userAgent}} - {{/if}} -
    -{{/if}} diff --git a/tgui/scripts/constants.coffee b/tgui/scripts/constants.coffee deleted file mode 100644 index 1457071dabe..00000000000 --- a/tgui/scripts/constants.coffee +++ /dev/null @@ -1,6 +0,0 @@ -# Constants used in tgui; these are mirrored from the BYOND code. -module.exports = - UI_INTERACTIVE: 2 - UI_UPDATE: 1 - UI_DISABLED: 0 - UI_CLOSE: -1 diff --git a/tgui/scripts/dragresize.coffee b/tgui/scripts/dragresize.coffee deleted file mode 100644 index 321090078c6..00000000000 --- a/tgui/scripts/dragresize.coffee +++ /dev/null @@ -1,39 +0,0 @@ -byond = require "./byond" - - -module.exports = - drag: (ractive, event) -> - event.preventDefault() - lock = (x, y) -> - if x < 0 # Left - x = 0 - if y < 0 # Top - y = 0 - if x + window.innerWidth > screen.availWidth # Right - x = screen.availWidth - window.innerWidth - if y + window.innerHeight > screen.availHeight # Bottom - y = screen.availHeight - window.innerHeight - {x: x, y: y} - - if ractive.get "x" - x = (event.screenX - ractive.get "x") + window.screenLeft - y = (event.screenY - ractive.get "y") + window.screenTop - if ractive.get "config.locked" then {x, y} = lock x, y # Lock to primary monitor. - - byond.winset ractive.get("config.window"), "pos", "#{x},#{y}" - ractive.set x: event.screenX, y: event.screenY - - resize: (ractive, event) -> - event.preventDefault() - sane = (x, y) -> - x = Math.clamp x, 100, screen.width - y = Math.clamp y, 100, screen.height - {x: x, y: y} - - if ractive.get "x" - x = (event.screenX - ractive.get "x") + window.innerWidth - y = (event.screenY - ractive.get "y") + window.innerHeight - {x, y} = sane x, y - - byond.winset ractive.get("config.window"), "size", "#{x},#{y}" - ractive.set x: event.screenX, y: event.screenY diff --git a/tgui/scripts/interfaces/atmos_filter.ract b/tgui/scripts/interfaces/atmos_filter.ract deleted file mode 100644 index 420e239a229..00000000000 --- a/tgui/scripts/interfaces/atmos_filter.ract +++ /dev/null @@ -1,25 +0,0 @@ - - - {{data.on ? "On" : "Off"}} - - - Set - Max - {{Math.round(adata.set_pressure)}} kPa - - - Nothing - Plasma - O2 - N2 - CO2 - N2O - - diff --git a/tgui/scripts/main.coffee b/tgui/scripts/main.coffee deleted file mode 100644 index 5a310a29eca..00000000000 --- a/tgui/scripts/main.coffee +++ /dev/null @@ -1,32 +0,0 @@ -require "ie8" -require "dom4" -require "es5-shim" -require "html5shiv" -require "./math" - - -Ractive = require "ractive" -Ractive.DEBUG = /minified/.test (minified) -> # Set Ractive debug mode based on if we're minified or not. - -WebFont = require "webfontloader" -WebFont.load # Load FontAwesome asynchronously from CDNJS. - custom: - families: ["FontAwesome"] - urls: ["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css"] - testStrings: - FontAwesome: "\uf240" - -tgui = require "./tgui.ract" -window.initialize = (dataString) -> # So we can get data inline or from the server. - return if window.tgui # Just incase we get called again; only do this once. - window.tgui = new tgui # Create the UI; this is just a Ractive component. - el: "#container" # Attach the UI to the existing container div. - data: -> data = JSON.parse dataString # Load initial data from the server. - -holder = document.getElementById "data" -if holder.textContent != "{}" # If the JSON was inlined, load it. - window.initialize(holder.textContent) -else - byond = require "./byond" - byond.act holder.getAttribute("data-ref"), "tgui:initialize" - holder.remove() diff --git a/tgui/scripts/math.coffee b/tgui/scripts/math.coffee deleted file mode 100644 index 7bb7000110c..00000000000 --- a/tgui/scripts/math.coffee +++ /dev/null @@ -1,9 +0,0 @@ -# Extensions to the built-in 'Math' object. - -# Helper to limit a number to be inside 'min' and 'max'. -Math.clamp = (number, min, max) -> - Math.max min, Math.min number, max - -# Helper to round a number to 'decimals' decimals. -Math.fixed = (number, decimals = 1) -> - Number Math.round(number + "e" + decimals) + "e-" + decimals diff --git a/tgui/scripts/text.coffee b/tgui/scripts/text.coffee deleted file mode 100644 index cb41507316f..00000000000 --- a/tgui/scripts/text.coffee +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = - upperCaseFirst: (str) -> - str[0].toUpperCase() + str[1..].toLowerCase() - titleCase: (str) -> - str.replace /\w\S*/g, @upperCaseFirst diff --git a/tgui/scripts/tgui.ract b/tgui/scripts/tgui.ract deleted file mode 100644 index 9871625ffe3..00000000000 --- a/tgui/scripts/tgui.ract +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - -{{{config.title}}} -
    - - -
    - diff --git a/tgui/src/.babelrc b/tgui/src/.babelrc new file mode 100644 index 00000000000..f51992c9361 --- /dev/null +++ b/tgui/src/.babelrc @@ -0,0 +1,8 @@ +{ + "presets": [ + "es2015-loose" + ], + "plugins": [ + "external-helpers" + ] +} diff --git a/tgui/src/components/bar.ract b/tgui/src/components/bar.ract new file mode 100644 index 00000000000..f4d18125efb --- /dev/null +++ b/tgui/src/components/bar.ract @@ -0,0 +1,16 @@ + + +
    +
    + {{yield}} +
    diff --git a/tgui/styles/components/bar.styl b/tgui/src/components/bar.styl similarity index 50% rename from tgui/styles/components/bar.styl rename to tgui/src/components/bar.styl index d2bae9d82f7..e34c8fdb2af 100644 --- a/tgui/styles/components/bar.styl +++ b/tgui/src/components/bar.styl @@ -7,8 +7,8 @@ line-height: 17px padding: 1px - border: 1px solid colors.bar.border - background: colors.bar.background + border: 1px solid bar-color-border + background: bar-color-background .barText @extend $fontReset @@ -21,8 +21,10 @@ height: 100% transition: background-color 1s - background-color: colors.normal - &.good { background-color: colors.good } - &.average { background-color: colors.average } - &.bad { background-color: colors.bad } - &.highlight { background-color: colors.highlight } + background-color: bar-color-normal + &.good + background-color: bar-color-good + &.average + background-color: bar-color-average + &.bad + background-color: bar-color-bad diff --git a/tgui/src/components/button.ract b/tgui/src/components/button.ract new file mode 100644 index 00000000000..b2ce8d537cd --- /dev/null +++ b/tgui/src/components/button.ract @@ -0,0 +1,50 @@ + + + + {{#if icon}} + + {{/if}} + {{yield}} + diff --git a/tgui/styles/components/button.styl b/tgui/src/components/button.styl similarity index 60% rename from tgui/styles/components/button.styl rename to tgui/src/components/button.styl index a396ae1cf88..27c0521cc71 100644 --- a/tgui/styles/components/button.styl +++ b/tgui/src/components/button.styl @@ -5,7 +5,7 @@ buttoncolor(selector, color) &.{selector}.active:hover, &.{selector}.active:focus transition: background-color 0.25s - background-color: lighten(color, colors.buttons.hover) + background-color: lighten(color, button-lighten-hover) outline: 0 @@ -21,11 +21,11 @@ span.button .fa padding-right: 2px - buttoncolor(normal, colors.buttons.normal) - buttoncolor(disabled, colors.buttons.disabled) - buttoncolor(selected, colors.buttons.selected) - buttoncolor(caution, colors.buttons.caution) - buttoncolor(danger, colors.buttons.danger) + buttoncolor(normal, button-color-normal) + buttoncolor(disabled, button-color-disabled) + buttoncolor(selected, button-color-selected) + buttoncolor(caution, button-color-caution) + buttoncolor(danger, button-color-danger) &.gridable width: 125px diff --git a/tgui/scripts/components/display.ract b/tgui/src/components/display.ract similarity index 94% rename from tgui/scripts/components/display.ract rename to tgui/src/components/display.ract index 176c1781717..2b37a0235db 100644 --- a/tgui/scripts/components/display.ract +++ b/tgui/src/components/display.ract @@ -1,13 +1,13 @@ -
    - {{#if title}} -
    -

    {{title}}

    - {{#if button}} -
    {{yield button}}
    - {{/if}} -
    - {{/if}} -
    - {{yield}} -
    -
    +
    + {{#if title}} +
    +

    {{title}}

    + {{#if button}} +
    {{yield button}}
    + {{/if}} +
    + {{/if}} +
    + {{yield}} +
    +
    diff --git a/tgui/styles/components/display.styl b/tgui/src/components/display.styl similarity index 60% rename from tgui/styles/components/display.styl rename to tgui/src/components/display.styl index dbae05996d1..5c3fb1d4da5 100644 --- a/tgui/styles/components/display.styl +++ b/tgui/src/components/display.styl @@ -1,26 +1,28 @@ -div.display - width: 100% - padding: 4px - margin: 6px 0 - - background-color: colors.display.background // Transparent background. - box-shadow: inset 0 0 5px colors.display.shadow - - header - display: block - position: relative - width: 100% - padding: 0 4px - margin-bottom: 6px - - border-bottom: 2px solid colors.rule.normal - - .buttonRight - position: absolute - bottom: 6px - right: 4px - - article - display: table - width: 100% - border-spacing: 4px 6px +div.display + width: 100% + padding: 4px + margin: 6px 0 + + background-color: display-color-background // Transparent background. + box-shadow: inset 0 0 5px display-color-shadow + + header + display: block + position: relative + width: 100% + padding: 0 4px + margin-bottom: 6px + + color: display-color-title + + border-bottom: rule-size solid rule-color-normal + + .buttonRight + position: absolute + bottom: 6px + right: 4px + + article + display: table + width: 100% + border-spacing: 4px 6px diff --git a/tgui/scripts/components/notice.ract b/tgui/src/components/notice.ract similarity index 93% rename from tgui/scripts/components/notice.ract rename to tgui/src/components/notice.ract index f6c063596d8..c23c27b1222 100644 --- a/tgui/scripts/components/notice.ract +++ b/tgui/src/components/notice.ract @@ -1,3 +1,3 @@ -
    - {{yield}} -
    +
    + {{yield}} +
    diff --git a/tgui/src/components/notice.styl b/tgui/src/components/notice.styl new file mode 100644 index 00000000000..829d4c59112 --- /dev/null +++ b/tgui/src/components/notice.styl @@ -0,0 +1,27 @@ +div.notice + margin: 8px 0 + padding: 4px + + box-shadow: none + + color: text-color-inverse + font-weight: bold + font-style: italic + + background-color: notice-color-first + background-image: repeating-linear-gradient( + -45deg, + notice-color-first, + notice-color-first 10px, + notice-color-second 10px, + notice-color-second 20px + ) + + .button + outline: 1px solid notice-color-border + + .label + color: text-color-inverse + + hr + background-color: rule-color-dark diff --git a/tgui/src/components/resize.ract b/tgui/src/components/resize.ract new file mode 100644 index 00000000000..50f6ac5e39d --- /dev/null +++ b/tgui/src/components/resize.ract @@ -0,0 +1,15 @@ + + +{{#if config.fancy}} +
    +{{/if}} diff --git a/tgui/styles/components/resize.styl b/tgui/src/components/resize.styl similarity index 65% rename from tgui/styles/components/resize.styl rename to tgui/src/components/resize.styl index 482b0db0de9..f5f5fe37aac 100644 --- a/tgui/styles/components/resize.styl +++ b/tgui/src/components/resize.styl @@ -1,12 +1,12 @@ -div.resize - position: fixed - bottom: 0 - right: 0 - width: 0 - height: 0 - - border-style: solid; - border-width: 0 0 45px 45px; - border-color: transparent transparent colors.resize.border transparent - - transform: rotate(360deg) +div.resize + position: fixed + bottom: 0 + right: 0 + width: 0 + height: 0 + + border-style: solid; + border-width: 0 0 45px 45px; + border-color: transparent transparent resize-color transparent + + transform: rotate(360deg) diff --git a/tgui/scripts/components/section.ract b/tgui/src/components/section.ract similarity index 94% rename from tgui/scripts/components/section.ract rename to tgui/src/components/section.ract index bcdd3e0e6e8..124da4b8865 100644 --- a/tgui/scripts/components/section.ract +++ b/tgui/src/components/section.ract @@ -1,14 +1,14 @@ -
    - {{#if label}} - {{label}}: - {{#if nowrap}} - {{yield}} - {{else}} -
    - {{yield}} -
    - {{/if}} - {{else}} - {{yield}} - {{/if}} -
    +
    + {{#if label}} + {{label}}: + {{#if nowrap}} + {{yield}} + {{else}} +
    + {{yield}} +
    + {{/if}} + {{else}} + {{yield}} + {{/if}} +
    diff --git a/tgui/styles/components/section.styl b/tgui/src/components/section.styl similarity index 81% rename from tgui/styles/components/section.styl rename to tgui/src/components/section.styl index 4cf55f5db7c..e122d48110f 100644 --- a/tgui/styles/components/section.styl +++ b/tgui/src/components/section.styl @@ -1,33 +1,33 @@ -$cell - display: table-cell - margin: 0 - text-align: left - vertical-align: middle - -section - display: table-row - width: 100% - padding: 3px 0 - - &:not(first-child) - padding-top: 4px - - .label - @extend $cell - width: 1% - padding-right: 32px - white-space: nowrap - - color: colors.section.label - - .content - @extend $cell - &:not(:last-child) - padding-right: 16px - - .line - @extend $cell - width: 100% - - .buttoninfo - margin-left: 5px +/$cell + display: table-cell + margin: 0 + text-align: left + vertical-align: middle + +section + display: table-row + width: 100% + padding: 3px 0 + + &:not(:first-child) + padding-top: 4px + + .label + @extend $cell + width: 1% + padding-right: 32px + white-space: nowrap + + color: section-color-label + + .content + @extend $cell + &:not(:last-child) + padding-right: 16px + + .line + @extend $cell + width: 100% + + .buttoninfo + margin-left: 5px diff --git a/tgui/scripts/components/subdisplay.ract b/tgui/src/components/subdisplay.ract similarity index 94% rename from tgui/scripts/components/subdisplay.ract rename to tgui/src/components/subdisplay.ract index 108cdc933b3..8d6cd641f95 100644 --- a/tgui/scripts/components/subdisplay.ract +++ b/tgui/src/components/subdisplay.ract @@ -1,11 +1,11 @@ -
    - {{#if title}} -
    -

    {{title}}

    - {{#if button}}{{yield button}}{{/if}} -
    - {{/if}} -
    - {{yield}} -
    -
    +
    + {{#if title}} +
    +

    {{title}}

    + {{#if button}}{{yield button}}{{/if}} +
    + {{/if}} +
    + {{yield}} +
    +
    diff --git a/tgui/src/components/subdisplay.styl b/tgui/src/components/subdisplay.styl new file mode 100644 index 00000000000..11420ecba7c --- /dev/null +++ b/tgui/src/components/subdisplay.styl @@ -0,0 +1,11 @@ +context = selector() + +div.subdisplay + width: 100% + margin: 0 + + header + @extend {context} div.display header + + article + @extend {context} div.display article diff --git a/tgui/src/components/titlebar.ract b/tgui/src/components/titlebar.ract new file mode 100644 index 00000000000..56690c22cb4 --- /dev/null +++ b/tgui/src/components/titlebar.ract @@ -0,0 +1,41 @@ + + +
    + + {{yield}} + {{#if config.fancy}} + + + {{/if}} +
    diff --git a/tgui/styles/components/titlebar.styl b/tgui/src/components/titlebar.styl similarity index 63% rename from tgui/styles/components/titlebar.styl rename to tgui/src/components/titlebar.styl index 312977c94bb..4867faef25d 100644 --- a/tgui/styles/components/titlebar.styl +++ b/tgui/src/components/titlebar.styl @@ -1,52 +1,57 @@ -$titleButton - display: inline-block - position: relative - padding: 7px // To make a bigger clickable area. - margin: -7px - - color: colors.text.title; - - &:hover - color: lighten(colors.text.title, colors.buttons.hover) - -header.titlebar - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 32px; - - background-color: colors.titlebar.background - box-shadow: 0 3px 3px colors.titlebar.shadow - - .statusicon - position: absolute - top: 4px - left: 12px - transition: color 0.5s - - .title - position: absolute - top: 6px - left: 46px - - color: colors.text.title - font-size: 16px - white-space: nowrap - - .minimize - @extend $titleButton - position: absolute - top: 6px - right: 46px - .close - @extend $titleButton - position: absolute - top: 4px - right: 12px - -.wf-inactive - .minimize::after - content: "-" - .close::after - content: "X" +context = selector() + +$titleButton + display: inline-block + position: relative + padding: 7px // To make a bigger clickable area. + margin: -7px + + color: titlebar-color-button; + + &:hover + color: lighten(titlebar-color-button, button-lighten-hover) + +header.titlebar + position: fixed; + z-index: 1 + top: 0; + left: 0; + width: 100%; + height: 32px; + + background-color: titlebar-color-background + box-shadow: 0 3px 3px titlebar-color-shadow + + .statusicon + position: absolute + top: 4px + left: 12px + transition: color 0.5s + + .title + position: absolute + top: 6px + left: 46px + + color: titlebar-color-text + font-size: 16px + white-space: nowrap + + .minimize + @extend {context} $titleButton + position: absolute + top: 6px + right: 46px + .close + @extend {context} $titleButton + position: absolute + top: 4px + right: 12px + +.wf-inactive + .statusicon::after + content: "O" + .minimize::after + content: "-" + .close::after + content: "X" diff --git a/tgui/src/components/warnings.ract b/tgui/src/components/warnings.ract new file mode 100644 index 00000000000..2e5695e535f --- /dev/null +++ b/tgui/src/components/warnings.ract @@ -0,0 +1,47 @@ + + + +{{#if config.fancy && ie && ie < 11}} + + You have an old (IE{{ie}}), end-of-life (click 'EOL Info' for more information) version of Internet Explorer installed.
    + To upgrade, click 'Upgrade IE' to download IE11 from Microsoft.
    + If you are unable to upgrade directly, click 'IE VMs' to download a VM with IE11 or Edge from Microsoft.
    + Otherwise, click 'No Frills' below to disable potentially incompatible features (and this message). +
    + No Frills + + Upgrade IE + + IE VMs + + EOL Info + Debug Info + {{#if debug}} +
    + Detected: IE{{ie}}
    + User Agent: {{userAgent}} + {{/if}} +
    +{{/if}} diff --git a/tgui/images/nanotrasen.svg b/tgui/src/images/nanotrasen.svg similarity index 100% rename from tgui/images/nanotrasen.svg rename to tgui/src/images/nanotrasen.svg diff --git a/tgui/images/syndicate.svg b/tgui/src/images/syndicate.svg similarity index 100% rename from tgui/images/syndicate.svg rename to tgui/src/images/syndicate.svg diff --git a/tgui/scripts/interfaces/air_alarm.ract b/tgui/src/interfaces/air_alarm.ract similarity index 96% rename from tgui/scripts/interfaces/air_alarm.ract rename to tgui/src/interfaces/air_alarm.ract index c9928ea3ef4..0267ad8141c 100644 --- a/tgui/scripts/interfaces/air_alarm.ract +++ b/tgui/src/interfaces/air_alarm.ract @@ -1,30 +1,30 @@ - - - - - - - - - {{#if data.siliconUser}} - - {{data.locked ? "Engaged" : "Disengaged"}} - - {{else}} - Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. - {{/if}} - - -{{#if !data.locked || data.siliconUser}} - {{#if data.screen == 1}} - - {{elseif data.screen == 2}} - - {{elseif data.screen == 3}} - - {{elseif data.screen == 4}} - - {{elseif data.screen == 5}} - - {{/if}} -{{/if}} + + + + + + + + + {{#if data.siliconUser}} + + {{data.locked ? "Engaged" : "Disengaged"}} + + {{else}} + Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. + {{/if}} + + +{{#if !data.locked || data.siliconUser}} + {{#if data.screen == 1}} + + {{elseif data.screen == 2}} + + {{elseif data.screen == 3}} + + {{elseif data.screen == 4}} + + {{elseif data.screen == 5}} + + {{/if}} +{{/if}} diff --git a/tgui/scripts/interfaces/air_alarm/back.ract b/tgui/src/interfaces/air_alarm/back.ract similarity index 98% rename from tgui/scripts/interfaces/air_alarm/back.ract rename to tgui/src/interfaces/air_alarm/back.ract index cb0db0f5c20..a76d2a47527 100644 --- a/tgui/scripts/interfaces/air_alarm/back.ract +++ b/tgui/src/interfaces/air_alarm/back.ract @@ -1 +1 @@ -Back +Back diff --git a/tgui/scripts/interfaces/air_alarm/controls.ract b/tgui/src/interfaces/air_alarm/controls.ract similarity index 97% rename from tgui/scripts/interfaces/air_alarm/controls.ract rename to tgui/src/interfaces/air_alarm/controls.ract index bd9ae86d908..ec2541e4f1d 100644 --- a/tgui/scripts/interfaces/air_alarm/controls.ract +++ b/tgui/src/interfaces/air_alarm/controls.ract @@ -1,23 +1,23 @@ - - - Area Atmosphere Alarm - - - Panic Siphon - -
    - - Vent Controls - - - Scrubber Controls - - - Operating Mode - - - Alarm Thresholds - -
    + + + Area Atmosphere Alarm + + + Panic Siphon + +
    + + Vent Controls + + + Scrubber Controls + + + Operating Mode + + + Alarm Thresholds + +
    diff --git a/tgui/scripts/interfaces/air_alarm/modes.ract b/tgui/src/interfaces/air_alarm/modes.ract similarity index 96% rename from tgui/scripts/interfaces/air_alarm/modes.ract rename to tgui/src/interfaces/air_alarm/modes.ract index cca50a7f730..4db7e6663ac 100644 --- a/tgui/scripts/interfaces/air_alarm/modes.ract +++ b/tgui/src/interfaces/air_alarm/modes.ract @@ -1,14 +1,14 @@ - - - - {{#partial button}} - - {{/partial}} - {{#each data.modes}} - - {{name}} - - {{/each}} - + + + + {{#partial button}} + + {{/partial}} + {{#each data.modes}} + + {{name}} + + {{/each}} + diff --git a/tgui/scripts/interfaces/air_alarm/scrubbers.ract b/tgui/src/interfaces/air_alarm/scrubbers.ract similarity index 98% rename from tgui/scripts/interfaces/air_alarm/scrubbers.ract rename to tgui/src/interfaces/air_alarm/scrubbers.ract index 7b561723192..15fc8e00592 100644 --- a/tgui/scripts/interfaces/air_alarm/scrubbers.ract +++ b/tgui/src/interfaces/air_alarm/scrubbers.ract @@ -1,33 +1,33 @@ - - - - {{#partial button}} - - {{/partial}} - {{#each data.scrubbers}} - - - {{power ? "On" : "Off"}} - - - {{scrubbing ? "Scrubbing" : "Siphoning"}} - - - {{widenet ? "Expanded" : "Normal"}} - - - CO2 - N2O - Plasma - - - {{else}} - Error: No scrubbers connected. - {{/each}} - + + + + {{#partial button}} + + {{/partial}} + {{#each data.scrubbers}} + + + {{power ? "On" : "Off"}} + + + {{scrubbing ? "Scrubbing" : "Siphoning"}} + + + {{widenet ? "Expanded" : "Normal"}} + + + CO2 + N2O + Plasma + + + {{else}} + Error: No scrubbers connected. + {{/each}} + diff --git a/tgui/scripts/interfaces/air_alarm/status.ract b/tgui/src/interfaces/air_alarm/status.ract similarity index 97% rename from tgui/scripts/interfaces/air_alarm/status.ract rename to tgui/src/interfaces/air_alarm/status.ract index 767e6d3c7d1..72e2319cc1b 100644 --- a/tgui/scripts/interfaces/air_alarm/status.ract +++ b/tgui/src/interfaces/air_alarm/status.ract @@ -1,30 +1,30 @@ - - {{#if data.environment_data}} - {{#each adata.environment_data}} - - - {{Math.fixed(value, 2)}}{{unit}} - - - {{/each}} - - - {{data.danger_level == 2 ? "Danger (Internals Required)" : data.danger_level == 1 ? "Caution" : "Optimal"}} - - - - - {{data.atmos_alarm ? "Atmosphere Alarm" : fire_alarm ? "Fire Alarm" : "Nominal"}} - - - {{else}} - - Cannot obtain air sample for analysis. - - {{/if}} - {{#if data.emagged}} - - Safety measures offline. Device may exhibit abnormal behavior. - - {{/if}} - + + {{#if data.environment_data}} + {{#each adata.environment_data}} + + + {{Math.fixed(value, 2)}}{{unit}} + + + {{/each}} + + + {{data.danger_level == 2 ? "Danger (Internals Required)" : data.danger_level == 1 ? "Caution" : "Optimal"}} + + + + + {{data.atmos_alarm ? "Atmosphere Alarm" : fire_alarm ? "Fire Alarm" : "Nominal"}} + + + {{else}} + + Cannot obtain air sample for analysis. + + {{/if}} + {{#if data.emagged}} + + Safety measures offline. Device may exhibit abnormal behavior. + + {{/if}} + diff --git a/tgui/scripts/interfaces/air_alarm/thresholds.ract b/tgui/src/interfaces/air_alarm/thresholds.ract similarity index 86% rename from tgui/scripts/interfaces/air_alarm/thresholds.ract rename to tgui/src/interfaces/air_alarm/thresholds.ract index a524e84ae27..4f3841405af 100644 --- a/tgui/scripts/interfaces/air_alarm/thresholds.ract +++ b/tgui/src/interfaces/air_alarm/thresholds.ract @@ -1,30 +1,31 @@ - - - - {{#partial button}} - - {{/partial}} - - - - - - - - - - {{#each data.thresholds}} - - {{#each settings}}{{/each}} - {{/each}} - -
    min2min1max1max2
    {{{name}}} - {{Math.fixed(selected, 2)}} -
    - - - + + + + {{#partial button}} + + {{/partial}} +
    + + + + + + + + + {{#each data.thresholds}} + + {{#each settings}}{{/each}} + {{/each}} + +
    min2min1max1max2
    {{{name}}} + {{Math.fixed(selected, 2)}} +
    + + + diff --git a/tgui/scripts/interfaces/air_alarm/vents.ract b/tgui/src/interfaces/air_alarm/vents.ract similarity index 97% rename from tgui/scripts/interfaces/air_alarm/vents.ract rename to tgui/src/interfaces/air_alarm/vents.ract index b88a79f9dd3..fca816a5b55 100644 --- a/tgui/scripts/interfaces/air_alarm/vents.ract +++ b/tgui/src/interfaces/air_alarm/vents.ract @@ -1,32 +1,32 @@ - - - - {{#partial button}} - - {{/partial}} - {{#each data.vents}} - - - {{power ? "On" : "Off"}} - - - {{direction == "release" ? "Pressurizing" : "Siphoning"}} - - - Internal - External - - - {{Math.fixed(external)}} - Reset - - - {{else}} - Error: No vents connected. - {{/each}} - + + + + {{#partial button}} + + {{/partial}} + {{#each data.vents}} + + + {{power ? "On" : "Off"}} + + + {{direction == "release" ? "Pressurizing" : "Siphoning"}} + + + Internal + External + + + {{Math.fixed(external)}} + Reset + + + {{else}} + Error: No vents connected. + {{/each}} + diff --git a/tgui/scripts/interfaces/airlock_electronics.ract b/tgui/src/interfaces/airlock_electronics.ract similarity index 78% rename from tgui/scripts/interfaces/airlock_electronics.ract rename to tgui/src/interfaces/airlock_electronics.ract index 8873d7de6be..29e1969d3a0 100644 --- a/tgui/scripts/interfaces/airlock_electronics.ract +++ b/tgui/src/interfaces/airlock_electronics.ract @@ -1,35 +1,39 @@ - - - {{data.oneAccess ? "One" : "All"}} Required - Clear - -
    -
    - - {{#each data.regions}} - - {{/each}} - - - {{#each data.regions}} - - {{/each}} - -
    {{name}}
    {{#each accesses}} - {{name}} -
    - {{/each}}
    -
    - - + + + {{data.oneAccess ? "One" : "All"}} Required + Clear + +
    + + + {{#each data.regions}} + + {{/each}} + + + {{#each data.regions}} + + {{/each}} + +
    {{name}}
    {{#each accesses}} + {{name}} +
    + {{/each}}
    +
    + + diff --git a/tgui/scripts/interfaces/apc.ract b/tgui/src/interfaces/apc.ract similarity index 78% rename from tgui/scripts/interfaces/apc.ract rename to tgui/src/interfaces/apc.ract index dc77d02e098..5f5c5caddc6 100644 --- a/tgui/scripts/interfaces/apc.ract +++ b/tgui/src/interfaces/apc.ract @@ -1,110 +1,125 @@ - - - - {{#if data.siliconUser}} - - {{data.locked ? "Engaged" : "Disengaged"}} - - {{else}} - Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. - {{/if}} - - - - {{#if data.locked && !data.siliconUser}} - {{data.isOperating ? "On" : "Off"}} - {{else}} - {{data.isOperating ? "On" : "Off"}} - {{/if}} - - - {{data.externalPower == 2 ? "Good" : data.externalPower == 1 ? "Low" : "None"}} - - - {{#if data.powerCellStatus != null}} - {{Math.fixed(adata.powerCellStatus)}}% - {{else}} - Power cell removed. - {{/if}} - - {{#if data.powerCellStatus != null}} - - {{#if data.locked && !data.siliconUser}} - {{data.chargeMode ? "Auto" : "Off"}} - {{else}} - {{data.chargeMode ? "Auto" : "Off"}} - {{/if}} -   - [{{data.chargingStatus == 2 ? "Fully Charged" : data.chargingStatus == 1 ? "Charging" : "Not Charging"}}] - - {{/if}} - - - {{#each data.powerChannels}} - -
    {{Math.round(adata.powerChannels[@index].powerLoad)}} W
    -
    {{status >= 2 ? "On" : "Off"}}
    -
    [{{status == 1 || status == 3 ? "Auto" : "Manual"}}]
    -
    - {{#if !data.locked || data.siliconUser}} - Auto - On - Off - {{/if}} -
    -
    - {{/each}} - - {{Math.round(adata.totalLoad)}} W - -
    -{{#if data.siliconUser}} - - Overload - {{#if data.malfStatus}} - {{malfButton}} - {{/if}} - -{{/if}} - - - {{#if data.locked && !data.siliconUser}} - {{data.coverLocked ? "Engaged" : "Disengaged"}} - {{else}} - {{data.coverLocked ? "Engaged" : "Disengaged"}} - {{/if}} - - + + + + {{#if data.siliconUser}} + + {{data.locked ? "Engaged" : "Disengaged"}} + + {{else}} + Swipe an ID card to {{data.locked ? "unlock" : "lock"}} this interface. + {{/if}} + + + + {{#if data.locked && !data.siliconUser}} + {{data.isOperating ? "On" : "Off"}} + {{else}} + {{data.isOperating ? "On" : "Off"}} + {{/if}} + + + {{data.externalPower == 2 ? "Good" : data.externalPower == 1 ? "Low" : "None"}} + + + {{#if data.powerCellStatus != null}} + {{Math.fixed(adata.powerCellStatus)}}% + {{else}} + Power cell removed. + {{/if}} + + {{#if data.powerCellStatus != null}} + + {{#if data.locked && !data.siliconUser}} + {{data.chargeMode ? "Auto" : "Off"}} + {{else}} + {{data.chargeMode ? "Auto" : "Off"}} + {{/if}} +   + [{{data.chargingStatus == 2 ? "Fully Charged" : data.chargingStatus == 1 ? "Charging" : "Not Charging"}}] + + {{/if}} + + + {{#each data.powerChannels}} + +
    {{Math.round(adata.powerChannels[@index].powerLoad)}} W
    +
    {{status >= 2 ? "On" : "Off"}}
    +
    [{{status == 1 || status == 3 ? "Auto" : "Manual"}}]
    +
    + {{#if !data.locked || data.siliconUser}} + Auto + On + Off + {{/if}} +
    +
    + {{/each}} + + {{Math.round(adata.totalLoad)}} W + +
    +{{#if data.siliconUser}} + + Overload + {{#if data.malfStatus}} + {{malfButton}} + {{/if}} + +{{/if}} + + + {{#if data.locked && !data.siliconUser}} + {{data.coverLocked ? "Engaged" : "Disengaged"}} + {{else}} + {{data.coverLocked ? "Engaged" : "Disengaged"}} + {{/if}} + + diff --git a/tgui/src/interfaces/atmos_filter.ract b/tgui/src/interfaces/atmos_filter.ract new file mode 100644 index 00000000000..d523edfc1e1 --- /dev/null +++ b/tgui/src/interfaces/atmos_filter.ract @@ -0,0 +1,25 @@ + + + {{data.on ? "On" : "Off"}} + + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + + Nothing + Plasma + O2 + N2 + CO2 + N2O + + diff --git a/tgui/scripts/interfaces/atmos_mixer.ract b/tgui/src/interfaces/atmos_mixer.ract similarity index 98% rename from tgui/scripts/interfaces/atmos_mixer.ract rename to tgui/src/interfaces/atmos_mixer.ract index 0212e7f4afb..0be39763745 100644 --- a/tgui/scripts/interfaces/atmos_mixer.ract +++ b/tgui/src/interfaces/atmos_mixer.ract @@ -1,33 +1,33 @@ - - - {{data.on ? "On" : "Off"}} - - - Set - Max - {{Math.round(adata.set_pressure)}} kPa - - - - - - - {{Math.round(adata.node1_concentration)}}% - - - - - - - {{Math.round(adata.node2_concentration)}}% - - + + + {{data.on ? "On" : "Off"}} + + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + + + + + + {{Math.round(adata.node1_concentration)}}% + + + + + + + {{Math.round(adata.node2_concentration)}}% + + diff --git a/tgui/scripts/interfaces/atmos_pump.ract b/tgui/src/interfaces/atmos_pump.ract similarity index 98% rename from tgui/scripts/interfaces/atmos_pump.ract rename to tgui/src/interfaces/atmos_pump.ract index 08d2b1824c2..a8acb0d7365 100644 --- a/tgui/scripts/interfaces/atmos_pump.ract +++ b/tgui/src/interfaces/atmos_pump.ract @@ -1,19 +1,19 @@ - - - {{data.on ? "On" : "Off"}} - - {{#if data.max_rate}} - - Set - Max - {{Math.round(adata.transfer_rate)}} L/s - - {{else}} - - Set - Max - {{Math.round(adata.set_pressure)}} kPa - - {{/if}} - + + + {{data.on ? "On" : "Off"}} + + {{#if data.max_rate}} + + Set + Max + {{Math.round(adata.transfer_rate)}} L/s + + {{else}} + + Set + Max + {{Math.round(adata.set_pressure)}} kPa + + {{/if}} + diff --git a/tgui/scripts/interfaces/canister.ract b/tgui/src/interfaces/canister.ract similarity index 95% rename from tgui/scripts/interfaces/canister.ract rename to tgui/src/interfaces/canister.ract index 91e49c0bf67..fd3b11e008e 100644 --- a/tgui/scripts/interfaces/canister.ract +++ b/tgui/src/interfaces/canister.ract @@ -1,53 +1,53 @@ - - The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a tank. - - - {{#partial button}} - Relabel - {{/partial}} - - {{Math.round(adata.tankPressure)}} kPa - - - {{data.portConnected ? "Connected" : "Not Connected"}} - - - - - {{Math.round(adata.releasePressure)}} kPa - - - Reset - Min - Set - Max - - - {{data.valveOpen ? "Open" : "Closed"}} - - - - {{#partial button}} - {{#if data.hasHoldingTank}} - Eject - {{/if}} - {{/partial}} - {{#if data.hasHoldingTank}} - - {{data.holdingTank.name}} - - - {{Math.round(adata.holdingTank.tankPressure)}} kPa - - {{else}} - - No Holding Tank - - {{/if}} - + + The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a tank. + + + {{#partial button}} + Relabel + {{/partial}} + + {{Math.round(adata.tankPressure)}} kPa + + + {{data.portConnected ? "Connected" : "Not Connected"}} + + + + + {{Math.round(adata.releasePressure)}} kPa + + + Reset + Min + Set + Max + + + {{data.valveOpen ? "Open" : "Closed"}} + + + + {{#partial button}} + {{#if data.hasHoldingTank}} + Eject + {{/if}} + {{/partial}} + {{#if data.hasHoldingTank}} + + {{data.holdingTank.name}} + + + {{Math.round(adata.holdingTank.tankPressure)}} kPa + + {{else}} + + No Holding Tank + + {{/if}} + diff --git a/tgui/scripts/interfaces/chem_dispenser.ract b/tgui/src/interfaces/chem_dispenser.ract similarity index 97% rename from tgui/scripts/interfaces/chem_dispenser.ract rename to tgui/src/interfaces/chem_dispenser.ract index 072863e93dd..c958a38516a 100644 --- a/tgui/scripts/interfaces/chem_dispenser.ract +++ b/tgui/src/interfaces/chem_dispenser.ract @@ -1,38 +1,38 @@ - - - {{Math.fixed(adata.energy)}} Units - - - - {{#partial button}} - {{#each data.beakerTransferAmounts}} - {{.}} - {{/each}} - {{/partial}} - - {{#each data.chemicals}} - {{title}} - {{/each}} - - - - {{#partial button}} - {{#each data.beakerTransferAmounts}} - {{.}} - {{/each}} - Eject - {{/partial}} - - {{#if data.isBeakerLoaded}} - {{Math.round(adata.beakerCurrentVolume)}}/{{data.beakerMaxVolume}} Units -
    - {{#each adata.beakerContents}} - {{Math.fixed(volume, 2)}} units of {{name}}
    - {{else}} - Beaker Empty - {{/each}} - {{else}} - No Beaker - {{/if}} -
    -
    + + + {{Math.fixed(adata.energy)}} Units + + + + {{#partial button}} + {{#each data.beakerTransferAmounts}} + {{.}} + {{/each}} + {{/partial}} + + {{#each data.chemicals}} + {{title}} + {{/each}} + + + + {{#partial button}} + {{#each data.beakerTransferAmounts}} + {{.}} + {{/each}} + Eject + {{/partial}} + + {{#if data.isBeakerLoaded}} + {{Math.round(adata.beakerCurrentVolume)}}/{{data.beakerMaxVolume}} Units +
    + {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
    + {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
    +
    diff --git a/tgui/scripts/interfaces/chem_heater.ract b/tgui/src/interfaces/chem_heater.ract similarity index 97% rename from tgui/scripts/interfaces/chem_heater.ract rename to tgui/src/interfaces/chem_heater.ract index 6cdd258d0d8..010539fe009 100644 --- a/tgui/scripts/interfaces/chem_heater.ract +++ b/tgui/src/interfaces/chem_heater.ract @@ -1,29 +1,29 @@ - - - {{data.isActive ? "On" : "Off"}} - - - {{Math.round(adata.targetTemp)}} K - - - - {{#partial button}} - Eject - {{/partial}} - - {{#if data.isBeakerLoaded}} - Temperature: {{Math.round(adata.currentTemp)}} K -
    - {{#each adata.beakerContents}} - {{Math.fixed(volume, 2)}} units of {{name}}
    - {{else}} - Beaker Empty - {{/each}} - {{else}} - No Beaker - {{/if}} -
    -
    + + + {{data.isActive ? "On" : "Off"}} + + + {{Math.round(adata.targetTemp)}} K + + + + {{#partial button}} + Eject + {{/partial}} + + {{#if data.isBeakerLoaded}} + Temperature: {{Math.round(adata.currentTemp)}} K +
    + {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
    + {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
    +
    diff --git a/tgui/scripts/interfaces/cryo.ract b/tgui/src/interfaces/cryo.ract similarity index 84% rename from tgui/scripts/interfaces/cryo.ract rename to tgui/src/interfaces/cryo.ract index 5bc2f65227f..8dbaab17cc6 100644 --- a/tgui/scripts/interfaces/cryo.ract +++ b/tgui/src/interfaces/cryo.ract @@ -1,68 +1,73 @@ - - - - - {{data.occupant.name ? data.occupant.name : "No Occupant"}} - - {{#if data.hasOccupant}} - - {{data.occupant.stat == 0 ? "Conscious" : data.occupant.stat == 1 ? "Unconcious" : "Dead"}} - - - {{Math.round(adata.occupant.bodyTemperature)}} K - - - {{Math.round(adata.occupant.health)}} - - {{#each [{label: "Brute", type: "bruteLoss"}, {label: "Respiratory", type: "oxyLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Burn", type: "fireLoss"}]}} - - {{Math.round(adata.occupant[type])}} - - {{/each}} - {{/if}} - - - - {{data.isOperating ? "On" : "Off"}} - - - {{Math.round(adata.cellTemperature)}} K - - - {{data.isOpen ? "Open" : "Closed"}} - {{data.autoEject ? "Auto" : "Manual"}} - - - - {{#partial button}} - Eject - {{/partial}} - - {{#if data.isBeakerLoaded}} - {{#each adata.beakerContents}} - {{Math.fixed(volume, 2)}} units of {{name}}
    - {{else}} - Beaker Empty - {{/each}} - {{else}} - No Beaker - {{/if}} -
    -
    + + + + + {{data.occupant.name ? data.occupant.name : "No Occupant"}} + + {{#if data.hasOccupant}} + + {{data.occupant.stat == 0 ? "Conscious" : data.occupant.stat == 1 ? "Unconcious" : "Dead"}} + + + {{Math.round(adata.occupant.bodyTemperature)}} K + + + {{Math.round(adata.occupant.health)}} + + {{#each [{label: "Brute", type: "bruteLoss"}, {label: "Respiratory", type: "oxyLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Burn", type: "fireLoss"}]}} + + {{Math.round(adata.occupant[type])}} + + {{/each}} + {{/if}} + + + + {{data.isOperating ? "On" : "Off"}} + + + {{Math.round(adata.cellTemperature)}} K + + + {{data.isOpen ? "Open" : "Closed"}} + {{data.autoEject ? "Auto" : "Manual"}} + + + + {{#partial button}} + Eject + {{/partial}} + + {{#if data.isBeakerLoaded}} + {{#each adata.beakerContents}} + {{Math.fixed(volume, 2)}} units of {{name}}
    + {{else}} + Beaker Empty + {{/each}} + {{else}} + No Beaker + {{/if}} +
    +
    diff --git a/tgui/scripts/interfaces/error.ract b/tgui/src/interfaces/error.ract similarity index 97% rename from tgui/scripts/interfaces/error.ract rename to tgui/src/interfaces/error.ract index b3baa85c589..23d76c2248a 100644 --- a/tgui/scripts/interfaces/error.ract +++ b/tgui/src/interfaces/error.ract @@ -1,3 +1,3 @@ - - The requested interface ({{config.interface}}) was not found. Does it exist? - + + The requested interface ({{config.interface}}) was not found. Does it exist? + diff --git a/tgui/scripts/interfaces/smes.ract b/tgui/src/interfaces/smes.ract similarity index 82% rename from tgui/scripts/interfaces/smes.ract rename to tgui/src/interfaces/smes.ract index 2296795fc1a..0417ecde213 100644 --- a/tgui/scripts/interfaces/smes.ract +++ b/tgui/src/interfaces/smes.ract @@ -1,69 +1,70 @@ - - - - - {{Math.fixed(adata.capacityPercent)}}% - - - - - {{data.inputAttempt ? "Auto" : "Off"}} -   - [{{data.capacityPercent >= 100 ? "Fully Charged" : data.inputting ? "Charging" : "Not Charging"}}] - - - {{Math.round(adata.inputLevel)}}W - - - - - Set - - - - - {{Math.round(adata.inputAvailable)}}W - - - - - {{data.outputAttempt ? "On" : "Off"}} -   - [{{data.outputting ? "Sending" : data.charge > 0 ? "Not Sending" : "No Charge"}}] - - - {{Math.round(adata.outputLevel)}}W - - - - - Set - - - - - {{Math.round(adata.outputUsed)}}W - - + + + + + {{Math.fixed(adata.capacityPercent)}}% + + + + + {{data.inputAttempt ? "Auto" : "Off"}} +   + [{{data.capacityPercent >= 100 ? "Fully Charged" : data.inputting ? "Charging" : "Not Charging"}}] + + + {{Math.round(adata.inputLevel)}}W + + + + + Set + + + + + {{Math.round(adata.inputAvailable)}}W + + + + + {{data.outputAttempt ? "On" : "Off"}} +   + [{{data.outputting ? "Sending" : data.charge > 0 ? "Not Sending" : "No Charge"}}] + + + {{Math.round(adata.outputLevel)}}W + + + + + Set + + + + + {{Math.round(adata.outputUsed)}}W + + diff --git a/tgui/scripts/interfaces/solar_control.ract b/tgui/src/interfaces/solar_control.ract similarity index 98% rename from tgui/scripts/interfaces/solar_control.ract rename to tgui/src/interfaces/solar_control.ract index 3139bd95c1b..75ae90ca123 100644 --- a/tgui/scripts/interfaces/solar_control.ract +++ b/tgui/src/interfaces/solar_control.ract @@ -1,46 +1,46 @@ - - - {{Math.round(adata.generated)}}W - - - {{Math.round(adata.angle)}}° ({{data.direction}}) - - - 15° - - - 15° - - - - - Off - Timed - Auto - - - {{Math.round(adata.tracking_rate)}}°/h ({{data.rotating_way}}) - - - 180° - 30° - - - 30° - 180° - - - - {{#partial button}} - Refresh - {{/partial}} - - {{data.connected_tracker ? "" : "Not "}}Found - - - {{Math.round(adata.connected_panels)}} Panels Connected - - + + + {{Math.round(adata.generated)}}W + + + {{Math.round(adata.angle)}}° ({{data.direction}}) + + + 15° + + + 15° + + + + + Off + Timed + Auto + + + {{Math.round(adata.tracking_rate)}}°/h ({{data.rotating_way}}) + + + 180° + 30° + + + 30° + 180° + + + + {{#partial button}} + Refresh + {{/partial}} + + {{data.connected_tracker ? "" : "Not "}}Found + + + {{Math.round(adata.connected_panels)}} Panels Connected + + diff --git a/tgui/scripts/interfaces/space_heater.ract b/tgui/src/interfaces/space_heater.ract similarity index 93% rename from tgui/scripts/interfaces/space_heater.ract rename to tgui/src/interfaces/space_heater.ract index 18a887ffcc3..9982f08addd 100644 --- a/tgui/scripts/interfaces/space_heater.ract +++ b/tgui/src/interfaces/space_heater.ract @@ -1,51 +1,53 @@ - - - - {{#partial button}} - {{#if data.open}} - Eject - {{/if}} - {{/partial}} - - {{data.on ? "On" : "Off"}} - - - {{#if data.hasPowercell}} - {{Math.fixed(adata.powerLevel)}}% - {{else}} - No Cell - {{/if}} - - - - - {{Math.round(adata.currentTemp)}}°C - - - {{Math.round(adata.targetTemp)}}°C - - {{#if data.open}} - - - - Set - - - - {{/if}} - - {{#if data.open}} - Heat - Cool - Auto - {{else}} - {{text.titleCase(data.mode)}} - {{/if}} - - + + + + {{#partial button}} + {{#if data.open}} + Eject + {{/if}} + {{/partial}} + + {{data.on ? "On" : "Off"}} + + + {{#if data.hasPowercell}} + {{Math.fixed(adata.powerLevel)}}% + {{else}} + No Cell + {{/if}} + + + + + {{Math.round(adata.currentTemp)}}°C + + + {{Math.round(adata.targetTemp)}}°C + + {{#if data.open}} + + + + Set + + + + {{/if}} + + {{#if data.open}} + Heat + Cool + Auto + {{else}} + {{text.titleCase(data.mode)}} + {{/if}} + + diff --git a/tgui/scripts/interfaces/tanks.ract b/tgui/src/interfaces/tanks.ract similarity index 84% rename from tgui/scripts/interfaces/tanks.ract rename to tgui/src/interfaces/tanks.ract index 0ec253087cd..f4465afacb7 100644 --- a/tgui/scripts/interfaces/tanks.ract +++ b/tgui/src/interfaces/tanks.ract @@ -1,36 +1,39 @@ - - - - The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a mask. - - - - {{Math.round(adata.tankPressure)}} kPa - - - {{Math.round(adata.releasePressure)}} kPa - - - Reset - Min - Set - Max - - - {{data.valveOpen ? "Open" : "Closed"}} - - + + + + The regulator {{data.hasHoldingTank ? "is" : "is not"}} connected to a mask. + + + + {{Math.round(adata.tankPressure)}} kPa + + + {{Math.round(adata.releasePressure)}} kPa + + + Reset + Min + Set + Max + + + {{data.valveOpen ? "Open" : "Closed"}} + + diff --git a/tgui/src/styles/nanotrasen.styl b/tgui/src/styles/nanotrasen.styl new file mode 100644 index 00000000000..d9fb1860034 --- /dev/null +++ b/tgui/src/styles/nanotrasen.styl @@ -0,0 +1,6 @@ +body.nanotrasen + background: data-url('images/nanotrasen.svg') no-repeat fixed center/70% 70%, + linear-gradient(to bottom, + background-color-start 0%, + background-color-end 100%) + @import "components/*" diff --git a/tgui/src/styles/syndicate.styl b/tgui/src/styles/syndicate.styl new file mode 100644 index 00000000000..3c067c06dd3 --- /dev/null +++ b/tgui/src/styles/syndicate.styl @@ -0,0 +1,26 @@ +body.syndicate + color-highlight = black + background-color-start = #750000 + background-color-end = #340404 + rule-color-normal = dark-gray + titlebar-color-text = pale-red + titlebar-color-button = pale-red + display-color-background = alpha(#000, 0.5) + display-color-shadow = alpha(#000, 0.75) + notice-color-first = #750000 + notice-color-second = #910101 + section-color-label = white + bar-color-normal = black + bar-color-good = pale-green + bar-color-border = black + button-color-normal = dark-gray + button-color-disabled = gray + button-color-selected = dark-red + button-color-caution = yellow-orange + button-color-danger = yellow + + background: data-url('images/syndicate.svg') no-repeat fixed center/70% 70%, + linear-gradient(to bottom, + background-color-start 0%, + background-color-end 100%) + @import "components/*" diff --git a/tgui/src/tgui.js b/tgui/src/tgui.js new file mode 100644 index 00000000000..99eddc4783d --- /dev/null +++ b/tgui/src/tgui.js @@ -0,0 +1,43 @@ +// Temporarily import Ractive first to keep it from detecting ie8's object.defineProperty shim, which it misuses (ractivejs/ractive#2343). +import Ractive from 'ractive' +Ractive.DEBUG = /minified/.test(() => {/* minified */}) + +import 'ie8' +import 'babel-polyfill' +import 'dom4' +import 'html5shiv' + +Object.assign(Math, require('util/math')) + +import WebFont from 'webfontloader' +WebFont.load({ + custom: { + families: [ 'FontAwesome' ], + urls: [ 'https://netdna.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css' ], + testStrings: { FontAwesome: '\uf240' } + } +}) + +import TGUI from 'tgui.ract' +window.initialize = (dataString) => { + if (window.tgui) return + window.tgui = new TGUI({ + el: '#container', + data () { + const base = { + constants: require('util/constants') + } + const server = JSON.parse(dataString) + return Object.assign(base, server) + } + }) +} + +import { act } from 'util/byond' +const holder = document.getElementById('data') +if (holder.textContent !== '{}') { // If the JSON was inlined, load it. + window.initialize(holder.textContent) +} else { + act(holder.getAttribute('data-ref'), 'tgui:initialize') + holder.remove() +} diff --git a/tgui/src/tgui.ract b/tgui/src/tgui.ract new file mode 100644 index 00000000000..9b5b1f22c9e --- /dev/null +++ b/tgui/src/tgui.ract @@ -0,0 +1,69 @@ + + + + + + +{{{config.title}}} +
    + + +
    + diff --git a/tgui/src/tgui.styl b/tgui/src/tgui.styl new file mode 100644 index 00000000000..ddd205a5f95 --- /dev/null +++ b/tgui/src/tgui.styl @@ -0,0 +1,78 @@ +@charset "utf-8" + +white = white +pale-red = #e74242 +red = #b00e0e +dark-red = #9d0808 +yellow-orange = #be6209 +yellow = #9a9d00 +pale-green = #80ff80 +grass-green = #537d29 +green = #2f943c +royal-blue = #40628a +pale-blue = #8ba5c4 +black = black +dark-gray = #272727 +gray = #363636 +light-gray = #999999 + +// Branding Colors +color-normal = royal-blue +color-good = grass-green +color-average = yellow-orange +color-bad = red +color-highlight = pale-blue + +// Text +text-color-normal = white +text-color-inverse = black + +// Background +background-color-start = #2a2a2a +background-color-end = #202020 + +// Rules (
    etc) +rule-color-normal = royal-blue +rule-color-dark = dark-gray +rule-size = 2px + +// Titlebar +titlebar-color-text = pale-blue +titlebar-color-button = pale-blue +titlebar-color-background = gray +titlebar-color-shadow = alpha(#000, 0.1) + +// Resize +resize-color = gray + +// Display +display-color-title = white +display-color-background = alpha(#000, 0.33) +display-color-shadow = alpha(#000, 0.5) + +// Notice +notice-color-first = #bb9b68 +notice-color-second = #b1905d +notice-color-border = dark-gray + +// Section +section-color-label = pale-blue + +// Bar +bar-color-normal = color-normal +bar-color-good = color-good +bar-color-average = color-average +bar-color-bad = color-bad +bar-color-border = royal-blue +bar-color-background = dark-gray + +// Buttons +button-color-normal = royal-blue +button-color-disabled = light-gray +button-color-selected = green +button-color-caution = yellow +button-color-danger = dark-red +button-lighten-hover = 15% + +@require "util/*" +@require "styles/*" diff --git a/tgui/src/util/byond.js b/tgui/src/util/byond.js new file mode 100644 index 00000000000..beb3157809c --- /dev/null +++ b/tgui/src/util/byond.js @@ -0,0 +1,16 @@ +const encode = encodeURIComponent + +// Helper to generate a BYOND href given 'params' as an object (with an optional 'url' for eg winset). +export function href (params = {}, url = '') { + return `byond://${url}?` + Object.keys(params).map(key => `${encode(key)}=${encode(params[key])}`).join('&') +} + +// Helper to make a BYOND ui_act() call on the UI 'src' given an 'action' and optional 'params'. +export function act (src, action, params = {}) { + window.location.href = href(Object.assign({ src, action }, params)) +} + +// Helper to make a BYOND winset() call on 'window', setting 'key' to 'value' +export function winset (win, key, value) { + window.location.href = href({[`${win}.${key}`]: value}, 'winset') +} diff --git a/tgui/src/util/colors.styl b/tgui/src/util/colors.styl new file mode 100644 index 00000000000..d1f17a7768b --- /dev/null +++ b/tgui/src/util/colors.styl @@ -0,0 +1,10 @@ +.normal + color: color-normal +.good + color: color-good +.average + color: color-average +.bad + color: color-bad +.highlight + color: color-highlight diff --git a/tgui/src/util/constants.js b/tgui/src/util/constants.js new file mode 100644 index 00000000000..b7dac6eb67d --- /dev/null +++ b/tgui/src/util/constants.js @@ -0,0 +1,5 @@ +// Constants used in tgui; these are mirrored from the BYOND code. +export const UI_INTERACTIVE = 2 +export const UI_UPDATE = 1 +export const UI_DISABLED = 0 +export const UI_CLOSE = -1 diff --git a/tgui/styles/core/document.styl b/tgui/src/util/document.styl similarity index 51% rename from tgui/styles/core/document.styl rename to tgui/src/util/document.styl index 6406c3635d2..fe207b92d48 100644 --- a/tgui/styles/core/document.styl +++ b/tgui/src/util/document.styl @@ -1,30 +1,34 @@ -html - box-sizing: border-box - min-height: 100% - margin: 0 - - cursor: default // Reset the cursor. - -// This really should be the default. -*, *:before, *:after - box-sizing: inherit - -body - min-height: 100% - height: 100% - margin: 0 6px - - font-family: font - font-size: fontsize - color: colors.text.normal - -main - display: block - margin-top: 32px - padding-top: 3px - - -hr - height: 2px - background-color: colors.rule.normal - border: none +html + box-sizing: border-box + min-height: 100% + margin: 0 + + cursor: default // Reset the cursor. + +// This really should be the default. +*, *:before, *:after + box-sizing: inherit + +body + min-height: 100% + height: 100% + margin: 0 6px + + font-family: Verdana, Geneva, sans-serif + font-size: 12px + color: text-color-normal + + background-color: background-color-start + background-image: linear-gradient(to bottom, + background-color-start 0%, + background-color-end 100%) + +main + display: block + margin-top: 32px + padding-top: 3px + +hr + height: rule-size + background-color: rule-color-normal + border: none diff --git a/tgui/src/util/dragresize.js b/tgui/src/util/dragresize.js new file mode 100644 index 00000000000..2e31702557d --- /dev/null +++ b/tgui/src/util/dragresize.js @@ -0,0 +1,49 @@ +import {winset} from './byond' + +function lock (x, y) { + if (x < 0) { // Left + x = 0 + } else if (x + window.innerWidth > window.screen.availWidth) { // Right + x = window.screen.availWidth - window.innerWidth + } + + if (y < 0) { // Top + y = 0 + } else if (y + window.innerHeight > window.screen.availHeight) { // Bottom + y = window.screen.availHeight - window.innerHeight + } + + return {x, y} +} + +function drag (event) { + event.preventDefault() + + if (this.get('x')) { + let x = (event.screenX - this.get('x')) + window.screenLeft + let y = (event.screenY - this.get('y')) + window.screenTop + if (this.get('config.locked')) ({x, y} = lock(x, y)) // Lock to primary monitor. + winset(this.get('config.window'), 'pos', `${x},${y}`) + } + this.set({ x: event.screenX, y: event.screenY }) +} + +function sane (x, y) { + x = Math.clamp(100, window.screen.width, x) + y = Math.clamp(100, window.screen.height, y) + return {x, y} +} + +function resize (event) { + event.preventDefault() + + if (this.get('x')) { + let x = (event.screenX - this.get('x')) + window.innerWidth + let y = (event.screenY - this.get('y')) + window.innerHeight + ;({x, y} = sane(x, y)) + winset(this.get('config.window'), 'size', `${x},${y}`) + } + this.set({ x: event.screenX, y: event.screenY }) +} + +export { drag, resize } diff --git a/tgui/src/util/header.styl b/tgui/src/util/header.styl new file mode 100644 index 00000000000..b7a98456197 --- /dev/null +++ b/tgui/src/util/header.styl @@ -0,0 +1,16 @@ +$h + display: inline-block + margin: 0 + padding: 6px 0 +h1 + @extend $h + font-size: 18px +h2 + @extend $h + font-size: 16px +h3 + @extend $h + font-size: 14px +h4 + @extend $h + font-size: 12px diff --git a/tgui/src/util/math.js b/tgui/src/util/math.js new file mode 100644 index 00000000000..39a4b0c4240 --- /dev/null +++ b/tgui/src/util/math.js @@ -0,0 +1,9 @@ +// Helper to limit a number to be inside 'min' and 'max'. +export function clamp (min, max, number) { + return Math.max(min, Math.min(number, max)) +} + +// Helper to round a number to 'decimals' decimals. +export function fixed (number, decimals = 1) { + return Number(Math.round(number + 'e' + decimals) + 'e-' + decimals) +} diff --git a/tgui/src/util/text.js b/tgui/src/util/text.js new file mode 100644 index 00000000000..cbad0ac0377 --- /dev/null +++ b/tgui/src/util/text.js @@ -0,0 +1,7 @@ +export function upperCaseFirst (str) { + return str[0].toUpperCase() + str.slice(1).toLowerCase() +} + +export function titleCase (str) { + return str.replace(/\w\S*/g, upperCaseFirst) +} diff --git a/tgui/styles/core/text.styl b/tgui/src/util/text.styl similarity index 82% rename from tgui/styles/core/text.styl rename to tgui/src/util/text.styl index 14f2cbd8857..752bb120cce 100644 --- a/tgui/styles/core/text.styl +++ b/tgui/src/util/text.styl @@ -1,17 +1,17 @@ -// Helper to reset font options to default. -$fontReset - color: colors.text.normal - font-size: fontsize - font-weight: normal - font-style: normal - text-decoration: none - -// Utility classes to set font styles. -.bold - font-weight: bold -.italic - font-style: italic - -// Make 'unselectable' text unselectable on all browsers. -[unselectable=on] - user-select: none +// Helper to reset font options to default. +$fontReset + color: text-color-normal + font-size: 12px + font-weight: normal + font-style: normal + text-decoration: none + +// Utility classes to set font styles. +.bold + font-weight: bold +.italic + font-style: italic + +// Make 'unselectable' text unselectable on all browsers. +[unselectable=on] + user-select: none diff --git a/tgui/styles/components/notice.styl b/tgui/styles/components/notice.styl deleted file mode 100644 index 37f462579c4..00000000000 --- a/tgui/styles/components/notice.styl +++ /dev/null @@ -1,30 +0,0 @@ -@require "display" - -$noticeStripes - background-color: colors.notice1 // Fallback for old browers. - background-image: repeating-linear-gradient( - -45deg, - colors.notice.first, - colors.notice.first 10px, - colors.notice.second 10px, - colors.notice.second 20px - ) - -div.notice - @extend div.display, $noticeStripes - margin: 8px 0 - - box-shadow: none - - color: colors.text.inverse - font-weight: bold - font-style: italic - - .button - outline: 1px solid colors.notice.border - - .label - color: colors.text.inverse - - hr - background-color: colors.rule.dark diff --git a/tgui/styles/components/subdisplay.styl b/tgui/styles/components/subdisplay.styl deleted file mode 100644 index d4d20c96ee3..00000000000 --- a/tgui/styles/components/subdisplay.styl +++ /dev/null @@ -1,9 +0,0 @@ -div.subdisplay - width: 100% - margin: 0 - - header - @extend div.display header - - article - @extend div.display article diff --git a/tgui/styles/config.styl b/tgui/styles/config.styl deleted file mode 100644 index 0eb68db8a9e..00000000000 --- a/tgui/styles/config.styl +++ /dev/null @@ -1,8 +0,0 @@ -@charset "utf-8" - -// Fonts -font = Verdana, Geneva, sans-serif -fontsize = 12px - -// Colors -colors = json("../colors.json", {hash: true}) diff --git a/tgui/styles/core/clearfix.styl b/tgui/styles/core/clearfix.styl deleted file mode 100644 index 80f65910db0..00000000000 --- a/tgui/styles/core/clearfix.styl +++ /dev/null @@ -1,5 +0,0 @@ -$clearfix - &:after - content: "" - display: table - clear: both diff --git a/tgui/styles/core/colors.styl b/tgui/styles/core/colors.styl deleted file mode 100644 index ceb979aeaa0..00000000000 --- a/tgui/styles/core/colors.styl +++ /dev/null @@ -1,10 +0,0 @@ -.normal - color: colors.normal -.good - color: colors.good -.average - color: colors.average -.bad - color: colors.bad -.highlight - color: colors.highlight diff --git a/tgui/styles/core/header.styl b/tgui/styles/core/header.styl deleted file mode 100644 index cd3f7c85368..00000000000 --- a/tgui/styles/core/header.styl +++ /dev/null @@ -1,16 +0,0 @@ -$h - display: inline-block - margin: 0 - padding: 6px 0 -h1 - @extend $h - font-size: fontsize + 6px -h2 - @extend $h - font-size: fontsize + 4px -h3 - @extend $h - font-size: fontsize + 2px -h4 - @extend $h - font-size: fontsize diff --git a/tgui/styles/main.styl b/tgui/styles/main.styl deleted file mode 100644 index 400ea3a6432..00000000000 --- a/tgui/styles/main.styl +++ /dev/null @@ -1,5 +0,0 @@ -@require "config" - -@require "core/*" -@require "components/*" -@require "styles/*" diff --git a/tgui/styles/styles/generic.styl b/tgui/styles/styles/generic.styl deleted file mode 100644 index ff2bf29a7e3..00000000000 --- a/tgui/styles/styles/generic.styl +++ /dev/null @@ -1,4 +0,0 @@ -body.generic - background: linear-gradient(to bottom, - colors.background-start 0%, - colors.background-end 100%) diff --git a/tgui/styles/styles/nanotrasen.styl b/tgui/styles/styles/nanotrasen.styl deleted file mode 100644 index 192c98f612d..00000000000 --- a/tgui/styles/styles/nanotrasen.styl +++ /dev/null @@ -1,5 +0,0 @@ -body.nanotrasen - background: data-url('nanotrasen.svg') no-repeat fixed center/70% 70%, - linear-gradient(to bottom, - colors.nanotrasen.background-start 0%, - colors.nanotrasen.background-end 100%) diff --git a/tgui/styles/styles/syndicate.styl b/tgui/styles/styles/syndicate.styl deleted file mode 100644 index 5577a96354b..00000000000 --- a/tgui/styles/styles/syndicate.styl +++ /dev/null @@ -1,5 +0,0 @@ -body.syndicate - background: data-url('syndicate.svg') no-repeat fixed center/70% 70%, - linear-gradient(to bottom, - colors.syndicate.background-start 0%, - colors.syndicate.background-end 100%) diff --git a/tgui/tgui.html b/tgui/tgui.html index d7aac4ccdd3..1bf4e45a179 100644 --- a/tgui/tgui.html +++ b/tgui/tgui.html @@ -1,35 +1,35 @@ - - - - - - - - - - - -
    -
    - Loading... -
    -
    - - - + + + + + + + + + + + +
    +
    + Loading...
    +
    +
    + + +