diff --git a/code/__DEFINES.dm b/code/__DEFINES.dm index 8f3a81e13d2..c108b270202 100644 --- a/code/__DEFINES.dm +++ b/code/__DEFINES.dm @@ -200,9 +200,6 @@ var/turf/space/Space_Tile = locate(/turf/space) // A space tile to reference whe #define SHOCKWAVE 19 // attack a nearby tile and cause a massive shockwave, knocking most people on their asses (25%) #define ELECTRICITY 20 // ability to shoot electric attacks (15%) - //2spooky -#define SKELETON 29 - //disabilities #define NEARSIGHTED 1 #define EPILEPSY 2 diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 70cf55ecbf6..a08e6827d48 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -134,12 +134,16 @@ proc/listclearnulls(list/list) L.Cut(picked,picked+1) //Cut is far more efficient that Remove() //Returns the top(last) element from the list and removes it from the list (typical stack function) -/proc/pop(list/listfrom) - if (listfrom.len > 0) - var/picked = listfrom[listfrom.len] - listfrom.len-- - return picked - return null +/proc/pop(list/L) + if(L.len) + . = L[L.len] + L.len-- + +/proc/sorted_insert(list/L, thing, comparator) + var/pos = L.len + while(pos > 0 && call(comparator)(thing, L[pos]) > 0) + pos-- + L.Insert(pos+1, thing) /* * Sorting diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 0da2da6deec..fa7d1cdd380 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -39,20 +39,22 @@ proc/random_name(gender, attempts_to_find_unique_name=10) break proc/random_skin_tone() - return pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino", 20;"oriental", 10;"mediteranian") + return pick(skin_tones) var/list/skin_tones = list( - "caucasian" = "fdc", - "afroamerican" = "963", - "african" = "630", - "latino" = "c90", - "albino" = "fff", - "oriental" = "ff6", - "mediteranian" = "cc0" + "albino", + "caucasian1", + "caucasian2", + "caucasian3", + "latino", + "mediterranean", + "asian1", + "asian2", + "arab", + "indian", + "african1", + "african2" ) -/proc/skin_tone2color(skin_tone) - . = skin_tones[skin_tone] - if(!.) . = "fdc" proc/age2agedescription(age) switch(age) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 37b13994707..d5e116a430d 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -108,6 +108,8 @@ var/silent_ai = 0 var/silent_borg = 0 + var/sandbox_autoclose = 0 // close the sandbox panel after spawning an item, potentially reducing griff + /datum/configuration/New() var/list/L = typesof(/datum/game_mode) - /datum/game_mode @@ -340,6 +342,8 @@ config.silent_ai = 1 if("silent_borg") config.silent_borg = 1 + if("sandbox_autoclose") + config.sandbox_autoclose = 1 else diary << "Unknown setting in configuration: '[name]'" diff --git a/code/controllers/lighting_controller.dm b/code/controllers/lighting_controller.dm index 503fc10c93c..3428503e2d6 100644 --- a/code/controllers/lighting_controller.dm +++ b/code/controllers/lighting_controller.dm @@ -117,7 +117,7 @@ datum/controller/lighting/proc/Recover() var/msg = "## DEBUG: [time2text(world.timeofday)] lighting_controller restarted. Reports:\n" for(var/varname in lighting_controller.vars) switch(varname) - if("tag","bestF","type","parent_type","vars") continue + if("tag","type","parent_type","vars") continue else var/varval1 = lighting_controller.vars[varname] var/varval2 = vars[varname] diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index fb369946c34..1481225d5af 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -287,7 +287,7 @@ datum/controller/game_controller/proc/Recover() //Mostly a placeholder for now. var/msg = "## DEBUG: [time2text(world.timeofday)] MC restarted. Reports:\n" for(var/varname in master_controller.vars) switch(varname) - if("tag","bestF","type","parent_type","vars") continue + if("tag","type","parent_type","vars") continue else var/varval = master_controller.vars[varname] if(istype(varval,/datum)) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index e403fb402e3..9123dbbd15e 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -727,7 +727,7 @@ client usr << "This can only be done to instances of type /mob/living/carbon/human" return - var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow", "fly") + var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow", "fly", "skeleton") switch(new_mutantrace) if(null) return if("NONE") new_mutantrace = "" @@ -736,7 +736,8 @@ client return if(H.dna) H.dna.mutantrace = new_mutantrace - H.update_mutantrace() + H.update_body() + H.update_hair() else if(href_list["regenerateicons"]) if(!check_rights(0)) return diff --git a/code/datums/limbs.dm b/code/datums/limbs.dm index 48681db3eb6..39b9881aceb 100644 --- a/code/datums/limbs.dm +++ b/code/datums/limbs.dm @@ -119,7 +119,7 @@ return brute_dam + burn_dam -//Updates an organ's brute/burn states for use by updateDamageIcon() +//Updates an organ's brute/burn states for use by update_damage_overlays() //Returns 1 if we need to update overlays. 0 otherwise. /datum/limb/proc/update_icon() var/tbrute = round( (brute_dam/max_damage)*3, 1 ) diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm index 0af47ba12c6..3c97935a29d 100644 --- a/code/defines/procs/AStar.dm +++ b/code/defines/procs/AStar.dm @@ -1,185 +1,140 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 +/proc/cmp_pathnodes(pathnode/A, pathnode/B) + return (A.f_score - B.f_score) -/* -A Star pathfinding algorithm -Returns a list of tiles forming a path from A to B, taking dense objects as well as walls, and the orientation of -windows along the route into account. -Use: -your_list = AStar(start location, end location, adjacent turf proc, distance proc) -For the adjacent turf proc i wrote: +pathnode + var/turf/me //turf + var/pathnode/parent //pathnode this turf was discovered from + var/f_score //total path-length of this turf + var/g_score //length of path to this turf + + New(m,p,f,g) + me = m + parent = p + f_score = f + g_score = g + +/******************** +/A* pathfinding algorithm +/This version updated May 2013 by Yvarov +/Returns a list of turfs along the discovered path, in order from start to finish. +/ +/A* is more complex than can be easily explained here, but basically +/it checks tiles, assigning a score f = g + h where +/g = distance from start & h = minimum distance to end, and repeats with +/new tiles starting with the smallest f_score. It's capable of finding +/a path (assuming one exists), without getting stuck in wrong turns or +/unnecessarily checking unpromising tiles. +/ +/The syntax for calling remains roughly the same as the version this replaces, +/minus two arguments (ones that were never given by any of +/the procs that called it anyway). + +Possible procs to use for adjacency (there may be others): /turf/proc/AdjacentTurfs -And for the distance one i wrote: -/turf/proc/Distance -So an example use might be: +/turf/proc/AdjacentTurfsSpace +/turf/proc/CardinalTurfsWithAccess (best for most occasions, four-directional) -src.path_list = AStar(src.loc, target.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance) +Possible procs to use for adjacency: +/turf/proc/Distance_cardinal (requires four-directional adjacency proc) +/turf/proc/Distance (requires eight-directional adjacency proc) -Note: The path is returned starting at the END node, so i wrote reverselist to reverse it for ease of use. +Arguments: +/turf/start_turf: The turf to start the path from. +/turf/dest_turf: The turf to finish the path on. +adjacent_proc: The proc used to find adjacent tiles. When called, id is provided as an argument. + For the best path to be found, it must only output tiles that could be reached in + one move AND aren't occupied by something else, like a wall. +distance_proc: Formula to use for calculating distance. +maxnodes: Maximum _depth_ of nodes to examine; currently used only by disease. + Not equal to the number of nodes to examine (lpct, internal) or the maximum path + length returned (max_length below). +max_length: If the path is longer, return only this many elements of it (starting from the front). + It can only be shortened after finding the whole path, so doesn't save any time, + but as different values were provided throughout the code it's kept for compatibility. +id: Supplied to the adjacency proc for doors/etc. Default is null. +/var/turf/exclude: Turfs to avoid when finding a path. Default is null. -src.path_list = reverselist(src.pathlist) +Nodes not kept at all from previous version (which were never supplied): +"Mintargetdist: Minimum distance to the target before path returns, could be used to get +near a target, but not right to it - for an AI mob with a gun, for example." +"Minnodedist: Minimum number of nodes to return in the path, could be used to give a path a minimum +length to avoid portals or something i guess?? Not that they're counted right now but w/e." +*********************/ +proc/AStar(turf/start_turf, turf/dest_turf, adjacent_proc, distance_proc, maxnodes, max_length, id=null, var/turf/exclude=null) + set background=1 //allows proc to sleep should it take more than a single frame to complete + + var/const/DEPTH_BIAS = 0.5 //preference of discovered paths. decrease with extreme caution and don't set >1! + //var/evaluations = 0 //Total number of tiles examined, including discards and duplicates. Used for debugging + var/lpct = 0 //Loop counter - turfs properly examined. Debugging and infinite loop prevention. + var/list/checked = list() //list of pathnodes already examined + var/list/priorityqueue = list() //list of pathnodes not yet examined, sorted descending by f_score + var/pathnode/current //current pathnode being examined + var/next_g //calculated g_score of a potential turf + var/next_f //calculated f_score of a potential turf + var/skip //used for internal logic branching, don't touch. + var/pathnode/temp //temporary pathnode used for comparison, don't touch. + + var/list/path = list() //return value -Then to start on the path, all you need to do it: -Step_to(src, src.path_list[1]) -src.path_list -= src.path_list[1] or equivilent to remove that node from the list. + //sanity check to avoid a huge waste of CPU time on impossible tasks + for(var/obj/O in dest_turf) + if(O.density && (!istype(O, /obj/machinery/door) || !(O.flags & ON_BORDER))) //something is blocking the destination + return path + + priorityqueue += new /pathnode(start_turf, null, call(start_turf,distance_proc)(dest_turf), 0)//add the starting turf and manhattan distance to the queue! -Optional extras to add on (in order): -MaxNodes: The maximum number of nodes the returned path can be (0 = infinite) -Maxnodedepth: The maximum number of nodes to search (default: 30, 0 = infinite) -Mintargetdist: Minimum distance to the target before path returns, could be used to get -near a target, but not right to it - for an AI mob with a gun, for example. -Minnodedist: Minimum number of nodes to return in the path, could be used to give a path a minimum -length to avoid portals or something i guess?? Not that they're counted right now but w/e. -*/ + for(lpct=0, lpct<1800, lpct++) //maximum for DEPTH_BIAS=0.5 is 958 loops to Research Division (originally 2743) + if(!priorityqueue.len) break -// Modified to provide ID argument - supplied to 'adjacent' proc, defaults to null -// Used for checking if route exists through a door which can be opened + current = pop(priorityqueue) + checked.Add(current) -// Also added 'exclude' turf to avoid travelling over; defaults to null + next_g = current.g_score + DEPTH_BIAS + //if(maxnodes && next_g > (maxnodes*DEPTH_BIAS)) continue + if(!current) //no more possibilities, or an unhandled error + //world << "Impossible path" + return path //FAILURE -PriorityQueue - var/L[] - var/cmp - New(compare) - L = new() - cmp = compare - proc - IsEmpty() - return !L.len - Enqueue(d) - var/i - var/j - L.Add(d) - i = L.len - j = i>>1 - while(i > 1 && call(cmp)(L[j],L[i]) > 0) - L.Swap(i,j) - i = j - j >>= 1 + if(current.me == dest_turf) //reached the destination + while(current) //recreate path by looping through parents + path.Insert(1, current.me) + current = current.parent + //world << "Path found! ([path.len] steps, [lpct] loops, [evaluations] evaluations)" - Dequeue() - if(!L.len) return 0 - . = L[1] - Remove(1) + path.len = min(path.len, max_length-1) + return path //SUCCESS - Remove(i) - if(i > L.len) return 0 - L.Swap(i,L.len) - L.Cut(L.len) - if(i < L.len) - _Fix(i) - _Fix(i) - var/child = i + i - var/item = L[i] - while(child <= L.len) - if(child + 1 <= L.len && call(cmp)(L[child],L[child + 1]) > 0) - child++ - if(call(cmp)(item,L[child]) > 0) - L[i] = L[child] - i = child - else - break - child = i + i - L[i] = item - List() - var/ret[] = new() - var/copy = L.Copy() - while(!IsEmpty()) - ret.Add(Dequeue()) - L = copy - return ret - RemoveItem(i) - var/ind = L.Find(i) - if(ind) - Remove(ind) -PathNode - var/datum/source - var/PathNode/prevNode - var/f - var/g - var/h - var/nt // Nodes traversed - New(s,p,pg,ph,pnt) - source = s - prevNode = p - g = pg - h = ph - f = g + h - source.bestF = f - nt = pnt + var/adjacent = call(current.me,adjacent_proc)(id) + for(var/next_turf in adjacent) + //evaluations++ + if(next_turf == exclude) + continue + skip = 0 + next_f = next_g + call(next_turf,distance_proc)(dest_turf) + var/i = 0 + while(i < checked.len && !skip) + i++ + temp = checked[i] + if(temp.me == next_turf) //if this turf has already been checked + skip = 1 + if(temp.f_score > next_f) //BUT the current path to it is better + checked[i] = new /pathnode(next_turf, current, next_f, next_g) + //then update it + if(!skip) //if it hasn't been checked + i = 0 + while(i < priorityqueue.len && !skip) + i++ + temp = priorityqueue[i] + if(temp.me == next_turf) //if this turf was already on the openlist + if(temp.f_score > next_f) //BUT the current path to it is better + priorityqueue.Cut(i,i+1) //then remove it + skip = 2 + else + skip = 1 //otherwise leave it and don't add this version + if(!(skip % 2)) + sorted_insert(priorityqueue, new /pathnode(next_turf, current, next_f, next_g), /proc/cmp_pathnodes) -datum - var/bestF -proc - PathWeightCompare(PathNode/a, PathNode/b) - return a.f - b.f - - AStar(start,end,adjacent,dist,maxnodes,maxnodedepth = 30,mintargetdist,minnodedist,id=null, var/turf/exclude=null) - -// world << "A*: [start] [end] [adjacent] [dist] [maxnodes] [maxnodedepth] [mintargetdist], [minnodedist] [id]" - var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare) - var/closed[] = new() - var/path[] - start = get_turf(start) - if(!start) return 0 - - open.Enqueue(new /PathNode(start,null,0,call(start,dist)(end))) - - while(!open.IsEmpty() && !path) - { - var/PathNode/cur = open.Dequeue() - closed.Add(cur.source) - - var/closeenough - if(mintargetdist) - closeenough = call(cur.source,dist)(end) <= mintargetdist - - if(cur.source == end || closeenough) - path = new() - path.Add(cur.source) - while(cur.prevNode) - cur = cur.prevNode - path.Add(cur.source) - break - - var/L[] = call(cur.source,adjacent)(id) - if(minnodedist && maxnodedepth) - if(call(cur.source,minnodedist)(end) + cur.nt >= maxnodedepth) - continue - else if(maxnodedepth) - if(cur.nt >= maxnodedepth) - continue - - for(var/datum/d in L) - if(d == exclude) - continue - var/ng = cur.g + call(cur.source,dist)(d) - if(d.bestF) - if(ng + call(d,dist)(end) < d.bestF) - for(var/i = 1; i <= open.L.len; i++) - var/PathNode/n = open.L[i] - if(n.source == d) - open.Remove(i) - break - else - continue - - open.Enqueue(new /PathNode(d,cur,ng,call(d,dist)(end),cur.nt+1)) - if(maxnodes && open.L.len > maxnodes) - open.L.Cut(open.L.len) - } - - var/PathNode/temp - while(!open.IsEmpty()) - temp = open.Dequeue() - temp.source.bestF = 0 - while(closed.len) - temp = closed[closed.len] - temp.bestF = 0 - closed.Cut(closed.len) - - if(path) - for(var/i = 1; i <= path.len/2; i++) - path.Swap(i,path.len-i+1) - - return path + //world << "Didn't find a path within [evaluations] evaluations and [lpct] loops." + return path //FAILURE + //This return should only be reached if the path is too long, and the while loop gives up. diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 98777f7e0ac..235ac44654b 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -304,69 +304,57 @@ its easier to just keep the beam vertical. if(!istype(W, /obj/item/weapon/grab) && !istype(W, /obj/item/weapon/plastique) && !istype(W, /obj/item/weapon/reagent_containers/spray) && !istype(W, /obj/item/weapon/packageWrap) && !istype(W, /obj/item/device/detective_scanner)) visible_message("[src] has been hit by [user] with [W].") +var/list/blood_splatter_icons = list() +/atom/proc/blood_splatter_index() + return "\ref[initial(icon)]-[initial(icon_state)]" //returns 1 if made bloody, returns 0 otherwise -/atom/proc/add_blood(mob/living/carbon/human/M as mob) - if (!( istype(M, /mob/living/carbon/human) )) +/atom/proc/add_blood(mob/living/carbon/M) + if(!initial(icon) || !initial(icon_state)) return 0 - check_dna_integrity(M) //check dna is valid and create/setup if necessary - if (!( src.flags ) & FPRINT) + if(!istype(M)) return 0 - if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. + if(!check_dna_integrity(M)) //check dna is valid and create/setup if necessary + return 0 //no dna! + if(!(flags & FPRINT)) + return 0 + if(!istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. blood_DNA = list() //adding blood to items - if (istype(src, /obj/item)&&!istype(src, /obj/item/weapon/melee/energy))//Only regular items. Energy melee weapon are not affected. - var/obj/item/O = src - - //if we haven't made our blood_overlay already - if( !O.blood_overlay ) - var/icon/I = new /icon(O.icon, O.icon_state) - I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant - - //not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made. - for(var/obj/item/A in world) - if(A.type == O.type && !A.blood_overlay) - A.blood_overlay = I - + if(istype(src, /obj/item)) //apply the blood-splatter overlay if it isn't already in there if(!blood_DNA.len) - O.overlays += O.blood_overlay - + //try to find a pre-processed blood-splatter. otherwise, make a new one + var/index = blood_splatter_index() + var/icon/blood_splatter_icon = blood_splatter_icons[index] + if(!blood_splatter_icon ) + blood_splatter_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object + blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) + blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant + blood_splatter_icon = fcopy_rsc(blood_splatter_icon) + blood_splatter_icons[index] = blood_splatter_icon + overlays += blood_splatter_icon + //if this blood isn't already in the list, add it - if(blood_DNA[M.dna.unique_enzymes]) return 0 //already bloodied with this blood. Cannot add more. blood_DNA[M.dna.unique_enzymes] = M.dna.b_type return 1 //we applied blood to the item //adding blood to turfs - else if (istype(src, /turf/simulated)) + else if(istype(src, /turf/simulated)) var/turf/simulated/T = src //get one blood decal and infect it with virus from M.viruses - for(var/obj/effect/decal/cleanable/blood/B in T.contents) - if(!B.blood_DNA[M.dna.unique_enzymes]) - B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - B.viruses += newDisease - newDisease.holder = B*/ - return 1 //we bloodied the floor - - //if there isn't a blood decal already, make one. - var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T) - newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - newblood.viruses += newDisease - newDisease.holder = newblood*/ + var/obj/effect/decal/cleanable/blood/B = locate() in T.contents + if(!B) B = new /obj/effect/decal/cleanable/blood(T) + B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type return 1 //we bloodied the floor //adding blood to humans - else if (istype(src, /mob/living/carbon/human)) + else if(istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src //if this blood isn't already in the list, add it if(blood_DNA[H.dna.unique_enzymes]) @@ -391,34 +379,22 @@ its easier to just keep the beam vertical. // Only adds blood on the floor -- Skie /atom/proc/add_blood_floor(mob/living/carbon/M as mob) - if( istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/human)) - if( istype(src, /turf/simulated) ) - var/turf/simulated/source1 = src - var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1) - this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - this.viruses += newDisease - newDisease.holder = this*/ - - else if( istype(M, /mob/living/carbon/alien )) - if( istype(src, /turf/simulated) ) - var/turf/simulated/source2 = src - var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(source2) - this.blood_DNA["UNKNOWN BLOOD"] = "X*" - /*for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = D.Copy(1) - this.viruses += newDisease - newDisease.holder = this*/ - - else if( istype(M, /mob/living/silicon/robot )) - if( istype(src, /turf/simulated) ) - var/turf/simulated/source2 = src - new /obj/effect/decal/cleanable/oil(source2) + if(istype(src, /turf/simulated)) + if(check_dna_integrity(M)) //mobs with dna = (monkeys + humans at time of writing) + var/obj/effect/decal/cleanable/blood/B = locate() in contents + if(!B) B = new(src) + B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + else if(istype(M, /mob/living/carbon/alien)) + var/obj/effect/decal/cleanable/xenoblood/B = locate() in contents + if(!B) B = new(src) + B.blood_DNA["UNKNOWN BLOOD"] = "X*" + else if(istype(M, /mob/living/silicon/robot)) + var/obj/effect/decal/cleanable/oil/B = locate() in contents + if(!B) B = new(src) /atom/proc/clean_blood() if(istype(blood_DNA, /list)) - del(blood_DNA) + blood_DNA = null return 1 diff --git a/code/game/communications.dm b/code/game/communications.dm index 5220d157e75..c5fc236456c 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -107,9 +107,10 @@ var/list/radiochannels = list( "Deathsquad" = 1441, "Syndicate" = 1213, "Supply" = 1347, + "Service" = 1349, ) //depenging helpers -var/list/DEPT_FREQS = list(1351,1355,1357,1213,1441,1347) +var/list/DEPT_FREQS = list(1351,1355,1357,1213,1441,1347,1349) var/const/SEC_FREQ = 1359 //security, colored cyan in chat window var/const/COMM_FREQ = 1353 //command, colored gold in chat window var/const/SYND_FREQ = 1213 diff --git a/code/game/dna.dm b/code/game/dna.dm index 623d209e155..37d64002669 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -39,7 +39,7 @@ L[DNA_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.h_color) L[DNA_FACIAL_HAIR_STYLE_BLOCK] = construct_block(hair_styles_list.Find(H.f_style), facial_hair_styles_list.len) L[DNA_FACIAL_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.f_color) - L[DNA_SKIN_TONE_BLOCK] = construct_block(skin_tones.Find(H.s_tone), skin_tones.len) + L[DNA_SKIN_TONE_BLOCK] = construct_block(skin_tones.Find(H.skin_tone), skin_tones.len) L[DNA_EYE_COLOR_BLOCK] = sanitize_hexcolor(H.eye_color) for(var/i=1, i<=DNA_UNI_IDENTITY_BLOCKS, i++) @@ -68,7 +68,7 @@ return . /proc/hardset_dna(mob/living/carbon/owner, ui, se, real_name, mutantrace, blood_type) - if(!istype(owner)) + if(!istype(owner, /mob/living/carbon/monkey) && !istype(owner, /mob/living/carbon/human)) return if(!owner.dna) owner.dna = new /datum/dna() @@ -88,21 +88,23 @@ owner.dna.mutantrace = mutantrace if(update_mutantrace && istype(owner, /mob/living/carbon/human)) var/mob/living/carbon/human/H = owner - H.update_mutantrace() + H.update_body() + H.update_hair() if(se) owner.dna.struc_enzymes = se domutcheck(owner) check_dna_integrity(owner) + return owner.dna /proc/check_dna_integrity(mob/living/carbon/character) if(!istype(character)) - return 0 + return if(!character.dna) if(ready_dna(character)) - return 1 - return 0 + return character.dna + return if(length(character.dna.uni_identity) != DNA_UNI_IDENTITY_BLOCKS*DNA_BLOCK_SIZE) character.dna.uni_identity = character.dna.generate_uni_identity(character) @@ -110,11 +112,11 @@ character.dna.struc_enzymes = character.dna.generate_struc_enzymes() if(!character.dna.real_name || length(character.dna.unique_enzymes) != DNA_UNIQUE_ENZYMES_LEN) character.dna.unique_enzymes = character.dna.generate_unique_enzymes(character) - return 1 + return character.dna /proc/ready_dna(mob/living/carbon/character, blood_type) if(!istype(character, /mob/living/carbon/monkey) && !istype(character, /mob/living/carbon/human)) - return 0 + return if(!character.dna) character.dna = new /datum/dna() if(blood_type) @@ -123,7 +125,7 @@ character.dna.uni_identity = character.dna.generate_uni_identity(character) character.dna.struc_enzymes = character.dna.generate_struc_enzymes(character) character.dna.unique_enzymes = character.dna.generate_unique_enzymes(character) - return 1 + return character.dna /////////////////////////// DNA DATUM @@ -204,21 +206,23 @@ /////////////////////////// DNA HELPER-PROCS /////////////////////////// DNA MISC-PROCS -/proc/updateappearance(mob/living/carbon/human/H) - if(!istype(H) || !istype(H.dna)) +/proc/updateappearance(mob/living/carbon/C) + if(!check_dna_integrity(C)) return 0 - check_dna_integrity() - var/structure = H.dna.uni_identity - H.h_color = sanitize_hexcolor(getblock(structure, DNA_HAIR_COLOR_BLOCK)) - H.f_color = sanitize_hexcolor(getblock(structure, DNA_FACIAL_HAIR_COLOR_BLOCK)) - H.s_tone = skin_tones[deconstruct_block(getblock(structure, DNA_SKIN_TONE_BLOCK), skin_tones.len)] - H.eye_color = sanitize_hexcolor(getblock(structure, DNA_EYE_COLOR_BLOCK)) - H.gender = (deconstruct_block(getblock(structure, DNA_GENDER_BLOCK), 2)-1) ? MALE : FEMALE - H.f_style = facial_hair_styles_list[deconstruct_block(getblock(structure, DNA_FACIAL_HAIR_STYLE_BLOCK), facial_hair_styles_list.len)] - H.h_style = hair_styles_list[deconstruct_block(getblock(structure, DNA_HAIR_STYLE_BLOCK), hair_styles_list.len)] + + var/structure = C.dna.uni_identity + C.gender = (deconstruct_block(getblock(structure, DNA_GENDER_BLOCK), 2)-1) ? FEMALE : MALE + if(istype(C, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = C + H.h_color = sanitize_hexcolor(getblock(structure, DNA_HAIR_COLOR_BLOCK)) + H.f_color = sanitize_hexcolor(getblock(structure, DNA_FACIAL_HAIR_COLOR_BLOCK)) + H.skin_tone = skin_tones[deconstruct_block(getblock(structure, DNA_SKIN_TONE_BLOCK), skin_tones.len)] + H.eye_color = sanitize_hexcolor(getblock(structure, DNA_EYE_COLOR_BLOCK)) + H.f_style = facial_hair_styles_list[deconstruct_block(getblock(structure, DNA_FACIAL_HAIR_STYLE_BLOCK), facial_hair_styles_list.len)] + H.h_style = hair_styles_list[deconstruct_block(getblock(structure, DNA_HAIR_STYLE_BLOCK), hair_styles_list.len)] - H.update_body(0) - H.update_hair() + H.update_body() + H.update_hair() return 1 /proc/domutcheck(mob/living/carbon/M, connected, inj) @@ -392,7 +396,7 @@ del(animation) var/mob/living/carbon/human/O = new( src ) - O.gender = (deconstruct_block(getblock(M.dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? MALE : FEMALE + O.gender = (deconstruct_block(getblock(M.dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? FEMALE : MALE if(M) if(M.dna) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 30cc32c2d86..1a4a2d58886 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -36,7 +36,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) - var/const/changeling_amount = 4 + var/const/changeling_amount = 4 //hard limit on changelings if scaling is turned off + var/const/changeling_scaling_coeff = 10 //how much does the amount of players get divided by to determine changelings /datum/game_mode/changeling/announce() world << "The current game mode is - Changeling!" @@ -49,13 +50,20 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING) + var/num_changelings = 1 + + if(config.traitor_scaling) + num_changelings = max(1, round((num_players())/(changeling_scaling_coeff))) + else + num_changelings = max(1, min(num_players(), changeling_amount)) + for(var/datum/mind/player in possible_changelings) for(var/job in restricted_jobs)//Removing robots from the list if(player.assigned_role == job) possible_changelings -= player if(possible_changelings.len>0) - for(var/i = 0, i < changeling_amount, i++) + for(var/i = 0, i < num_changelings, i++) if(!possible_changelings.len) break var/datum/mind/changeling = pick(possible_changelings) possible_changelings -= changeling @@ -236,4 +244,4 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" if(dna_owner == DNA.real_name) chosen_dna = DNA break - return chosen_dna \ No newline at end of file + return chosen_dna diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index b4901597126..99aaebc39fa 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -75,8 +75,8 @@ src << "We must be grabbing a creature in our active hand to absorb them." return - var/mob/living/carbon/human/T = G.affecting - if(!istype(T)) + var/mob/living/carbon/T = G.affecting + if(!check_dna_integrity(T)) src << "[T] is not compatible with our biology." return @@ -305,7 +305,7 @@ W.layer = initial(W.layer) var/mob/living/carbon/human/O = new /mob/living/carbon/human( src ) - O.gender = (deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? MALE : FEMALE + O.gender = (deconstruct_block(getblock(dna.uni_identity, DNA_GENDER_BLOCK), 2)-1) ? FEMALE : MALE O.dna = dna dna = null O.real_name = chosen_dna.real_name @@ -695,7 +695,7 @@ var/list/datum/dna/hivemind_bank = list() var/mob/living/carbon/T = changeling_sting(40,/mob/living/carbon/proc/changeling_transformation_sting) if(!T) return 0 - if((HUSK in T.mutations) || (!ishuman(T) && !ismonkey(T))) + if((HUSK in T.mutations) || !check_dna_integrity(T)) src << "Our sting appears ineffective against its DNA." return 0 T.visible_message("[T] transforms!") @@ -706,19 +706,6 @@ var/list/datum/dna/hivemind_bank = list() feedback_add_details("changeling_powers","TS") return 1 -/mob/living/carbon/proc/changeling_unfat_sting() - set category = "Changeling" - set name = "Unfat sting (5)" - set desc = "Sting target" - - var/mob/living/carbon/T = changeling_sting(5,/mob/living/carbon/proc/changeling_unfat_sting) - if(!T) return 0 - T << "you feel a small prick as stomach churns violently and you become to feel skinnier." - T.overeatduration = 0 - T.nutrition -= 100 - feedback_add_details("changeling_powers","US") - return 1 - /mob/living/carbon/proc/changeling_DEATHsting() set category = "Changeling" set name = "Death Sting (40)" diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index 34a2e978276..ec15b284143 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -118,12 +118,6 @@ var/list/powerinstances genomecost = 10 verbpath = /mob/living/carbon/proc/changeling_DEATHsting -/datum/power/changeling/unfat_sting - name = "Unfat Sting" - desc = "We silently sting a human, forcing them to rapidly metabolize their fat." - genomecost = 1 - verbpath = /mob/living/carbon/proc/changeling_unfat_sting - /datum/power/changeling/boost_range name = "Boost Range" desc = "We evolve the ability to shoot our stingers at humans, with some preperation." diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index 6ddbb223978..1928ee303f5 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -7,9 +7,12 @@ required_enemies = 2 recommended_enemies = 3 + var/const/changeling_amount = 1 //hard limit on changelings if scaling is turned off + var/const/changeling_scaling_coeff = 25 //how much does the amount of players get divided by to determine changelings + /datum/game_mode/traitor/changeling/announce() world << "The current game mode is - Traitor+Changeling!" - world << "There is an alien creature on the station along with some syndicate operatives out for their own gain! Do not let the changeling and the traitors succeed!" + world << "There are alien creatures on the station along with some syndicate operatives out for their own gain! Do not let the changelings or the traitors succeed!" /datum/game_mode/traitor/changeling/pre_setup() @@ -18,16 +21,25 @@ var/list/datum/mind/possible_changelings = get_players_for_role(BE_CHANGELING) + var/num_changelings = 1 + + if(config.traitor_scaling) + num_changelings = max(1, round((num_players())/(changeling_scaling_coeff))) + else + num_changelings = max(1, min(num_players(), changeling_amount)) + for(var/datum/mind/player in possible_changelings) for(var/job in restricted_jobs)//Removing robots from the list if(player.assigned_role == job) possible_changelings -= player if(possible_changelings.len>0) - var/datum/mind/changeling = pick(possible_changelings) - //possible_changelings-=changeling - changelings += changeling - modePlayer += changelings + for(var/j = 0, j < num_changelings, j++) + if(!possible_changelings.len) break + var/datum/mind/changeling = pick(possible_changelings) + possible_changelings -= changeling + changelings += changeling + modePlayer += changelings return ..() else return 0 diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index c6eae94fe57..1d3ebb0c812 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -20,7 +20,7 @@ var/organ = ((user.hand ? "l_":"r_") + "arm") var/datum/limb/affecting = user.get_organ(organ) if(affecting.take_damage(rand(force/2, force))) //random amount of damage between half of the blade's force and the full force of the blade. - user.UpdateDamageIcon(0) + user.update_damage_overlays(0) return /obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 1c53e6a5273..03b927690bd 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -278,7 +278,7 @@ var/list/sacrificed = list() // corpse_to_raise.update_inv_handcuffed(0) corpse_to_raise.stat = CONSCIOUS corpse_to_raise.updatehealth() - corpse_to_raise.UpdateDamageIcon(0) + corpse_to_raise.update_damage_overlays(0) corpse_to_raise.key = ghost.key //the corpse will keep its old mind! but a new player takes ownership of it (they are essentially possessed) //This means, should that player leave the body, the original may re-enter diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index a319e83421e..ee42ee6d391 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -41,6 +41,7 @@ user.take_organ_damage(5, 0) if(src && src.imbue!="supply" && src.imbue!="runestun") if(delete) + user.drop_item(src) del(src) return else @@ -53,6 +54,7 @@ if(imbue == "runestun") user.take_organ_damage(5, 0) call(/obj/effect/rune/proc/runestun)(T) + user.drop_item(src) del(src) else ..() ///If its some other talisman, use the generic attack code, is this supposed to work this way? diff --git a/code/game/gamemodes/sandbox/airlock_maker.dm b/code/game/gamemodes/sandbox/airlock_maker.dm new file mode 100644 index 00000000000..adde1d030f2 --- /dev/null +++ b/code/game/gamemodes/sandbox/airlock_maker.dm @@ -0,0 +1,138 @@ +/* + This is for the sandbox for now, + maybe useful later for an actual thing? + -Sayu +*/ + +obj/structure/door_assembly + var/datum/airlock_maker/maker = null + + attack_hand() + ..() + if(maker) + maker.interact() + +datum/airlock_maker + var/obj/structure/door_assembly/linked = null + + var/list/access_used = null + var/require_all = 1 + + var/paintjob = "none" + var/glassdoor = 0 + + var/doorname = "Airlock" + + New(var/atom/target_loc) + linked = new(target_loc) + linked.maker = src + linked.anchored = 0 + access_used = list() + + interact() + + proc/linkpretty(href,desc,active) + if(!desc) + var/static/list/defaults = list("No","Yes") + desc = defaults[active+1] + if(active) + return "[desc]" + return "[desc]" + + proc/interact() + var/list/leftcolumn = list() + var/list/rightcolumn = list() + leftcolumn += "Required Access" + for(var/access in get_all_accesses()) + leftcolumn += linkpretty("access=[access]",get_access_desc(access),access in access_used) + leftcolumn += "Require all listed accesses: [linkpretty("reqall",null,require_all)]" + + rightcolumn += "Paintjob" + for(var/option in list("none","engineering","atmos","security","command","medical","research","mining","maintenance","external","highsecurity")) + rightcolumn += linkpretty("paint=[option]",option,option == paintjob) + rightcolumn += "Glass door: " + linkpretty("glass",null,glassdoor) + "

" + var/length = max(leftcolumn.len,rightcolumn.len) + + var/dat = "You may move the model airlock around. A new airlock will be built in its space when you click done, below.

" + dat += "Door name: \"[doorname]\"" + dat += "" + for(var/i=1; i<=length; i++) + dat += "" + + dat += "
" + if(i<=leftcolumn.len) + dat += leftcolumn[i] + dat += "" + if(i<=rightcolumn.len) + dat += rightcolumn[i] + dat += "

Finalize Airlock Construction | Cancel and Destroy Airlock" + usr << browse(dat,"window=airlockmaker") + + Topic(var/href,var/list/href_list) + if(!usr) return + if(!src || !linked || !linked.loc) + usr << browse(null,"window=airlockmaker") + return + + if("rename" in href_list) + var/newname = input(usr,"New airlock name:","Name the airlock",doorname) as null|text + if(newname) + doorname = newname + if("access" in href_list) + var/value = text2num(href_list["access"]) + access_used ^= value + if("reqall" in href_list) + require_all = !require_all + if("paint" in href_list) + paintjob = href_list["paint"] + if("glass" in href_list) + glassdoor = !glassdoor + + if("cancel" in href_list) + usr << browse(null,"window=airlockmaker") + del linked + del src + return + + if("done" in href_list) + usr << browse(null,"window=airlockmaker") + var/turf/t_loc = linked.loc + del linked + if(!istype(t_loc)) + return + + var/target_type = "/obj/machinery/door/airlock" + if(glassdoor) + if(paintjob != "none") + if(paintjob in list("external","highsecurity","maintenance")) // no glass version + target_type += "/[paintjob]" + else + target_type += "/glass_[paintjob]" + else + target_type += "/glass" + else if(paintjob != "none") + target_type += "/[paintjob]" + var/final = target_type + target_type = text2path(final) + if(!target_type) + usr << "Didn't work, contact Sayu with this: [final]" + usr << browse(null,"window=airlockmaker") + return + + var/obj/machinery/door/D = new target_type(t_loc) + + D.name = doorname + + if(access_used.len == 0) + D.req_access = null + D.req_one_access = null + else if(require_all) + D.req_access = access_used.Copy() + D.req_one_access = null + else + D.req_access = null + D.req_one_access = access_used.Copy() + + return + + interact() \ No newline at end of file diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 439befdc63a..285c6b84e90 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -1,19 +1,6 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 var/hsboxspawn = 1 -var/list - hrefs = list( - "hsbsuit" = "Suit Up (Space Travel Gear)", - "hsbmetal" = "Spawn 50 Metal", - "hsbglass" = "Spawn 50 Glass", - "hsbairlock" = "Spawn Airlock", - "hsbregulator" = "Spawn Air Regulator", - "hsbfilter" = "Spawn Air Filter", - "hsbcanister" = "Spawn Canister", - "hsbfueltank" = "Spawn Welding Fuel Tank", - "hsbwater tank" = "Spawn Water Tank", - "hsbtoolbox" = "Spawn Toolbox", - "hsbmedkit" = "Spawn Medical Kit") mob var/datum/hSB/sandbox = null @@ -26,128 +13,276 @@ mob sandbox.admin = 1 verbs += new/mob/proc/sandbox_panel sandbox_panel() + set name = "Sandbox Panel" if(sandbox) sandbox.update() datum/hSB var/owner = null var/admin = 0 + + var/clothinfo = null + var/reaginfo = null + var/objinfo = null + var/canisterinfo = null + var/hsbinfo = null + + var/global/list/spawn_forbidden = list( + /obj/item/weapon/grab, /obj/item/tk_grab, /obj/item/weapon/dummy, /obj/item/weapon/implant, // not implanter, the actual thing that is inside you + /obj/item/assembly,/obj/item/device/onetankbomb, /obj/item/radio, /obj/item/device/pda/ai, + /obj/item/device/uplink/hidden, /obj/item/smallDelivery, /obj/item/missile,/obj/item/projectile, + /obj/item/borg/sight,/obj/item/borg/overdrive,/obj/item/borg/stun) + proc update() - var/hsbpanel = "
h_Sandbox Panel

" - if(admin) - hsbpanel += "Administration Tools:
" - hsbpanel += "- Toggle Object Spawning

" - hsbpanel += "Regular Tools:
" - for(var/T in hrefs) - hsbpanel += "- [hrefs[T]]
" - if(hsboxspawn) - hsbpanel += "- Spawn Object

" - usr << browse(hsbpanel, "window=hsbpanel") + var/global/list/hrefs = list( + "Space Gear", + "Suit Up (Space Travel Gear)" = "hsbsuit", + "Spawn Gas Mask" = "hsbspawn&path=[/obj/item/clothing/mask/gas]", + "Spawn Emergency Air Tank" = "hsbspawn&path=[/obj/item/weapon/tank/emergency_oxygen/double]", + + "Standard Tools", + "Spawn Flashlight" = "hsbspawn&path=[/obj/item/device/flashlight]", + "Spawn Toolbox" = "hsbspawn&path=[/obj/item/weapon/storage/toolbox/mechanical]", + "Spawn Light Replacer" = "hsbspawn&path=[/obj/item/device/lightreplacer]", + "Spawn Medical Kit" = "hsbspawn&path=[/obj/item/weapon/storage/firstaid/regular]", + "Spawn All-Access ID" = "hsbaaid", + + "Building Supplies", + "Spawn 50 Metal" = "hsbmetal", + "Spawn 50 Plasteel" = "hsbplasteel", + "Spawn 50 Glass" = "hsbglass", + "Spawn Full Cable Coil" = "hsbspawn&path=[/obj/item/weapon/cable_coil]", + "Spawn Hyper Capacity Power Cell" = "hsbspawn&path=[/obj/item/weapon/cell/hyper]", + "Spawn Rapid Construction Device" = "hsbrcd", + "Spawn RCD Ammo" = "hsb_safespawn&path=[/obj/item/weapon/rcd_ammo]", + "Spawn Airlock" = "hsbairlock", + + "Miscellaneous", + "Spawn Air Scrubber" = "hsbscrubber", + "Spawn Canister..." = "hsbcanister", + "Spawn Welding Fuel Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/fueltank]", + "Spawn Water Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/watertank]", + + "Bots", + "Spawn Cleanbot" = "hsbspawn&path=[/obj/machinery/bot/cleanbot]", + "Spawn Floorbot" = "hsbspawn&path=[/obj/machinery/bot/floorbot]", + "Spawn Medbot" = "hsbspawn&path=[/obj/machinery/bot/medbot]") + + + if(!hsbinfo) + hsbinfo = "
Sandbox Panel

" + if(admin) + hsbinfo += "Administration
" + hsbinfo += "- Toggle Object Spawning
" + hsbinfo += "- Toggle Item Spawn Panel Auto-close
" + else + hsbinfo += "Some item spawning may be disabled by the administrators.
" + for(var/T in hrefs) + var/href = hrefs[T] + if(href) + hsbinfo += "- [T]
" + else + hsbinfo += "
[T]
" + hsbinfo += "
" + hsbinfo += "- Spawn Clothing...
" + hsbinfo += "- Spawn Reagent Container...
" + hsbinfo += "- Spawn Other Item...

" + + usr << browse(hsbinfo, "window=hsbpanel") + Topic(href, href_list) - if(!(src.owner == usr.ckey)) return - if(!usr) return //I guess this is possible if they log out or die with the panel open? It happened. + if(!usr || !src || !(src.owner == usr.ckey)) + if(usr) + usr << browse(null,"window=sandbox") + return + if(href_list["hsb"]) switch(href_list["hsb"]) + // + // Admin: toggle spawning + // if("hsbtobj") if(!admin) return if(hsboxspawn) - world << "Sandbox: [usr.key] has disabled object spawning!" + world << "\red Sandbox: \black[usr.key] has disabled object spawning!" hsboxspawn = 0 return - if(!hsboxspawn) - world << "Sandbox: [usr.key] has enabled object spawning!" + else + world << "\blue Sandbox: \black[usr.key] has enabled object spawning!" hsboxspawn = 1 return + // + // Admin: Toggle auto-close + // + if("hsbtac") + if(!admin) return + if(config.sandbox_autoclose) + world << "\blue Sandbox: \black [usr.key] has removed the object spawn limiter." + config.sandbox_autoclose = 0 + else + world << "\red Sandbox: \black [usr.key] has added a limiter to object spawning. The window will now auto-close after use." + config.sandbox_autoclose = 1 + return + + // + // Spacesuit with full air jetpack set as internals + // if("hsbsuit") var/mob/living/carbon/human/P = usr + if(!istype(P)) return if(P.wear_suit) P.wear_suit.loc = P.loc P.wear_suit.layer = initial(P.wear_suit.layer) P.wear_suit = null P.wear_suit = new/obj/item/clothing/suit/space(P) P.wear_suit.layer = 20 + P.update_inv_wear_suit() if(P.head) P.head.loc = P.loc P.head.layer = initial(P.head.layer) P.head = null P.head = new/obj/item/clothing/head/helmet/space(P) P.head.layer = 20 + P.update_inv_head() if(P.wear_mask) P.wear_mask.loc = P.loc P.wear_mask.layer = initial(P.wear_mask.layer) P.wear_mask = null P.wear_mask = new/obj/item/clothing/mask/gas(P) P.wear_mask.layer = 20 + P.update_inv_wear_mask() if(P.back) P.back.loc = P.loc P.back.layer = initial(P.back.layer) P.back = null - P.back = new/obj/item/weapon/tank/jetpack(P) + P.back = new/obj/item/weapon/tank/jetpack/oxygen(P) P.back.layer = 20 + P.update_inv_back() P.internal = P.back + if(P.internals) + P.internals.icon_state = "internal1" + + if("hsbscrubber") // This is beyond its normal capability but this is sandbox and you spawned one, I assume you need it + var/obj/hsb = new/obj/machinery/portable_atmospherics/scrubber{volume_rate=50*ONE_ATMOSPHERE;on=1}(usr.loc) + hsb.update_icon() // hackish but it wasn't meant to be spawned I guess? + if("hsbmetal") - var/obj/item/stack/sheet/hsb = new/obj/item/stack/sheet/metal - hsb.amount = 50 - hsb.loc = usr.loc + new/obj/item/stack/sheet/metal{amount=50}(usr.loc) + + if("hsbplasteel") + new/obj/item/stack/sheet/plasteel{amount=50}(usr.loc) + if("hsbglass") - var/obj/item/stack/sheet/hsb = new/obj/item/stack/sheet/glass - hsb.amount = 50 - hsb.loc = usr.loc + new/obj/item/stack/sheet/glass{amount=50}(usr.loc) + + // + // All access ID + // + if("hsbaaid") + var/obj/item/weapon/card/id/gold/ID = new(usr.loc) + ID.registered_name = usr.real_name + ID.assignment = "Sandbox" + ID.access = get_all_accesses() + ID.name = "[ID.registered_name]'s ID Card ([ID.assignment])" + + // + // RCD - starts with full clip + // Spawn check due to grief potential (destroying floors, walls, etc) + // + if("hsbrcd") + if(!hsboxspawn) return + + new/obj/item/weapon/rcd{matter=30;canRwall=1}(usr.loc) + + // + // New sandbox airlock maker + // if("hsbairlock") - var/obj/machinery/door/hsb = new/obj/machinery/door/airlock + new /datum/airlock_maker(usr.loc) - //TODO: DEFERRED make this better, with an HTML window or something instead of 15 popups - hsb.req_access = list() - var/accesses = get_all_accesses() - for(var/A in accesses) - if(alert(usr, "Will this airlock require [get_access_desc(A)] access?", "Sandbox:", "Yes", "No") == "Yes") - hsb.req_access += A - - hsb.loc = usr.loc - usr << "Sandbox: Created an airlock." + // + // Canister select window + // if("hsbcanister") - var/list/hsbcanisters = typesof(/obj/machinery/portable_atmospherics/canister/) - /obj/machinery/portable_atmospherics/canister/ - var/hsbcanister = input(usr, "Choose a canister to spawn.", "Sandbox:") in hsbcanisters + "Cancel" - if(!(hsbcanister == "Cancel")) - new hsbcanister(usr.loc) - if("hsbfueltank") - //var/obj/hsb = new/obj/weldfueltank - //hsb.loc = usr.loc - if("hsbwatertank") - //var/obj/hsb = new/obj/watertank - //hsb.loc = usr.loc - if("hsbtoolbox") - var/obj/item/weapon/storage/hsb = new/obj/item/weapon/storage/toolbox/mechanical - for(var/obj/item/device/radio/T in hsb) - del(T) - new/obj/item/weapon/crowbar (hsb) - hsb.loc = usr.loc - if("hsbmedkit") - var/obj/item/weapon/storage/firstaid/hsb = new/obj/item/weapon/storage/firstaid/regular - hsb.loc = usr.loc + if(!canisterinfo) + canisterinfo = "Choose a canister type:
" + for(var/O in (typesof(/obj/machinery/portable_atmospherics/canister/) - /obj/machinery/portable_atmospherics/canister/)) + canisterinfo += "[O]
" + usr << browse(canisterinfo,"window=sandbox") + + // + // Object spawn window + // + + // Clothing + if("hsbcloth") + if(!hsboxspawn) return + + if(!clothinfo) + clothinfo = "Clothing (Reagent Containers) (Other Items)

" + var/list/all_items = typesof(/obj/item/clothing) - /obj/item/clothing + for(var/typekey in spawn_forbidden) + all_items -= typesof(typekey) + for(var/O in reverselist(all_items)) + clothinfo += "[O]
" + + usr << browse(clothinfo,"window=sandbox") + + // Reagent containers + if("hsbreag") + if(!hsboxspawn) return + + if(!reaginfo) + reaginfo = "Reagent Containers (Clothing) (Other Items)

" + var/list/all_items = typesof(/obj/item/weapon/reagent_containers) - /obj/item/weapon/reagent_containers + for(var/typekey in spawn_forbidden) + all_items -= typesof(typekey) + for(var/O in reverselist(all_items)) + reaginfo += "[O]
" + + usr << browse(reaginfo,"window=sandbox") + + // Other items if("hsbobj") if(!hsboxspawn) return - var/list/selectable = list() - for(var/O in typesof(/obj/item/)) - //Note, these istypes don't work - if(istype(O, /obj/item/weapon/gun)) - continue - if(istype(O, /obj/item/assembly)) - continue - if(istype(O, /obj/item/device/camera)) - continue - if(istype(O, /obj/item/weapon/cloaking_device)) - continue - if(istype(O, /obj/item/weapon/dummy)) - continue - if(istype(O, /obj/item/weapon/melee/energy/sword)) - continue - if(istype(O, /obj/structure)) - continue - selectable += O + if(!objinfo) + objinfo = "Other Items (Clothing) (Reagent Containers)

" + var/list/all_items = typesof(/obj/item/) - typesof(/obj/item/clothing) - typesof(/obj/item/weapon/reagent_containers) - /obj/item + for(var/typekey in spawn_forbidden) + all_items -= typesof(typekey) - var/hsbitem = input(usr, "Choose an object to spawn.", "Sandbox:") in selectable + "Cancel" - if(hsbitem != "Cancel") - new hsbitem(usr.loc) + for(var/O in reverselist(all_items)) + objinfo += "[O]
" + + usr << browse(objinfo,"window=sandbox") + + // + // Safespawn checks to see if spawning is disabled. + // + if("hsb_safespawn") + if(!hsboxspawn) + usr << browse(null,"window=sandbox") + return + + var/typepath = text2path(href_list["path"]) + if(!typepath) + usr << "Bad path: \"[href_list["path"]]\"" + return + new typepath(usr.loc) + + if(config.sandbox_autoclose) + usr << browse(null,"window=sandbox") + // + // For everything else in the href list + // + if("hsbspawn") + var/typepath = text2path(href_list["path"]) + if(!typepath) + usr << "Bad path: \"[href_list["path"]]\"" + return + new typepath(usr.loc) + + if(config.sandbox_autoclose) + usr << browse(null,"window=sandbox") diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 9e7483e96d2..1b6f936b6c6 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -24,7 +24,7 @@ /datum/game_mode/traitor/announce() world << "The current game mode is - Traitor!" - world << "There is a syndicate traitor on the station. Do not let the traitor succeed!" + world << "There are syndicate traitors on the station. Do not let the traitors succeed!" /datum/game_mode/traitor/pre_setup() diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index e2cf380a9cc..5f2c56d9b4e 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -16,6 +16,7 @@ if(!H) return 0 if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) + H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_srv(H), slot_ears) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform) @@ -54,6 +55,7 @@ equip(var/mob/living/carbon/human/H) if(!H) return 0 + H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_srv(H), slot_ears) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) @@ -78,6 +80,7 @@ equip(var/mob/living/carbon/human/H) if(!H) return 0 + H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_srv(H), slot_ears) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/hydroponics(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/botanic_leather(H), slot_gloves) diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index a587472d74a..c62958f84db 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -67,14 +67,13 @@ var/list/engineering_positions = list( "Chief Engineer", "Station Engineer", "Atmospheric Technician", - "Roboticist" ) var/list/medical_positions = list( "Chief Medical Officer", "Medical Doctor", - "Geneticist", + "Geneticist", //Part of both medical and science "Virologist", "Chemist" ) @@ -84,7 +83,7 @@ var/list/science_positions = list( "Research Director", "Scientist", "Geneticist", //Part of both medical and science - "Roboticist" //Part of both engineering and science + "Roboticist" ) diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 8f56a805db5..cecbf903b3e 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -201,7 +201,7 @@ var/global/mulebot_count = 0 if(5,6) dat += "Calculating navigation path" if(7) - dat += "Unable to locate destination" + dat += "Unable to reach destination" dat += "" dat += "Current Load: [load ? load.name : "none"]
" @@ -225,7 +225,7 @@ var/global/mulebot_count = 0 if(load) dat += "Unload Now
" - dat += "
The maintenance hatch is closed
" + dat += "
The maintenance hatch is closed.
" else if(!ai) @@ -590,7 +590,7 @@ var/global/mulebot_count = 0 blockcount++ mode = 4 if(blockcount == 3) - src.visible_message("[src] makes an annoyed buzzing sound", "You hear an electronic buzzing sound.") + src.visible_message("[src] makes an annoyed buzzing sound.", "You hear an electronic buzzing sound.") playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) if(blockcount > 5) // attempt 5 times before recomputing @@ -608,7 +608,7 @@ var/global/mulebot_count = 0 return return else - src.visible_message("[src] makes an annoyed buzzing sound", "You hear an electronic buzzing sound.") + src.visible_message("[src] makes an annoyed buzzing sound.", "You hear an electronic buzzing sound.") playsound(src.loc, 'sound/machines/buzz-two.ogg', 50, 0) //world << "Bad turf." mode = 5 diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index f99404b6636..07eb9b67622 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,6 +1,6 @@ /obj/machinery/computer/arcade name = "arcade machine" - desc = "Does not support Pin ball." + desc = "Does not support Pinball." icon = 'icons/obj/computer.dmi' icon_state = "arcade" circuit = "/obj/item/weapon/circuitboard/arcade" diff --git a/code/game/machinery/computer/hologram.dm b/code/game/machinery/computer/hologram.dm index 4c6b5bb6380..7254b0b6380 100644 --- a/code/game/machinery/computer/hologram.dm +++ b/code/game/machinery/computer/hologram.dm @@ -27,14 +27,13 @@ return /obj/machinery/computer/hologram_comp/proc/render() - var/icon/I = new /icon('icons/mob/human.dmi', "body_m_s") + var/icon/I = new /icon('icons/mob/human.dmi', "[skin_tones[1]]_m_s") if (src.lumens >= 0) I.Blend(rgb(src.lumens, src.lumens, src.lumens), ICON_ADD) else I.Blend(rgb(- src.lumens, -src.lumens, -src.lumens), ICON_SUBTRACT) - I.Blend(new /icon('icons/mob/human.dmi', "mouth_m_s"), ICON_OVERLAY) I.Blend(new /icon('icons/mob/underwear.dmi', "Mens White"), ICON_OVERLAY) var/icon/U = new /icon('icons/mob/human_face.dmi', "hair_a_s") diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 0c66a20dd71..6efb1692312 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -626,7 +626,7 @@ About the new airlock wires panel: H.Stun(8) H.Weaken(5) if(affecting.take_damage(10, 0)) - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) else visible_message("\red [user] headbutts the airlock. Good thing they're wearing a helmet.") return diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm index e78f81548ee..3dd751a1911 100644 --- a/code/game/machinery/kitchen/microwave.dm +++ b/code/game/machinery/kitchen/microwave.dm @@ -26,22 +26,20 @@ ********************/ /obj/machinery/microwave/New() - //..() //do not need this - reagents = new/datum/reagents(100) - reagents.my_atom = src - if (!available_recipes) + create_reagents(100) + if(!available_recipes) available_recipes = new - for (var/type in (typesof(/datum/recipe)-/datum/recipe)) - available_recipes+= new type + for(var/type in (typesof(/datum/recipe) - /datum/recipe)) + available_recipes += new type acceptable_items = new acceptable_reagents = new - for (var/datum/recipe/recipe in available_recipes) - for (var/item in recipe.items) + for(var/datum/recipe/recipe in available_recipes) + for(var/item in recipe.items) acceptable_items |= item - for (var/reagent in recipe.reagents) + for(var/reagent in recipe.reagents) acceptable_reagents |= reagent - if (recipe.items) - max_n_of_items = max(max_n_of_items,recipe.items.len) + if(recipe.items) + max_n_of_items = max(max_n_of_items, recipe.items.len) /******************* * Item Adding diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 881db20c87c..6738fe6ef3b 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -95,15 +95,15 @@ iconholder = 1 eprojectile = /obj/item/projectile/beam - if(/obj/item/weapon/gun/energy/laser/practice/sc_laser) - iconholder = 1 - eprojectile = /obj/item/projectile/beam +// if(/obj/item/weapon/gun/energy/laser/practice/sc_laser) +// iconholder = 1 +// eprojectile = /obj/item/projectile/beam if(/obj/item/weapon/gun/energy/laser/retro) iconholder = 1 - if(/obj/item/weapon/gun/energy/laser/retro/sc_retro) - iconholder = 1 +// if(/obj/item/weapon/gun/energy/laser/retro/sc_retro) +// iconholder = 1 if(/obj/item/weapon/gun/energy/laser/captain) iconholder = 1 diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 4e9d980c614..d50dfff32fa 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -348,8 +348,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept freq_text = "Engineering" if(SEC_FREQ) freq_text = "Security" -// if(1349) -// freq_text = "Mining" + if(1349) + freq_text = "Service" if(1347) freq_text = "Supply" //There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO @@ -411,8 +411,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept blackbox.msg_deathsquad += blackbox_msg if(1213) blackbox.msg_syndicate += blackbox_msg -// if(1349) -// blackbox.msg_mining += blackbox_msg + if(1349) + blackbox.msg_service += blackbox_msg if(1347) blackbox.msg_cargo += blackbox_msg else @@ -634,8 +634,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept freq_text = "Engineering" if(SEC_FREQ) freq_text = "Security" -// if(1349) -// freq_text = "Mining" + if(1349) + freq_text = "Service" if(1347) freq_text = "Supply" //There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO @@ -692,8 +692,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept blackbox.msg_deathsquad += blackbox_msg if(1213) blackbox.msg_syndicate += blackbox_msg -// if(1349) -// blackbox.msg_mining += blackbox_msg + if(1349) + blackbox.msg_service += blackbox_msg if(1347) blackbox.msg_cargo += blackbox_msg else diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 0cd533cf274..4cce0abc451 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -30,7 +30,7 @@ id = "Hub" network = "tcommsat" autolinkers = list("hub", "relay", "s_relay", "m_relay", "r_relay", "science", "medical", - "supply", "common", "command", "engineering", "security", + "supply", "service", "common", "command", "engineering", "security", "receiverA", "receiverB", "broadcasterA", "broadcasterB") //Receivers @@ -41,7 +41,7 @@ id = "Receiver A" network = "tcommsat" autolinkers = list("receiverA") // link to relay - freq_listening = list(1351, 1355, 1347) // science, medical, supply + freq_listening = list(1351, 1355, 1347, 1349) // science, medical, supply, service //--PRESET RIGHT--// @@ -70,8 +70,8 @@ /obj/machinery/telecomms/bus/preset_two id = "Bus 2" network = "tcommsat" - freq_listening = list(1347) - autolinkers = list("processor2", "supply") + freq_listening = list(1347,1349) + autolinkers = list("processor2", "supply", "service") /obj/machinery/telecomms/bus/preset_three id = "Bus 3" @@ -132,12 +132,12 @@ id = "Supply Server" freq_listening = list(1347) autolinkers = list("supply") -/* -/obj/machinery/telecomms/server/presets/mining - id = "Mining Server" + +/obj/machinery/telecomms/server/presets/service + id = "Service Server" freq_listening = list(1349) - autolinkers = list("mining") -*/ + autolinkers = list("service") + /obj/machinery/telecomms/server/presets/common id = "Common Server" freq_listening = list() diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 6b2d9e44f4b..32e37245ce1 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -159,10 +159,11 @@ do_teleport(M, com.locked) if(ishuman(M))//don't remove people from the round randomly you jerks var/mob/living/carbon/human/human = M - if(human.dna.mutantrace == null) + if(human.dna && !human.dna.mutantrace) M << "You hear a buzzing in your ears." human.dna.mutantrace = "fly" - human.update_mutantrace() + human.update_body() + human.update_hair() human.apply_effect((rand(90, 150)), IRRADIATE, 0) randmutb(human) domutcheck(human, null) @@ -367,4 +368,4 @@ if(com) com.icon_state = "tele0" else - icon_state = "controller" \ No newline at end of file + icon_state = "controller" diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 3e60a776835..d571ee97cde 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -58,7 +58,7 @@ H.reagents.add_reagent("cryptobiolin", force) else return - if(update) H.UpdateDamageIcon(0) + if(update) H.update_damage_overlays(0) H.updatehealth() else diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index ddef7f9a516..dccc0c2c84d 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -185,8 +185,7 @@ range = MELEE|RANGED New() - reagents = new/datum/reagents(200) - reagents.my_atom = src + create_reagents(200) reagents.add_reagent("water", 200) ..() return diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 96e1c07ba36..2919abd0090 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -1,10 +1,10 @@ /obj/effect/decal/point name = "arrow" - desc = "It's an arrow hanging in mid-air. There may be a wizard about." icon = 'icons/mob/screen_gen.dmi' icon_state = "arrow" - layer = 16.0 + layer = 16 anchored = 1 + mouse_opacity = 0 /obj/effect/decal/point/point() set src in oview() diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index fc066e87eaf..2d0ed4781c2 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -447,9 +447,7 @@ steam.start() -- spawns the effect /obj/effect/effect/chem_smoke/New() ..() - var/datum/reagents/R = new/datum/reagents(500) - reagents = R - R.my_atom = src + create_reagents(500) spawn (200+rand(10,30)) delete() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 56956f5e557..00c0922bd57 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,7 +1,6 @@ /obj/item name = "item" icon = 'icons/obj/items.dmi' - var/icon/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite var/abstract = 0 var/item_state = null var/r_speed = 1.0 @@ -385,14 +384,6 @@ if(ishuman(M)) //START HUMAN var/mob/living/carbon/human/H = M - - if(istype(src, /obj/item/clothing/under) || istype(src, /obj/item/clothing/suit)) - if(FAT in H.mutations) - if(!(flags & ONESIZEFITSALL)) - if(!disable_warning) - H << "\red You're too fat to wear the [name]." - return 0 - switch(slot) if(slot_l_hand) if(H.l_hand) @@ -649,7 +640,7 @@ if(istype(M, /mob/living/carbon/human)) var/datum/limb/affecting = M:get_organ("head") if(affecting.take_damage(7)) - M:UpdateDamageIcon(0) + M:update_damage_overlays(0) else M.take_organ_damage(7) M.eye_blurry += rand(3,4) @@ -674,8 +665,14 @@ /obj/item/clean_blood() . = ..() - if(blood_overlay) - overlays.Remove(blood_overlay) - if(istype(src, /obj/item/clothing/gloves)) - var/obj/item/clothing/gloves/G = src - G.transfer_blood = 0 \ No newline at end of file + if(.) + if(initial(icon) && initial(icon_state)) + var/index = blood_splatter_index() + var/icon/blood_splatter_icon = blood_splatter_icons[index] + if(blood_splatter_icon) + overlays -= blood_splatter_icon + +/obj/item/clothing/gloves/clean_blood() + . = ..() + if(.) + transfer_blood = 0 \ No newline at end of file diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index e156a258c78..fb4d9993387 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -18,103 +18,120 @@ var/max_power = 1e8 // maximum power that can be drained before exploding var/mode = 0 // 0 = off, 1=clamped (off), 2=operating + var/const/DISCONNECTED = 0 + var/const/CLAMPED_OFF = 1 + var/const/OPERATING = 2 var/obj/structure/cable/attached // the attached cable - attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/weapon/screwdriver)) - if(mode == 0) - var/turf/T = loc - if(isturf(T) && !T.intact) - attached = locate() in T - if(!attached) - user << "No exposed cable here to attach to." - return - else - anchored = 1 - mode = 1 - user << "You attach the device to the cable." - for(var/mob/M in viewers(user)) - if(M == user) continue - M << "[user] attaches the power sink to the cable." - return - else - user << "Device must be placed over an exposed cable to attach to it." - return - else - if (mode == 2) - processing_objects.Remove(src) // Now the power sink actually stops draining the station's power if you unhook it. --NeoFite - anchored = 0 - mode = 0 - user << "You detach the device from the cable." - for(var/mob/M in viewers(user)) - if(M == user) continue - M << "[user] detaches the power sink from the cable." - SetLuminosity(0) - icon_state = "powersink0" +/obj/item/device/powersink/update_icon() + icon_state = "powersink[mode == OPERATING]" +/obj/item/device/powersink/proc/set_mode(value) + if(value == mode) + return + switch(value) + if(DISCONNECTED) + attached = null + if(mode == OPERATING) + processing_objects.Remove(src) + anchored = 0 + + if(CLAMPED_OFF) + if(!attached) return + if(mode == OPERATING) + processing_objects.Remove(src) + anchored = 1 + + if(OPERATING) + if(!attached) + return + processing_objects.Add(src) + anchored = 1 + + mode = value + update_icon() + SetLuminosity(0) + +/obj/item/device/powersink/attackby(var/obj/item/I, var/mob/user) + if(istype(I, /obj/item/weapon/screwdriver)) + if(mode == DISCONNECTED) + var/turf/T = loc + if(isturf(T) && !T.intact) + attached = locate() in T + if(!attached) + user << "No exposed cable here to attach to." + else + set_mode(CLAMPED_OFF) + user.visible_message( \ + "[user] attaches \the [src] to the cable.", \ + "You attach \the [src] to the cable.", + "You hear some wires being connected to something.") + else + user << "Device must be placed over an exposed cable to attach to it." else + set_mode(DISCONNECTED) + user.visible_message( \ + "[user] detaches \the [src] from the cable.", \ + "You detach \the [src] from the cable.", + "You hear some wires being disconnected from something.") + else + ..() + +/obj/item/device/powersink/attack_paw() + return + +/obj/item/device/powersink/attack_ai() + return + +/obj/item/device/powersink/attack_hand(var/mob/user) + switch(mode) + if(DISCONNECTED) ..() + if(CLAMPED_OFF) + user.visible_message( \ + "[user] activates \the [src]!", \ + "You activate \the [src]!", + "You hear a click.") + set_mode(OPERATING) + if(OPERATING) + user.visible_message( \ + "[user] deactivates \the [src]!", \ + "You deactivate \the [src]!", + "You hear a click.") + set_mode(CLAMPED_OFF) - attack_paw() +/obj/item/device/powersink/process() + if(!attached) + set_mode(DISCONNECTED) return - attack_ai() - return + var/datum/powernet/PN = attached.get_powernet() + if(PN) + SetLuminosity(5) - attack_hand(var/mob/user) - switch(mode) - if(0) - ..() + // found a powernet, so drain up to max power from it - if(1) - user << "You activate the device!" - for(var/mob/M in viewers(user)) - if(M == user) continue - M << "[user] activates the power sink!" - mode = 2 - icon_state = "powersink1" - processing_objects.Add(src) + var/drained = min ( drain_rate, PN.avail ) + PN.newload += drained + power_drained += drained - if(2) //This switch option wasn't originally included. It exists now. --NeoFite - user << "You deactivate the device!" - for(var/mob/M in viewers(user)) - if(M == user) continue - M << "[user] deactivates the power sink!" - mode = 1 - SetLuminosity(0) - icon_state = "powersink0" - processing_objects.Remove(src) + // if tried to drain more than available on powernet + // now look for APCs and drain their cells + if(drained < drain_rate) + for(var/obj/machinery/power/terminal/T in PN.nodes) + if(istype(T.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = T.master + if(A.operating && A.cell) + A.cell.charge = max(0, A.cell.charge - 50) + power_drained += 50 - process() - if(attached) - var/datum/powernet/PN = attached.get_powernet() - if(PN) - SetLuminosity(5) - - // found a powernet, so drain up to max power from it - - var/drained = min ( drain_rate, PN.avail ) - PN.newload += drained - power_drained += drained - - // if tried to drain more than available on powernet - // now look for APCs and drain their cells - if(drained < drain_rate) - for(var/obj/machinery/power/terminal/T in PN.nodes) - if(istype(T.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = T.master - if(A.operating && A.cell) - A.cell.charge = max(0, A.cell.charge - 50) - power_drained += 50 - - - if(power_drained > max_power * 0.95) - playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) - if(power_drained >= max_power) - processing_objects.Remove(src) - explosion(src.loc, 3,6,9,12) - del(src) + if(power_drained > max_power * 0.95) + playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) + if(power_drained >= max_power) + processing_objects.Remove(src) + explosion(src.loc, 3,6,9,12) + del(src) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 048b719bc53..2c9e36c0b79 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -1,7 +1,7 @@ /obj/item/device/encryptionkey/ - name = "Standard Encrpytion Key" - desc = "An encyption key for a radio headset. Has no special codes in it. WHY DOES IT EXIST? ASK NANOTRASEN." + name = "Standard Encryption Key" + desc = "An encryption key for a radio headset. Has no special codes in it. WHY DOES IT EXIST? ASK NANOTRASEN." icon = 'icons/obj/radio.dmi' icon_state = "cypherkey" w_class = 1 @@ -28,96 +28,102 @@ /obj/item/device/encryptionkey/headset_sec name = "Security Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "sec_cypherkey" channels = list("Security" = 1) /obj/item/device/encryptionkey/headset_eng name = "Engineering Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "eng_cypherkey" channels = list("Engineering" = 1) /obj/item/device/encryptionkey/headset_rob name = "Robotics Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "rob_cypherkey" channels = list("Engineering" = 1, "Science" = 1) /obj/item/device/encryptionkey/headset_med name = "Medical Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "med_cypherkey" channels = list("Medical" = 1) /obj/item/device/encryptionkey/headset_sci name = "Science Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "sci_cypherkey" channels = list("Science" = 1) /obj/item/device/encryptionkey/headset_medsci name = "Medical Research Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "medsci_cypherkey" channels = list("Medical" = 1, "Science" = 1) /obj/item/device/encryptionkey/headset_com name = "Command Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "com_cypherkey" channels = list("Command" = 1) /obj/item/device/encryptionkey/heads/captain name = "Captain's Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "cap_cypherkey" - channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0) + channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0) /obj/item/device/encryptionkey/heads/rd name = "Research Director's Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "rd_cypherkey" channels = list("Science" = 1, "Command" = 1) /obj/item/device/encryptionkey/heads/hos name = "Head of Security's Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "hos_cypherkey" channels = list("Security" = 1, "Command" = 1) /obj/item/device/encryptionkey/heads/ce name = "Chief Engineer's Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "ce_cypherkey" channels = list("Engineering" = 1, "Command" = 1) /obj/item/device/encryptionkey/heads/cmo name = "Chief Medical Officer's Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "cmo_cypherkey" channels = list("Medical" = 1, "Command" = 1) /obj/item/device/encryptionkey/heads/hop name = "Head of Personnel's Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "hop_cypherkey" - channels = list("Supply" = 1, "Command" = 1, "Security" = 0) + channels = list("Supply" = 1, "Command" = 1, "Service" = 1, "Security" = 0) /* /obj/item/device/encryptionkey/headset_mine name = "Mining Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "mine_cypherkey" channels = list("Mining" = 1) /obj/item/device/encryptionkey/heads/qm name = "Quartermaster's Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "qm_cypherkey" channels = list("Cargo" = 1, "Mining" = 1) */ /obj/item/device/encryptionkey/headset_cargo name = "Supply Radio Encryption Key" - desc = "An encyption key for a radio headset. Contains cypherkeys." + desc = "An encryption key for a radio headset. Contains cypherkeys." icon_state = "cargo_cypherkey" - channels = list("Supply" = 1) \ No newline at end of file + channels = list("Supply" = 1) + +/obj/item/device/encryptionkey/headset_service + name = "Service Radio Encryption Key" + desc = "An encryption key for a radio headset. Contains cypherkeys." + icon_state = "srv_cypherkey" + channels = list("Service" = 1) \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index cf2a5cced33..c9adef0d22d 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -95,7 +95,7 @@ /obj/item/device/radio/headset/heads/captain name = "captain's headset" - desc = "The headset of the boss. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :m - medical, :n - science." + desc = "The headset of the boss. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/captain @@ -130,7 +130,7 @@ /obj/item/device/radio/headset/heads/hop name = "head of personnel's headset" - desc = "The headset of the guy who will one day be captain. Channels are as follows: :u - supply, :c - command, :s - security" + desc = "The headset of the guy who will one day be captain. Channels are as follows: :u - supply, :v - service, :c - command, :s - security" icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/hop @@ -156,6 +156,13 @@ item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_cargo +/obj/item/device/radio/headset/headset_srv + name = "service radio headset" + desc = "Headset used by the foodservice staff, tasked with keeping the station full and happy. To access the service channel, use :v." + icon_state = "srv_headset" + item_state = "headset" + keyslot2 = new /obj/item/device/encryptionkey/headset_service + /obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob) // ..() user.set_machine(src) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 8d08999cb9b..add810a65ee 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -473,8 +473,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use freq_text = "Engineering" if(SEC_FREQ) freq_text = "Security" -// if(1349) -// freq_text = "Mining" + if(1349) + freq_text = "Service" if(1347) freq_text = "Supply" //There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO @@ -521,7 +521,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use if(1213) blackbox.msg_syndicate += blackbox_msg if(1349) - blackbox.msg_mining += blackbox_msg + blackbox.msg_service += blackbox_msg if(1347) blackbox.msg_cargo += blackbox_msg else diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index cf858462bb4..e753d4f51bc 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -233,9 +233,7 @@ MASS SPECTROMETER /obj/item/device/mass_spectrometer/New() ..() - var/datum/reagents/R = new/datum/reagents(5) - reagents = R - R.my_atom = src + create_reagents(5) /obj/item/device/mass_spectrometer/on_reagent_change() if(reagents.total_volume) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index dd47ac778bd..2b5fd33050e 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -60,7 +60,7 @@ affecting = H.get_organ("head") if (affecting.heal_damage(src.heal_brute, src.heal_burn)) - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) M.updatehealth() else M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2)) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 228f694424f..9ff0cee9892 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -287,6 +287,19 @@ var/datum/limb/affecting = H.get_organ(pick("l_leg", "r_leg")) H.Weaken(3) if(affecting.take_damage(5, 0)) - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) H.updatehealth() - ..() \ No newline at end of file + ..() + +/obj/item/weapon/shard/afterattack(atom/A as mob|obj, mob/living/carbon/user as mob) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(!H.gloves) + H << "\The [src] cuts into your hand!" + var/organ = ((H.hand ? "l_":"r_") + "arm") + var/datum/limb/affecting = H.get_organ(organ) + if(affecting.take_damage(force/2)) + H.update_damage_overlays(0) + else + user << "\The [src] cuts into your hand!" + user.take_organ_damage(force/2) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 7deaf762d77..d3ba809341c 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -30,9 +30,7 @@ item_state = "balloon-empty" /obj/item/toy/balloon/New() - var/datum/reagents/R = new/datum/reagents(10) - reagents = R - R.my_atom = src + create_reagents(10) /obj/item/toy/balloon/attack(mob/living/carbon/human/M as mob, mob/user as mob) return @@ -419,10 +417,8 @@ flags = USEDELAY /obj/item/toy/waterflower/New() - var/datum/reagents/R = new/datum/reagents(10) - reagents = R - R.my_atom = src - R.add_reagent("water", 10) + create_reagents(10) + reagents.add_reagent("water", 10) /obj/item/toy/waterflower/attack(mob/living/carbon/human/M as mob, mob/user as mob) return diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index d1e6212803f..f140c2efb55 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -33,10 +33,8 @@ sprite_name = "miniFE" /obj/item/weapon/extinguisher/New() - var/datum/reagents/R = new/datum/reagents(max_water) - reagents = R - R.my_atom = src - R.add_reagent("water", max_water) + create_reagents(max_water) + reagents.add_reagent("water", max_water) /obj/item/weapon/extinguisher/examine() set src in usr @@ -129,4 +127,4 @@ step(user, user.inertia_dir) else return ..() - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index c02ddd09bf8..0066bd65bce 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -100,9 +100,7 @@ /obj/item/weapon/implant/chem/New() ..() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src + create_reagents(50) /obj/item/weapon/implant/chem/trigger(emote, mob/source) if(emote == "deathgasp") diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 2caaf97c021..d98f79aa097 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -15,9 +15,7 @@ /obj/item/weapon/mop/New() - var/datum/reagents/R = new/datum/reagents(5) - reagents = R - R.my_atom = src + create_reagents(5) obj/item/weapon/mop/proc/clean(turf/simulated/A) diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index dd82d2d152e..609ffafb431 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -28,7 +28,7 @@ var/heal_amt = 10 for(var/datum/limb/affecting in H.organs) if(affecting.heal_damage(heal_amt, heal_amt)) - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) return /obj/item/weapon/storage/bible/attack(mob/living/M as mob, mob/living/user as mob) diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 87d04358cc1..ccea8b916fe 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -5,8 +5,8 @@ icon_state = "red" item_state = "toolbox_red" flags = FPRINT | TABLEPASS| CONDUCT - force = 5.0 - throwforce = 10.0 + force = 10.0 + throwforce = 15.0 throw_speed = 1 throw_range = 7 w_class = 4.0 @@ -72,7 +72,8 @@ icon_state = "syndicate" item_state = "toolbox_syndi" origin_tech = "combat=1;syndicate=1" - force = 7.0 + force = 15.0 + throwforce = 18.0 New() ..() @@ -83,4 +84,4 @@ new /obj/item/weapon/crowbar(src) new /obj/item/weapon/cable_coil(src,30,color) new /obj/item/weapon/wirecutters(src) - new /obj/item/device/multitool(src) \ No newline at end of file + new /obj/item/device/multitool(src) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index f7873ac95d9..b32a5e25eb8 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -34,7 +34,7 @@ */ /obj/item/weapon/screwdriver name = "screwdriver" - desc = "You can be totally screwwy with this." + desc = "You can be totally screwy with this." icon = 'icons/obj/items.dmi' icon_state = "screwdriver" flags = FPRINT | TABLEPASS| CONDUCT diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 9ca47e845f9..d2c1e63fc52 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -18,6 +18,8 @@ ..() sleep(2) new /obj/item/clothing/head/that(src) + new /obj/item/device/radio/headset/headset_srv(src) + new /obj/item/device/radio/headset/headset_srv(src) new /obj/item/clothing/head/that(src) new /obj/item/clothing/under/sl_suit(src) new /obj/item/clothing/under/sl_suit(src) @@ -28,6 +30,27 @@ new /obj/item/clothing/shoes/black(src) new /obj/item/clothing/shoes/black(src) +/* + * Chef + */ +/obj/structure/closet/chefcloset + name = "chef's closet" + desc = "It's a storage unit for foodservice garments." + icon_state = "black" + icon_closed = "black" + +/obj/structure/closet/chefcloset/New() + ..() + sleep(2) + new /obj/item/clothing/under/waiter(src) + new /obj/item/clothing/under/waiter(src) + new /obj/item/device/radio/headset/headset_srv(src) + new /obj/item/device/radio/headset/headset_srv(src) + new /obj/item/weapon/storage/box/mousetraps(src) + new /obj/item/weapon/storage/box/mousetraps(src) + new /obj/item/clothing/under/rank/chef(src) + new /obj/item/clothing/head/chefhat(src) + /* * Janitor */ diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index 9568e0eab1c..32d7ace167f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -20,6 +20,7 @@ new /obj/item/weapon/storage/bag/plants/portaseeder(src) new /obj/item/clothing/under/rank/hydroponics(src) new /obj/item/device/analyzer/plant_analyzer(src) + new /obj/item/device/radio/headset/headset_srv(src) new /obj/item/clothing/head/greenbandana(src) new /obj/item/weapon/minihoe(src) new /obj/item/weapon/hatchet(src) diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index adac90b75bf..a9100809153 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -14,7 +14,7 @@ */ /obj/structure/closet/emcloset name = "emergency closet" - desc = "It's a storage unit for emergency breathmasks and o2 tanks." + desc = "It's a storage unit for emergency breath masks and O2 tanks." icon_state = "emergency" icon_closed = "emergency" icon_opened = "emergencyopen" diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index c2514a11241..dd3023413f4 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -159,6 +159,7 @@ //window placing end else if(istype(W, /obj/item/weapon/shard)) + playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) health -= W.force * 0.1 else if(!shock(user, 70)) playsound(loc, 'sound/effects/grillehit.ogg', 80, 1) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 330f5d5f57d..1f293f73d75 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -16,14 +16,12 @@ /obj/structure/janitorialcart/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) /obj/structure/janitorialcart/examine() set src in usr - usr << "[src] \icon[src] contains [reagents.total_volume] unit\s of water!" + usr << "[src] \icon[src] contains [reagents.total_volume] unit\s of liquid!" ..() //everything else is visible, so doesn't need to be mentioned @@ -38,7 +36,7 @@ user << "You put [I] into [src]." else if(istype(I, /obj/item/weapon/mop)) - if(I.reagents.total_volume < 1) //if it's at all wet, we assume they want to store the mop. + if(I.reagents.total_volume < I.reagents.maximum_volume) //if it's not completely soaked we assume they want to wet it, otherwise store it if(reagents.total_volume < 1) user << "[src] is out of water!" else @@ -174,10 +172,7 @@ /obj/structure/stool/bed/chair/janicart/New() handle_rotation() - - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) /obj/structure/stool/bed/chair/janicart/examine() diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index bceee3b23f1..b43607fcb07 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -10,9 +10,7 @@ /obj/structure/mopbucket/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) /obj/structure/mopbucket/examine() diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 6cb18b9ec7d..049c457967a 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -918,7 +918,7 @@ var/global/list/g_fancy_list_of_safe_types = null if("special ops officer") M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate/combat(M), slot_w_uniform) M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/swat/officer(M), slot_wear_suit) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat/combat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) @@ -974,7 +974,7 @@ var/global/list/g_fancy_list_of_safe_types = null M.equip_to_slot_or_del(new /obj/item/weapon/storage/box(M), slot_in_backpack) if("soviet admiral") M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head) - M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat/combat(M), slot_shoes) M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) M.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(M), slot_ears) M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 06cb9f64564..009daac93fb 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -34,7 +34,7 @@ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_ears) H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat/combat(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/weapon/pinpointer(H.loc), slot_l_store) var/obj/item/weapon/card/id/W = new(H) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 6bd47d3b5b5..135dab88eda 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -54,13 +54,13 @@ H.Stun(3) if(affecting) if(affecting.take_damage(1, 0)) - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) H.updatehealth() else if(ismouse(target)) var/mob/living/simple_animal/mouse/M = target visible_message("\red SPLAT!") M.splat() - playsound(target.loc, 'sound/effects/snap.ogg', 50, 1) + playsound(src.loc, 'sound/effects/snap.ogg', 50, 1) armed = 0 update_icon() pulse(0) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 04378d48110..156c338fdd4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -50,7 +50,7 @@ datum/preferences var/h_color = "000" //Hair color var/f_style = "Shaved" //Face hair type var/f_color = "000" //Facial hair color - var/s_tone = "caucasian" //Skin color + var/skin_tone = "caucasian" //Skin color var/eye_color = "000" //Eye color //Mob preview @@ -157,7 +157,7 @@ datum/preferences dat += "
" dat += "Blood Type: [b_type]
" - dat += "Skin Tone:
    [s_tone]
" + dat += "Skin Tone:
[skin_tone]
" dat += "Underwear:
[underwear]
" dat += "Backpack:
[backbaglist[backbag]]
" @@ -493,7 +493,7 @@ datum/preferences if("eyes") eye_color = random_eye_color() if("s_tone") - s_tone = random_skin_tone() + skin_tone = random_skin_tone() if("bag") backbag = rand(1,3) if("all") @@ -564,7 +564,7 @@ datum/preferences if("s_tone") var/new_s_tone = input(user, "Choose your character's skin-tone:", "Character Preference") as null|anything in skin_tones if(new_s_tone) - s_tone = new_s_tone + skin_tone = new_s_tone if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference") as color|null @@ -667,7 +667,7 @@ datum/preferences character.h_color = h_color character.f_color = f_color - character.s_tone = s_tone + character.skin_tone = skin_tone character.h_style = h_style character.f_style = f_style character.underwear = underwear diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index b079a33ece1..e81362ca614 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -163,7 +163,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["hair_color"] >> h_color S["facial_hair_color"] >> f_color S["eye_color"] >> eye_color - S["skin_tone"] >> s_tone + S["skin_tone"] >> skin_tone S["hair_style_name"] >> h_style S["facial_style_name"] >> f_style S["underwear"] >> underwear @@ -203,7 +203,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car h_color = sanitize_hexcolor(h_color, 3, 0) f_color = sanitize_hexcolor(f_color, 3, 0) eye_color = sanitize_hexcolor(eye_color, 3, 0) - s_tone = sanitize_inlist(s_tone, skin_tones) + skin_tone = sanitize_inlist(skin_tone, skin_tones) backbag = sanitize_integer(backbag, 1, backbaglist.len, initial(backbag)) userandomjob = sanitize_integer(userandomjob, 0, 1, initial(userandomjob)) @@ -236,7 +236,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["hair_color"] << h_color S["facial_hair_color"] << f_color S["eye_color"] << eye_color - S["skin_tone"] << s_tone + S["skin_tone"] << skin_tone S["hair_style_name"] << h_style S["facial_style_name"] << f_style S["underwear"] << underwear diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 472f8cbf12e..2b694ceead7 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -6,7 +6,6 @@ permeability_coefficient = 0.05 flags = NOSLIP origin_tech = "syndicate=3" - var/list/clothing_choices = list() /obj/item/clothing/shoes/mime name = "mime shoes" @@ -16,16 +15,14 @@ /obj/item/clothing/shoes/swat name = "\improper SWAT shoes" desc = "When you want to turn up the heat." - icon_state = "swat" + icon_state = "jackboots" + item_state = "jackboots" armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) flags = NOSLIP -/obj/item/clothing/shoes/combat //Basically SWAT shoes combined with galoshes. +/obj/item/clothing/shoes/swat/combat name = "combat boots" desc = "When you REALLY want to turn up the heat" - icon_state = "swat" - armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0) - flags = NOSLIP cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT @@ -36,6 +33,7 @@ name = "ninja shoes" desc = "A pair of running shoes. Excellent for running and even better for smashing skulls." icon_state = "s-ninja" + item_state = "secshoes" permeability_coefficient = 0.01 flags = NOSLIP armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) @@ -51,7 +49,7 @@ icon_state = "wizard" /obj/item/clothing/shoes/sandal/marisa - desc = "A pair of magic, black shoes." + desc = "A pair of magic black shoes." name = "magic shoes" icon_state = "black" @@ -64,7 +62,7 @@ slowdown = SHOES_SLOWDOWN+1 /obj/item/clothing/shoes/clown_shoes - desc = "The prankster's standard-issue clowning shoes. Damn they're huge!" + desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" name = "clown shoes" icon_state = "clown" item_state = "clown_shoes" diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 29b00dfed89..afcf38eec69 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -14,7 +14,7 @@ desc = "A suit that protects against fire and heat." icon_state = "fire" item_state = "fire_suit" - w_class = 4//bulky item + w_class = 4 gas_transfer_coefficient = 0.90 permeability_coefficient = 0.50 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -34,11 +34,10 @@ /obj/item/clothing/suit/fire/heavy - name = "firesuit" - desc = "A suit that protects against extreme fire and heat." - //icon_state = "thermal" + name = "heavy firesuit" + desc = "An old, bulky thermal protection suit." + icon_state = "thermal" item_state = "ro_suit" - w_class = 4//bulky item slowdown = 1.5 /* diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 9264c0e28dd..5a3205749e1 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -229,7 +229,7 @@ proc/check_panel(mob/M) var/image/stand_icon = null var/image/currentimage = null var/icon/base = null - var/s_tone + var/skin_tone var/mob/living/clone = null var/image/left var/image/right diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index c75cda5dba5..b8ddadf09e4 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -14,9 +14,7 @@ New() ..() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src + create_reagents(1000) beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src) on_reagent_change() //When the reagents change, change the icon as well. diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 0b33edacb80..62b29c3acee 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -883,7 +883,8 @@ icon_state = "spawner" potency = 10 New() - switch(rand(1,100))//(potency) //It wants to use the default potency instead of the new, so it was always 10. Will try to come back to this later - Cheridan + ..() + switch(potency) if(0 to 10) new/obj/item/weapon/spacecash/(src.loc) if(11 to 20) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 6a0b5e6a520..c24e02fef31 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -17,9 +17,7 @@ var/potency = 1 var/plant_type = 0 New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src + create_reagents(50) /obj/item/weapon/grown/proc/changePotency(newValue) //-QualityVan potency = newValue diff --git a/code/modules/hydroponics/hydroitemcode.dm b/code/modules/hydroponics/hydroitemcode.dm index 521e2f0390c..1d66bb3acb9 100644 --- a/code/modules/hydroponics/hydroitemcode.dm +++ b/code/modules/hydroponics/hydroitemcode.dm @@ -34,7 +34,7 @@ var/organ = ((user.hand ? "l_":"r_") + "arm") var/datum/limb/affecting = user.get_organ(organ) if(affecting.take_damage(0,force)) - user.UpdateDamageIcon(0) + user.update_damage_overlays(0) else user.take_organ_damage(0,force) @@ -57,7 +57,7 @@ var/organ = ((user.hand ? "l_":"r_") + "arm") var/datum/limb/affecting = user.get_organ(organ) if(affecting.take_damage(0,force)) - user.UpdateDamageIcon(0) + user.update_damage_overlays(0) else user.take_organ_damage(0,force) if(prob(50)) diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index c844b3edb38..e3b03bad0cb 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -55,7 +55,7 @@ icon_state = "book-0" if(istype(I, /obj/item/weapon/wrench)) playsound(loc, 'sound/items/Ratchet.ogg', 100, 1) - user << "You unrwench the frame." + user << "You unwrench the frame." anchored = 0 state = 0 diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index c01f0f5174b..8360a238d90 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -58,10 +58,9 @@ if(status_flags & GODMODE) health = maxHealth stat = CONSCIOUS - else - //oxyloss is only used for suicide - //toxloss isn't used for aliens, its actually used as alien powers!! - health = maxHealth - getOxyLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() + return + //oxyloss is only used for suicide + health = maxHealth - getOxyLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() /mob/living/carbon/alien/proc/handle_environment(var/datum/gas_mixture/environment) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index e8cf1555e27..db7e7f2900b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -7,9 +7,7 @@ plasma_rate = 15 /mob/living/carbon/alien/humanoid/drone/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) if(src.name == "alien drone") src.name = text("alien drone ([rand(1, 1000)])") src.real_name = src.name diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index 3a15f620b20..428dc0d0b0b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -9,9 +9,7 @@ plasma_rate = 5 /mob/living/carbon/alien/humanoid/hunter/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) if(name == "alien hunter") name = text("alien hunter ([rand(1, 1000)])") real_name = name diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 226824c6ab4..d40108475c3 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -9,9 +9,7 @@ plasma_rate = 10 /mob/living/carbon/alien/humanoid/sentinel/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) if(name == "alien sentinel") name = text("alien sentinel ([rand(1, 1000)])") real_name = name diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index a700cd7be65..41f1d2ce0a4 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -8,9 +8,7 @@ //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/humanoid/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(1000) if(name == "alien") name = text("alien ([rand(1, 1000)])") real_name = name @@ -296,7 +294,7 @@ for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has punched []!", M, src), 1) - if (damage > 9||prob(5))//Regular humans have a very small chance of weakening an alien. + if ((stat != DEAD) && (damage > 9||prob(5)))//Regular humans have a very small chance of weakening an alien. Weaken(1,5) for(var/mob/O in viewers(M, null)) if ((O.client && !( O.blinded ))) diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 35a6538d558..30d8dc8b89f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -10,9 +10,7 @@ /mob/living/carbon/alien/humanoid/queen/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) //there should only be one queen for(var/mob/living/carbon/alien/humanoid/queen/Q in living_mob_list) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index c6e137289fa..772e1c6dc6a 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -15,9 +15,7 @@ //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/larva/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) if(name == "alien larva") name = "alien larva ([rand(1, 1000)])" real_name = name @@ -33,14 +31,6 @@ now_pushing = 1 if(ismob(AM)) var/mob/tmob = AM - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(70)) - src << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return - if(!(tmob.status_flags & CANPUSH)) - now_pushing = 0 - return tmob.LAssailant = src now_pushing = 0 @@ -275,8 +265,8 @@ playsound(loc, "punch", 25, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has punched []!", M, src), 1) - if (damage > 4.9) + O.show_message(text("\red [] has kicked []!", M, src), 1) + if ((stat != DEAD) && (damage > 4.9)) Weaken(rand(10,15)) for(var/mob/O in viewers(M, null)) if ((O.client && !( O.blinded ))) @@ -287,7 +277,7 @@ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message(text("\red [] has attempted to punch []!", M, src), 1) + O.show_message(text("\red [] has attempted to kick []!", M, src), 1) return /mob/living/carbon/alien/larva/attack_alien(mob/living/carbon/alien/humanoid/M as mob) diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index 0de81585a37..d837c80ebb1 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -7,9 +7,7 @@ var/alert = null New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src + create_reagents(1000) ..() Del() diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 84abccad38d..2f657dea928 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -23,7 +23,7 @@ if (istype(organ, /datum/limb)) var/datum/limb/temp = organ if(temp.take_damage(d, 0)) - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) H.updatehealth() else src.take_organ_damage(d) @@ -174,7 +174,7 @@ if(status == "") status = "OK" src << "\t [status == "OK" ? "\blue" : "\red"] My [org.getDisplayName()] is [status]." - if(SKELETON in H.mutations && !H.w_uniform && !H.wear_suit) + if(dna && (dna.mutantrace == "skeleton") && !H.w_uniform && !H.wear_suit) H.play_xylophone() else if(ishuman(src)) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 024d9255509..ffc00aed53d 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -40,9 +40,6 @@ /mob/living/carbon/human/death(gibbed) - if(halloss > 0 && !gibbed) - halloss = 0 - return if(stat == DEAD) return if(healths) healths.icon_state = "health5" stat = DEAD @@ -70,36 +67,26 @@ return ..(gibbed) /mob/living/carbon/human/proc/makeSkeleton() - if(SKELETON in src.mutations) return - - if(f_style) - f_style = "Shaved" - if(h_style) - h_style = "Bald" - update_hair(0) - - mutations.Add(SKELETON) + if(!check_dna_integrity(src) || (dna.mutantrace == "skeleton")) return + dna.mutantrace = "skeleton" status_flags |= DISFIGURED - update_body(0) - update_mutantrace() - return + update_hair() + update_body() + return 1 -/mob/living/carbon/human/proc/ChangeToHusk() +/mob/living/carbon/proc/ChangeToHusk() if(HUSK in mutations) return - - if(f_style) - f_style = "Shaved" //we only change the icon_state of the hair datum, so it doesn't mess up their UI/UE - if(h_style) - h_style = "Bald" - update_hair(0) - mutations.Add(HUSK) status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools - update_body(0) - update_mutantrace() - return + return 1 -/mob/living/carbon/human/proc/Drain() +/mob/living/carbon/human/ChangeToHusk() + . = ..() + if(.) + update_hair() + update_body() + +/mob/living/carbon/proc/Drain() ChangeToHusk() mutations |= NOCLONE - return \ No newline at end of file + return 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 2eb34249e7a..5bf09166443 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -48,7 +48,7 @@ t_is = "are" else if(icon) - msg += "\icon[icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated + msg += "\icon[src] " //note, should we ever go back to runtime-generated icons (please don't), you will need to change this to \icon[icon] to prevent crashes. switch(gender) if(MALE) t_He = "He" @@ -199,7 +199,9 @@ else msg += "[t_He] has a strange masculine quality to [t_him].\n" + var/appears_dead = 0 if(stat == DEAD || (status_flags & FAKEDEATH)) + appears_dead = 1 if(getbrain(src))//Only perform these checks if there is no brain msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" @@ -252,18 +254,19 @@ msg += "" - if(stat == UNCONSCIOUS) - msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n" - else if(getBrainLoss() >= 60) - msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" + if(!appears_dead) + if(stat == UNCONSCIOUS) + msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n" + else if(getBrainLoss() >= 60) + msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(!key && getbrain(src) && stat != DEAD) - msg += "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely\n" - else if(!client && getbrain(src) && stat != DEAD) - msg += "[t_He] [t_has] a vacant, braindead stare...\n" + if(!key && getbrain(src)) + msg += "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely\n" + else if(!client && getbrain(src)) + msg += "[t_He] [t_has] a vacant, braindead stare...\n" - if(digitalcamo) - msg += "[t_He] [t_is] repulsively uncanny!\n" + if(digitalcamo) + msg += "[t_He] [t_is] repulsively uncanny!\n" if(istype(usr, /mob/living/carbon/human)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 83823a254c7..67242b6527e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1,9 +1,9 @@ /mob/living/carbon/human - name = "unknown" - real_name = "unknown" - voice_name = "unknown" + name = "Unknown" + real_name = "Unknown" + voice_name = "Unknown" icon = 'icons/mob/human.dmi' - icon_state = "body_m_s" + icon_state = "caucasian1_m_s" var/list/hud_list = list() @@ -14,9 +14,7 @@ /mob/living/carbon/human/New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src + create_reagents(1000) //initialise organs organs = newlist(/datum/limb/chest, /datum/limb/head, /datum/limb/l_arm, @@ -66,11 +64,6 @@ slime.UpdateFeed() return - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(40) && !(FAT in src.mutations)) - src << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot)) if(prob(99)) now_pushing = 0 @@ -209,7 +202,7 @@ update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05) if("r_leg") update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05) - if(update) UpdateDamageIcon(0) + if(update) update_damage_overlays(0) /mob/living/carbon/human/blob_act() @@ -229,10 +222,10 @@ if(!affecting) return if (istype(O, /obj/effect/immovablerod)) if(affecting.take_damage(101, 0)) - UpdateDamageIcon(0) + update_damage_overlays(0) else if(affecting.take_damage((istype(O, /obj/effect/meteor/small) ? 10 : 25), 30)) - UpdateDamageIcon(0) + update_damage_overlays(0) updatehealth() return diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 6035a51c86d..92bf311efff 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -96,7 +96,7 @@ "[M] has [attack_verb]ed [src]!") apply_damage(damage, BRUTE, affecting, armor_block) - if(damage >= 9) + if((stat != DEAD) && damage >= 9) visible_message("[M] has weakened [src]!", \ "[M] has weakened [src]!") apply_effect(4, WEAKEN, armor_block) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index d50fc786a20..1ad89612dd2 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -1,7 +1,7 @@ //Updates the mob's health from organs and mob damage variables /mob/living/carbon/human/updatehealth() if(status_flags & GODMODE) - health = 100 + health = maxHealth stat = CONSCIOUS return var/total_burn = 0 @@ -9,9 +9,9 @@ for(var/datum/limb/O in organs) //hardcoded to streamline things a bit total_brute += O.brute_dam total_burn += O.burn_dam - health = 100 - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute + health = maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute //TODO: fix husking - if( ((100 - total_burn) < config.health_threshold_dead) && stat == DEAD) //100 only being used as the magic human max health number, feel free to change it if you add a var for it -- Urist + if( ((maxHealth - total_burn) < config.health_threshold_dead) && stat == DEAD ) ChangeToHusk() return @@ -80,7 +80,7 @@ if(!parts.len) return var/datum/limb/picked = pick(parts) if(picked.heal_damage(brute,burn)) - UpdateDamageIcon(0) + update_damage_overlays(0) updatehealth() //Damages ONE external organ, organ gets randomly selected from damagable ones. @@ -91,7 +91,7 @@ if(!parts.len) return var/datum/limb/picked = pick(parts) if(picked.take_damage(brute,burn)) - UpdateDamageIcon(0) + update_damage_overlays(0) updatehealth() @@ -113,7 +113,7 @@ parts -= picked updatehealth() - if(update) UpdateDamageIcon(0) + if(update) update_damage_overlays(0) // damage MANY external organs, in random order /mob/living/carbon/human/take_overall_damage(var/brute, var/burn) @@ -134,7 +134,7 @@ parts -= picked updatehealth() - if(update) UpdateDamageIcon(0) + if(update) update_damage_overlays(0) //////////////////////////////////////////// @@ -143,7 +143,7 @@ var/datum/limb/E = get_organ(zone) if(istype(E, /datum/limb)) if (E.heal_damage(brute, burn)) - UpdateDamageIcon(0) + update_damage_overlays(0) else return 0 return @@ -179,11 +179,11 @@ if(BRUTE) damageoverlaytemp = 20 if(organ.take_damage(damage, 0)) - UpdateDamageIcon(0) + update_damage_overlays(0) if(BURN) damageoverlaytemp = 20 if(organ.take_damage(0, damage)) - UpdateDamageIcon(0) + update_damage_overlays(0) // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 3cb7acc54ac..a773b91d671 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -10,7 +10,7 @@ //Eye colour var/eye_color = "000" - var/s_tone = "caucasian" //Skin tone + var/skin_tone = "caucasian1" //Skin tone var/lip_style = null //no lipstick by default- arguably misleading, as it could be used for general makeup @@ -34,9 +34,7 @@ var/obj/item/l_store = null var/obj/item/s_store = null - - var/icon/stand_icon = null - var/icon/lying_icon = null + var/base_icon_state = "caucasian1_m" var/list/organs = list() //Gets filled up in the constructor (human.dm, New() proc, line 24. I'm sick and tired of missing comments. -Agouri diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 967256a9cff..27ebba1e5fc 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -755,17 +755,13 @@ if(FAT in mutations) if(overeatduration < 100) src << "\blue You feel fit again!" - mutations.Remove(FAT) - update_mutantrace(0) - update_mutations(0) + mutations -= FAT update_inv_w_uniform(0) update_inv_wear_suit() else if(overeatduration > 500) src << "\red You suddenly feel blubbery!" - mutations.Add(FAT) - update_mutantrace(0) - update_mutations(0) + mutations |= FAT update_inv_w_uniform(0) update_inv_wear_suit() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e001ab7eeeb..70f989d9727 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,56 +1,38 @@ /////////////////////// //UPDATE_ICONS SYSTEM// /////////////////////// -/* -Calling this a system is perhaps a bit trumped up. It is essentially update_clothing dismantled into its -core parts. The key difference is that when we generate overlays we do not generate either lying or standing -versions. Instead, we generate both and store them in two fixed-length lists, both using the same list-index -(The indexes are in update_icons.dm): Each list for humans is (at the time of writing) of length 19. -This will hopefully be reduced as the system is refined. +/* Keep these comments up-to-date if you -insist- on hurting my code-baby ;_; +This system allows you to update individual mob-overlays, without regenerating them all each time. +When we generate overlays we do not generate either lying or standing, as used to happen. +Instead, we generate both standing and lying stances and store them in two fixed-length lists, +both using the same list-index. (The index values are defines within this file. - var/overlays_lying[19] //For the lying down stance - var/overlays_standing[19] //For the standing stance +As of the time of writing there are 20 layers within this list. Please try to keep this from increasing. + var/overlays_lying[20] //For the lying down stance + var/overlays_standing[20] //For the standing stance -When we call update_icons, the 'lying' variable is checked and then the appropriate list is assigned to our overlays! -That in itself uses a tiny bit more memory (no more than all the ridiculous lists the game has already mind you). +Most of the time we only wish to update one overlay: + e.g. - we dropped the fireaxe out of our left hand and need to remove its icon from our mob + e.g.2 - our hair colour has changed, so we need to update our hair icons on our mob +In these cases, instead of updating every overlay using the old behaviour (regenerate_icons), we instead call +the appropriate update_X proc. + e.g. - update_l_hand() + e.g.2 - update_hair() -On the other-hand, it should be very CPU cheap in comparison to the old system. -In the old system, we updated all our overlays every life() call, even if we were standing still inside a crate! -or dead!. 25ish overlays, all generated from scratch every second for every xeno/human/monkey and then applied. -More often than not update_clothing was being called a few times in addition to that! CPU was not the only issue, -all those icons had to be sent to every client. So really the cost was extremely cumulative. To the point where -update_clothing would frequently appear in the top 10 most CPU intensive procs during profiling. - -Another feature of this new system is that our lists are indexed. This means we can update specific overlays! -So we only regenerate icons when we need them to be updated! This is the main saving for this system. - -In practice this means that: - everytime you fall over, we just switch between precompiled lists. Which is fast and cheap. - Everytime you do something minor like take a pen out of your pocket, we only update the in-hand overlay - etc... +Note: Recent changes by aranclanos+carn: + update_icons() no longer needs to be called. + This unfortunately means that cloaking is not working properly at time of writing, + however the system is easier to use. update_icons() should not be called unless you absolutely -know- you need it. + One such example would be when var/lying changes state (because every overlay needs to be updated, but not regenerated). In these + very specific cases, update_icons() will be faster than calling each update_X proc individually. + IN ALL OTHER CASES it's better to just call the specific update_X procs. +All of this means that this code is more maintainable, faster and still fairly easy to use. There are several things that need to be remembered: - > Whenever we do something that should cause an overlay to update (which doesn't use standard procs - ( i.e. you do something like l_hand = /obj/item/something new(src) ) - You will need to call the relevant update_inv_* proc: - update_inv_head() - update_inv_wear_suit() - update_inv_gloves() - update_inv_shoes() - update_inv_w_uniform() - update_inv_glasses() - update_inv_l_hand() - update_inv_r_hand() - update_inv_belt() - update_inv_wear_id() - update_inv_ears() - update_inv_s_store() - update_inv_pockets() - update_inv_back() - update_inv_handcuffed() - update_inv_wear_mask() + ( i.e. you do something like l_hand = /obj/item/something new(src), rather than using the helper procs) + You will need to call the relevant update_inv_* proc All of these are named after the variable they update from. They are defined at the mob/ level like update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a @@ -58,47 +40,30 @@ There are several things that need to be remembered: > There are also these special cases: - update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows - update_mutantrace() //handles updating your appearance after setting the mutantrace var - UpdateDamageIcon() //handles damage overlays for brute/burn damage //(will rename this when I geta round to it) - update_body() //Handles updating your mob's icon to reflect their gender/race/complexion etc - update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and - ...eyes were merged into update_body) + update_mutations() //handles updating your appearance for certain mutations. e.g TK head-glows + update_damage_overlays() //handles damage overlays for brute/burn damage + update_base_icon_state() //Handles updating var/base_icon_state (WIP) This is used to update the + mob's icon_state easily e.g. "[base_icon_state]_s" is the standing icon_state + update_body() //Handles updating your mob's icon_state (using update_base_icon_state()) + as well as sprite-accessories that didn't really fit elsewhere (underwear, lips, eyes) + //NOTE: update_mutantrace() is now merged into this! + update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and + eyes were merged into update_body()) -> All of these procs update our overlays_lying and overlays_standing, and then call update_icons() by default. - If you wish to update several overlays at once, you can set the argument to 0 to disable the update and call - it manually: - e.g. - update_inv_head(0) - update_inv_l_hand(0) - update_inv_r_hand() //<---calls update_icons() - - or equivillantly: - update_inv_head(0) - update_inv_l_hand(0) - update_inv_r_hand(0) - update_icons() - -> If you need to update all overlays you can use regenerate_icons(). it works exactly like update_clothing used to. - -> I reimplimented an old unused variable which was in the code called (coincidentally) var/update_icon +> I repurposed an old unused variable which was in the code called (coincidentally) var/update_icon It can be used as another method of triggering regenerate_icons(). It's basically a flag that when set to non-zero will call regenerate_icons() at the next life() call and then reset itself to 0. The idea behind it is icons are regenerated only once, even if multiple events requested it. + //NOTE: fairly unused, maybe this could be removed? -This system is confusing and is still a WIP. It's primary goal is speeding up the controls of the game whilst -reducing processing costs. So please bear with me while I iron out the kinks. It will be worth it, I promise. -If I can eventually free var/lying stuff from the life() process altogether, stuns/death/status stuff -will become less affected by lag-spikes and will be instantaneous! :3 - -If you have any questions/constructive-comments/bugs-to-report/or have a massivly devestated butt... -Please contact me on #coderbus IRC. ~Carn x +If you have any questions/constructive-comments/bugs-to-report +Please contact me on #coderbus IRC. ~Carnie x */ //Human Overlays Indexes///////// -#define MUTANTRACE_LAYER 20 //TODO: make part of body? -#define MUTATIONS_LAYER 19 -#define DAMAGE_LAYER 18 +#define BODY_LAYER 20 //underwear, eyes, lips(makeup) +#define MUTATIONS_LAYER 19 //Tk headglows etc. +#define DAMAGE_LAYER 18 //damage indicators (cuts and burns) #define UNIFORM_LAYER 17 #define ID_LAYER 16 #define SHOES_LAYER 15 @@ -115,14 +80,40 @@ Please contact me on #coderbus IRC. ~Carn x #define HANDCUFF_LAYER 4 #define LEGCUFF_LAYER 3 #define L_HAND_LAYER 2 -#define R_HAND_LAYER 1 -#define TOTAL_LAYERS 20 +#define R_HAND_LAYER 1 //Having the two hands seperate seems rather silly, merge them together? It'll allow for code to be reused on mobs with arbitarily many hands +#define TOTAL_LAYERS 20 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; ////////////////////////////////// /mob/living/carbon/human var/list/overlays_lying[TOTAL_LAYERS] var/list/overlays_standing[TOTAL_LAYERS] +/mob/living/carbon/human/proc/update_base_icon_state() + var/race = dna ? dna.mutantrace : null + switch(race) + if("lizard","golem","slime","shadow","adamantine","fly","plant") + base_icon_state = "[dna.mutantrace]_[(gender == FEMALE) ? "f" : "m"]" + if("skeleton") + base_icon_state = "skeleton" + else + if(HUSK in mutations) + base_icon_state = "husk" + else + base_icon_state = "[skin_tone]_[(gender == FEMALE) ? "f" : "m"]" + + +/mob/living/carbon/human/proc/apply_overlay(cache_index) + var/image/I = lying ? overlays_lying[cache_index] : overlays_standing[cache_index] + if(I) + overlays += I + +/mob/living/carbon/human/proc/remove_overlay(cache_index) + if(overlays_lying[cache_index]) + overlays -= overlays_lying[cache_index] + overlays_lying[cache_index] = null + if(overlays_standing[cache_index]) + overlays -= overlays_standing[cache_index] + overlays_standing[cache_index] = null //UPDATES OVERLAYS FROM OVERLAYS_LYING/OVERLAYS_STANDING //this proc is messy as I was forced to include some old laggy cloaking code to it so that I don't break cloakers @@ -131,11 +122,11 @@ Please contact me on #coderbus IRC. ~Carn x lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again update_hud() //TODO: remove the need for this overlays.Cut() - - if(lying) //can't be cloaked when lying. (for now) - icon = lying_icon - for(var/image/I in overlays_lying) - overlays += I + + if(lying) //can't be cloaked whilst lying down + icon_state = "[base_icon_state]_l" + for(var/thing in overlays_lying) + if(thing) overlays += thing else var/stealth = 0 if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja) && wear_suit:s_active) @@ -147,26 +138,28 @@ Please contact me on #coderbus IRC. ~Carn x stealth = 1 break if(stealth) - icon = 'icons/mob/human.dmi' icon_state = "body_cloaked" - var/image/I = overlays_standing[L_HAND_LAYER] - if(istype(I)) overlays += I - I = overlays_standing[R_HAND_LAYER] - if(istype(I)) overlays += I + if(overlays_standing[L_HAND_LAYER]) + overlays += overlays_standing[L_HAND_LAYER] + if(overlays_standing[R_HAND_LAYER]) + overlays += overlays_standing[R_HAND_LAYER] else - icon = stand_icon - for(var/image/I in overlays_standing) - overlays += I + icon_state = "[base_icon_state]_s" + for(var/thing in overlays_standing) + if(thing) overlays += thing //DAMAGE OVERLAYS //constructs damage icon for each organ from mask * damage field and saves it in our overlays_ lists -/mob/living/carbon/human/UpdateDamageIcon(var/update_icons=1) - overlays -= overlays_lying[DAMAGE_LAYER] - overlays -= overlays_standing[DAMAGE_LAYER] - var/image/standing = image("icon" = 'icons/mob/dam_human.dmi', "icon_state" = "blank", "layer" = -DAMAGE_LAYER) - var/image/lying = image("icon" = 'icons/mob/dam_human.dmi', "icon_state" = "blank2", "layer" = -DAMAGE_LAYER) +/mob/living/carbon/human/update_damage_overlays() + remove_overlay(DAMAGE_LAYER) + + var/image/standing = image("icon"='icons/mob/dam_human.dmi', "icon_state"="blank", "layer"=-DAMAGE_LAYER) + var/image/lying = image("icon"='icons/mob/dam_human.dmi', "icon_state"="blank2", "layer"=-DAMAGE_LAYER) + overlays_standing[DAMAGE_LAYER] = standing + overlays_lying[DAMAGE_LAYER] = lying + for(var/datum/limb/O in organs) if(O.brutestate) standing.overlays += "[O.icon_name]_[O.brutestate]0" //we're adding icon_states of the base image as overlays @@ -174,533 +167,360 @@ Please contact me on #coderbus IRC. ~Carn x if(O.burnstate) standing.overlays += "[O.icon_name]_0[O.burnstate]" lying.overlays += "[O.icon_name]2_0[O.burnstate]" - - overlays_standing[DAMAGE_LAYER] = standing - overlays_lying[DAMAGE_LAYER] = lying - if (src.lying) - overlays += overlays_lying[DAMAGE_LAYER] - else - overlays += overlays_standing[DAMAGE_LAYER] - if(update_icons) update_icons() - -//BASE MOB SPRITE -/mob/living/carbon/human/proc/update_body(var/update_icons=1) - if(stand_icon) del(stand_icon) - if(lying_icon) del(lying_icon) - if(dna && dna.mutantrace) return - - var/husk = (HUSK in src.mutations) //100% unnecessary -Agouri //nope, do you really want to iterate through src.mutations repeatedly? -Pete - var/fat = (FAT in src.mutations) - var/skeleton = (SKELETON in src.mutations) - var/g = "m" - - if(gender == FEMALE) g = "f" - //Base mob icon - if(husk) - stand_icon = new /icon('icons/mob/human.dmi', "husk_s") - lying_icon = new /icon('icons/mob/human.dmi', "husk_l") - else if(fat) - stand_icon = new /icon('icons/mob/human.dmi', "fatbody_s") - lying_icon = new /icon('icons/mob/human.dmi', "fatbody_l") - else if(skeleton) - stand_icon = new /icon('icons/mob/human.dmi', "skeleton_s") - lying_icon = new /icon('icons/mob/human.dmi', "skeleton_l") - else - stand_icon = new /icon('icons/mob/human.dmi', "body_[g]_s") - lying_icon = new /icon('icons/mob/human.dmi', "body_[g]_l") - - //Skin tone - if(!skeleton) - var/color = skin_tones[s_tone] - if(color) - color = "#" + color - stand_icon.Blend(color, ICON_MULTIPLY) - lying_icon.Blend(color, ICON_MULTIPLY) - - //Eyes - var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s") - var/icon/eyes_l = new/icon('icons/mob/human_face.dmi', "eyes_l") - eyes_s.Blend("#[eye_color]", ICON_ADD) - eyes_l.Blend("#[eye_color]", ICON_ADD) - stand_icon.Blend(eyes_s, ICON_OVERLAY) - lying_icon.Blend(eyes_l, ICON_OVERLAY) - - //Mouth (lipstick!) - if(lip_style) //skeletons are allowed to wear lipstick no matter what you think, agouri. - stand_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_s"), ICON_OVERLAY) - lying_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_l"), ICON_OVERLAY) - - //Underwear - if(underwear && !fat && !skeleton) - var/datum/sprite_accessory/underwear/U = underwear_all[underwear] - if(U) - stand_icon.Blend(new /icon(U.icon, "[U.icon_state]_s"), ICON_OVERLAY) - lying_icon.Blend(new /icon(U.icon, "[U.icon_state]_l"), ICON_OVERLAY) - - if(update_icons) update_icons() + + apply_overlay(DAMAGE_LAYER) //HAIR OVERLAY -/mob/living/carbon/human/proc/update_hair(var/update_icons=1) +/mob/living/carbon/human/proc/update_hair() //Reset our hair - overlays -= overlays_lying[HAIR_LAYER] - overlays -= overlays_standing[HAIR_LAYER] - overlays_standing[HAIR_LAYER] = null - overlays_lying[HAIR_LAYER] = null + remove_overlay(HAIR_LAYER) //mutants don't have hair. masks and helmets can obscure our hair too. - if( (dna && dna.mutantrace) || (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) ) - if(update_icons) update_icons() + if( (HUSK in mutations) || (dna && dna.mutantrace) || (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)) ) return //base icons - var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") - var/icon/face_lying = new /icon('icons/mob/human_face.dmi',"bald_l") - + var/list/standing = list() + var/list/lying = list() + if(f_style) var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style] if(facial_hair_style) - var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s") - var/icon/facial_l = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_l") + var/icon/facial_s = icon("icon"=facial_hair_style.icon, "icon_state"="[facial_hair_style.icon_state]_s") + var/icon/facial_l = icon("icon"=facial_hair_style.icon, "icon_state"="[facial_hair_style.icon_state]_l") facial_s.Blend("#[f_color]", ICON_ADD) facial_l.Blend("#[f_color]", ICON_ADD) - face_standing.Blend(facial_s, ICON_OVERLAY) - face_lying.Blend(facial_l, ICON_OVERLAY) + standing += image("icon"=facial_s, "layer"=-HAIR_LAYER) + lying += image("icon"=facial_l, "layer"=-HAIR_LAYER) //Applies the debrained overlay if there is no brain if(!getbrain(src)) - face_standing.Blend(new /icon('icons/mob/human_face.dmi', "debrained_s"), ICON_OVERLAY) - face_lying.Blend(new /icon('icons/mob/human_face.dmi', "debrained_l"), ICON_OVERLAY) - h_style = "Bald" - + standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="debrained_s", "layer"=-HAIR_LAYER) + lying += image("icon"='icons/mob/human_face.dmi', "icon_state"="debrained_l", "layer"=-HAIR_LAYER) else if(h_style) var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] if(hair_style) - var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s") - var/icon/hair_l = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_l") + var/icon/hair_s = icon("icon"=hair_style.icon, "icon_state"="[hair_style.icon_state]_s") + var/icon/hair_l = icon("icon"=hair_style.icon, "icon_state"="[hair_style.icon_state]_l") hair_s.Blend("#[h_color]", ICON_ADD) hair_l.Blend("#[h_color]", ICON_ADD) - face_standing.Blend(hair_s, ICON_OVERLAY) - face_lying.Blend(hair_l, ICON_OVERLAY) + standing += image("icon"=hair_s, "layer"=-HAIR_LAYER) + lying += image("icon"=hair_l, "layer"=-HAIR_LAYER) - overlays_lying[HAIR_LAYER] = image(face_lying, "layer" = -HAIR_LAYER) - overlays_standing[HAIR_LAYER] = image(face_standing, "layer" = -HAIR_LAYER) + if(lying.len) + overlays_lying[HAIR_LAYER] = lying + if(standing.len) + overlays_standing[HAIR_LAYER] = standing + + apply_overlay(HAIR_LAYER) - if (src.lying) - overlays += overlays_lying[HAIR_LAYER] - else - overlays += overlays_standing[HAIR_LAYER] - if(update_icons) update_icons() +/mob/living/carbon/human/update_mutations() + remove_overlay(MUTATIONS_LAYER) -/mob/living/carbon/human/update_mutations(var/update_icons=1) - overlays -= overlays_lying[MUTATIONS_LAYER] - overlays -= overlays_standing[MUTATIONS_LAYER] - - var/fat - if(FAT in mutations) - fat = "fat" - - var/image/lying = image("icon" = 'icons/effects/genetics.dmi', "layer" = -MUTATIONS_LAYER) - var/image/standing = image("icon" = 'icons/effects/genetics.dmi', "layer" = -MUTATIONS_LAYER) - var/add_image = 0 - var/g = "m" - if(gender == FEMALE) g = "f" + var/list/standing = list() + var/list/lying = list() + + var/g = (gender == FEMALE) ? "f" : "m" for(var/mut in mutations) switch(mut) if(HULK) - if(fat) - lying.underlays += "hulk_[fat]_l" - standing.underlays += "hulk_[fat]_s" - else - lying.underlays += "hulk_[g]_l" - standing.underlays += "hulk_[g]_s" - add_image = 1 + lying += image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_[g]_l", "layer"=-MUTATIONS_LAYER) + standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="hulk_[g]_s", "layer"=-MUTATIONS_LAYER) if(COLD_RESISTANCE) - lying.underlays += "fire[fat]_l" - standing.underlays += "fire[fat]_s" - add_image = 1 + lying += image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_l", "layer"=-MUTATIONS_LAYER) + standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="fire_s", "layer"=-MUTATIONS_LAYER) if(TK) - lying.underlays += "telekinesishead[fat]_l" - standing.underlays += "telekinesishead[fat]_s" - add_image = 1 + lying += image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_l", "layer"=-MUTATIONS_LAYER) + standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="telekinesishead_s", "layer"=-MUTATIONS_LAYER) if(LASER) - lying.overlays += "lasereyes_l" - standing.overlays += "lasereyes_s" - add_image = 1 - if(add_image) + lying += image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes_l", "layer"=-MUTATIONS_LAYER) + standing += image("icon"='icons/effects/genetics.dmi', "icon_state"="lasereyes_s", "layer"=-MUTATIONS_LAYER) + if(lying.len) overlays_lying[MUTATIONS_LAYER] = lying + if(standing.len) overlays_standing[MUTATIONS_LAYER] = standing - if (src.lying) - overlays += overlays_lying[MUTATIONS_LAYER] - else - overlays += overlays_standing[MUTATIONS_LAYER] - else - overlays -= overlays_lying[MUTATIONS_LAYER] - overlays -= overlays_standing[MUTATIONS_LAYER] - overlays_lying[MUTATIONS_LAYER] = null - overlays_standing[MUTATIONS_LAYER] = null - if(update_icons) update_icons() + + apply_overlay(MUTATIONS_LAYER) -/mob/living/carbon/human/proc/update_mutantrace(var/update_icons=1) - overlays -= overlays_lying[MUTANTRACE_LAYER] - overlays -= overlays_standing[MUTANTRACE_LAYER] - var/fat - if( FAT in mutations ) - fat = "fat" +/mob/living/carbon/human/proc/update_body() + remove_overlay(BODY_LAYER) + + update_base_icon_state() + icon_state = "[base_icon_state]_[src.lying ? "l" : "s"]" + + var/list/lying = list() + var/list/standing = list() + + //Mouth (lipstick!) + if(lip_style) + standing += image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_s", "layer"=-BODY_LAYER) + lying += image("icon"='icons/mob/human_face.dmi', "icon_state"="lips_[lip_style]_l", "layer"=-BODY_LAYER) - if(dna) - switch(dna.mutantrace) - if("lizard","golem","slime","shadow","adamantine", "fly") - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l", "layer" = -MUTANTRACE_LAYER) - overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s", "layer" = -MUTANTRACE_LAYER) - if("plant") - if(stat == DEAD) //TODO - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_d", "layer" = -MUTANTRACE_LAYER) - else - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l", "layer" = -MUTANTRACE_LAYER) - overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s", "layer" = -MUTANTRACE_LAYER) - else - overlays -= overlays_lying[MUTANTRACE_LAYER] - overlays -= overlays_standing[MUTANTRACE_LAYER] - overlays_lying[MUTANTRACE_LAYER] = null - overlays_standing[MUTANTRACE_LAYER] = null - update_body(0) - update_hair(0) - if(update_icons) update_icons() + //Eyes + if(!dna || dna.mutantrace != "skeleton") + var/icon/eyes_s = icon('icons/mob/human_face.dmi', "eyes_s") + var/icon/eyes_l = icon('icons/mob/human_face.dmi', "eyes_l") + eyes_s.Blend("#[eye_color]", ICON_ADD) + eyes_l.Blend("#[eye_color]", ICON_ADD) + standing += image("icon"=eyes_s, "layer"=-BODY_LAYER) + lying += image("icon"=eyes_l, "layer"=-BODY_LAYER) + + //Underwear + if(underwear) + var/datum/sprite_accessory/underwear/U = underwear_all[underwear] + if(U) + standing += image("icon"=U.icon, "icon_state"="[U.icon_state]_s", "layer"=-BODY_LAYER) + lying += image("icon"=U.icon, "icon_state"="[U.icon_state]_l", "layer"=-BODY_LAYER) + + if(lying.len) + overlays_lying[BODY_LAYER] = lying + if(standing.len) + overlays_standing[BODY_LAYER] = standing + + apply_overlay(BODY_LAYER) /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() ..() if(monkeyizing) return - update_mutations(0) - update_mutantrace(0) - update_inv_w_uniform(0) - update_inv_wear_id(0) - update_inv_gloves(0) - update_inv_glasses(0) - update_inv_ears(0) - update_inv_shoes(0) - update_inv_s_store(0) - update_inv_wear_mask(0) - update_inv_head(0) - update_inv_belt(0) - update_inv_back(0) - update_inv_wear_suit(0) - update_inv_r_hand(0) - update_inv_l_hand(0) - update_inv_handcuffed(0) - update_inv_legcuffed(0) - update_inv_pockets(0) - update_icons() + update_body() + update_hair() + update_mutations() + update_inv_w_uniform() + update_inv_wear_id() + update_inv_gloves() + update_inv_glasses() + update_inv_ears() + update_inv_shoes() + update_inv_s_store() + update_inv_wear_mask() + update_inv_head() + update_inv_belt() + update_inv_back() + update_inv_wear_suit() + update_inv_r_hand() + update_inv_l_hand() + update_inv_handcuffed() + update_inv_legcuffed() + update_inv_pockets() //Hud Stuff update_hud() /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv -/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1) - if(w_uniform && istype(w_uniform, /obj/item/clothing/under) ) +/mob/living/carbon/human/update_inv_w_uniform() + remove_overlay(UNIFORM_LAYER) + + if(istype(w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = w_uniform if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown) w_uniform.screen_loc = ui_iclothing client.screen += w_uniform - overlays -= overlays_lying[UNIFORM_LAYER] - overlays -= overlays_standing[UNIFORM_LAYER] + var/t_color = w_uniform.color if(!t_color) t_color = icon_state - var/image/lying = image("icon_state" = "[t_color]_l", "layer" = -UNIFORM_LAYER) - var/image/standing = image("icon_state" = "[t_color]_s", "layer" = -UNIFORM_LAYER) - - if(FAT in mutations) - if(w_uniform.flags&ONESIZEFITSALL) - lying.icon = 'icons/mob/uniform_fat.dmi' - standing.icon = 'icons/mob/uniform_fat.dmi' - else - src << "\red You burst out of \the [w_uniform]!" - drop_from_inventory(w_uniform) - return - else - lying.icon = 'icons/mob/uniform.dmi' - standing.icon = 'icons/mob/uniform.dmi' - - if(w_uniform.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood") - - if(w_uniform:hastie) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. - var/tie_color = w_uniform:hastie.color - if(!tie_color) tie_color = w_uniform:hastie.icon_state - lying.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]2") - standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]") - + var/image/lying = image("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_l", "layer"=-UNIFORM_LAYER) + var/image/standing = image("icon"='icons/mob/uniform.dmi', "icon_state"="[t_color]_s", "layer"=-UNIFORM_LAYER) overlays_lying[UNIFORM_LAYER] = lying overlays_standing[UNIFORM_LAYER] = standing - if (src.lying) - overlays += overlays_lying[UNIFORM_LAYER] - else - overlays += overlays_standing[UNIFORM_LAYER] + + if(w_uniform.blood_DNA) + lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood2") + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="uniformblood") + + if(U.hastie) + var/tie_color = U.hastie.color + if(!tie_color) tie_color = U.hastie.icon_state + lying.overlays += image("icon"='icons/mob/ties.dmi', "icon_state"="[tie_color]2") + standing.overlays += image("icon"='icons/mob/ties.dmi', "icon_state"="[tie_color]") else - overlays -= overlays_lying[UNIFORM_LAYER] - overlays -= overlays_standing[UNIFORM_LAYER] - overlays_lying[UNIFORM_LAYER] = null - overlays_standing[UNIFORM_LAYER] = null // Automatically drop anything in store / id / belt if you're not wearing a uniform. //CHECK IF NECESARRY - for( var/obj/item/thing in list(r_store, l_store, wear_id, belt) ) // - if(thing) // - u_equip(thing) // - if (client) // - client.screen -= thing // - // - if (thing) // - thing.loc = loc // - thing.dropped(src) // - thing.layer = initial(thing.layer) - if(update_icons) update_icons() + for(var/obj/item/thing in list(r_store, l_store, wear_id, belt)) // + drop_from_inventory(thing) + + apply_overlay(UNIFORM_LAYER) -/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1) + +/mob/living/carbon/human/update_inv_wear_id() + remove_overlay(ID_LAYER) if(wear_id) if(client && hud_used && hud_used.hud_shown) wear_id.screen_loc = ui_id //TODO client.screen += wear_id - overlays -= overlays_lying[ID_LAYER] - overlays -= overlays_standing[ID_LAYER] - overlays_lying[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id2", "layer" = -ID_LAYER) - overlays_standing[ID_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "id", "layer" = -ID_LAYER) - if (src.lying) - overlays += overlays_lying[ID_LAYER] - else - overlays += overlays_standing[ID_LAYER] - else - overlays -= overlays_lying[ID_LAYER] - overlays -= overlays_standing[ID_LAYER] - overlays_lying[ID_LAYER] = null - overlays_standing[ID_LAYER] = null - if(update_icons) update_icons() + + overlays_lying[ID_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="id2", "layer"=-ID_LAYER) + overlays_standing[ID_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="id", "layer"=-ID_LAYER) + + apply_overlay(ID_LAYER) -/mob/living/carbon/human/update_inv_gloves(var/update_icons=1) + +/mob/living/carbon/human/update_inv_gloves() + remove_overlay(GLOVES_LAYER) if(gloves) if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown) gloves.screen_loc = ui_gloves client.screen += gloves - overlays -= overlays_lying[GLOVES_LAYER] - overlays -= overlays_standing[GLOVES_LAYER] + var/t_state = gloves.item_state if(!t_state) t_state = gloves.icon_state - var/image/lying = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]2", "layer" = -GLOVES_LAYER) - var/image/standing = image("icon" = 'icons/mob/hands.dmi', "icon_state" = "[t_state]", "layer" = -GLOVES_LAYER) - if(gloves.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") + var/image/lying = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]2", "layer"=-GLOVES_LAYER) + var/image/standing = image("icon"='icons/mob/hands.dmi', "icon_state"="[t_state]", "layer"=-GLOVES_LAYER) overlays_lying[GLOVES_LAYER] = lying overlays_standing[GLOVES_LAYER] = standing - if (src.lying) - overlays += overlays_lying[GLOVES_LAYER] - else - overlays += overlays_standing[GLOVES_LAYER] + + if(gloves.blood_DNA) + lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands2") + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands") else if(blood_DNA) - overlays_lying[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands2") - overlays_standing[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") - else - overlays -= overlays_lying[GLOVES_LAYER] - overlays -= overlays_standing[GLOVES_LAYER] - overlays_lying[GLOVES_LAYER] = null - overlays_standing[GLOVES_LAYER] = null - if(update_icons) update_icons() + overlays_lying[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands2") + overlays_standing[GLOVES_LAYER] = image("icon"='icons/effects/blood.dmi', "icon_state"="bloodyhands") + + apply_overlay(GLOVES_LAYER) -/mob/living/carbon/human/update_inv_glasses(var/update_icons=1) + +/mob/living/carbon/human/update_inv_glasses() + remove_overlay(GLASSES_LAYER) + if(glasses) if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown) glasses.screen_loc = ui_glasses client.screen += glasses - overlays -= overlays_lying[GLASSES_LAYER] - overlays -= overlays_standing[GLASSES_LAYER] - overlays_lying[GLASSES_LAYER] = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]2", "layer" = -GLASSES_LAYER) - overlays_standing[GLASSES_LAYER] = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]", "layer" = -GLASSES_LAYER) - if (src.lying) - overlays += overlays_lying[GLASSES_LAYER] - else - overlays += overlays_standing[GLASSES_LAYER] - else - overlays -= overlays_lying[GLASSES_LAYER] - overlays -= overlays_standing[GLASSES_LAYER] - overlays_lying[GLASSES_LAYER] = null - overlays_standing[GLASSES_LAYER] = null - if(update_icons) update_icons() + + overlays_lying[GLASSES_LAYER] = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]2", "layer"=-GLASSES_LAYER) + overlays_standing[GLASSES_LAYER] = image("icon"='icons/mob/eyes.dmi', "icon_state"="[glasses.icon_state]", "layer"=-GLASSES_LAYER) -/mob/living/carbon/human/update_inv_ears(var/update_icons=1) + apply_overlay(GLASSES_LAYER) + + +/mob/living/carbon/human/update_inv_ears() + remove_overlay(EARS_LAYER) + if(ears) if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown) ears.screen_loc = ui_ears client.screen += ears - overlays -= overlays_lying[EARS_LAYER] - overlays -= overlays_standing[EARS_LAYER] - overlays_lying[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[ears.icon_state]2", "layer" = -EARS_LAYER) - overlays_standing[EARS_LAYER] = image("icon" = 'icons/mob/ears.dmi', "icon_state" = "[ears.icon_state]", "layer" = -EARS_LAYER) - if (src.lying) - overlays += overlays_lying[EARS_LAYER] - else - overlays += overlays_standing[EARS_LAYER] - else - overlays -= overlays_lying[EARS_LAYER] - overlays -= overlays_standing[EARS_LAYER] - overlays_lying[EARS_LAYER] = null - overlays_standing[EARS_LAYER] = null - if(update_icons) update_icons() + + overlays_lying[EARS_LAYER] = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]2", "layer"=-EARS_LAYER) + overlays_standing[EARS_LAYER] = image("icon"='icons/mob/ears.dmi', "icon_state"="[ears.icon_state]", "layer"=-EARS_LAYER) + + apply_overlay(EARS_LAYER) -/mob/living/carbon/human/update_inv_shoes(var/update_icons=1) + +/mob/living/carbon/human/update_inv_shoes() + remove_overlay(SHOES_LAYER) + if(shoes) if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown) shoes.screen_loc = ui_shoes client.screen += shoes - var/image/lying = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]2", "layer" = -SHOES_LAYER) - var/image/standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]", "layer" = -SHOES_LAYER) - if(shoes.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood") - overlays -= overlays_lying[SHOES_LAYER] - overlays -= overlays_standing[SHOES_LAYER] + + var/image/lying = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]2", "layer"=-SHOES_LAYER) + var/image/standing = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]", "layer"=-SHOES_LAYER) overlays_lying[SHOES_LAYER] = lying overlays_standing[SHOES_LAYER] = standing - if (src.lying) - overlays += overlays_lying[SHOES_LAYER] - else - overlays += overlays_standing[SHOES_LAYER] - else - overlays -= overlays_lying[SHOES_LAYER] - overlays -= overlays_standing[SHOES_LAYER] - overlays_lying[SHOES_LAYER] = null - overlays_standing[SHOES_LAYER] = null - if(update_icons) update_icons() + + if(shoes.blood_DNA) + lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood2") + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood") + + apply_overlay(SHOES_LAYER) -/mob/living/carbon/human/update_inv_s_store(var/update_icons=1) + +/mob/living/carbon/human/update_inv_s_store() + remove_overlay(SUIT_STORE_LAYER) + if(s_store) if(client && hud_used && hud_used.hud_shown) s_store.screen_loc = ui_sstore1 //TODO client.screen += s_store - overlays -= overlays_lying[SUIT_STORE_LAYER] - overlays -= overlays_standing[SUIT_STORE_LAYER] + var/t_state = s_store.item_state if(!t_state) t_state = s_store.icon_state - overlays_lying[SUIT_STORE_LAYER] = image("icon" = 'icons/mob/belt_mirror.dmi', "icon_state" = "[t_state]2", "layer" = -SUIT_STORE_LAYER) - overlays_standing[SUIT_STORE_LAYER] = image("icon" = 'icons/mob/belt_mirror.dmi', "icon_state" = "[t_state]", "layer" = -SUIT_STORE_LAYER) - if (src.lying) - overlays += overlays_lying[SUIT_STORE_LAYER] - else - overlays += overlays_standing[SUIT_STORE_LAYER] - else - overlays -= overlays_lying[SUIT_STORE_LAYER] - overlays -= overlays_standing[SUIT_STORE_LAYER] - overlays_lying[SUIT_STORE_LAYER] = null - overlays_standing[SUIT_STORE_LAYER] = null - if(update_icons) update_icons() + overlays_lying[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]2", "layer"=-SUIT_STORE_LAYER) + overlays_standing[SUIT_STORE_LAYER] = image("icon"='icons/mob/belt_mirror.dmi', "icon_state"="[t_state]", "layer"=-SUIT_STORE_LAYER) + + apply_overlay(SUIT_STORE_LAYER) -/mob/living/carbon/human/update_inv_head(var/update_icons=1) + +/mob/living/carbon/human/update_inv_head() + remove_overlay(HEAD_LAYER) + if(head) if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown) head.screen_loc = ui_head //TODO client.screen += head - overlays -= overlays_lying[HEAD_LAYER] - overlays -= overlays_standing[HEAD_LAYER] + var/image/lying var/image/standing if(istype(head,/obj/item/clothing/head/kitty)) - lying = image("icon" = head:mob2, "layer" = -HEAD_LAYER) - standing = image("icon" = head:mob, "layer" = -HEAD_LAYER) + var/obj/item/clothing/head/kitty/K = head + lying = image("icon"=K.mob2, "layer"=-HEAD_LAYER) + standing = image("icon"=K.mob, "layer"=-HEAD_LAYER) else - lying = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]2", "layer" = -HEAD_LAYER) - standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]", "layer" = -HEAD_LAYER) - if(head.blood_DNA) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood") + lying = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]2", "layer"=-HEAD_LAYER) + standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) overlays_lying[HEAD_LAYER] = lying overlays_standing[HEAD_LAYER] = standing - if (src.lying) - overlays += overlays_lying[HEAD_LAYER] - else - overlays += overlays_standing[HEAD_LAYER] - else - overlays -= overlays_lying[HEAD_LAYER] - overlays -= overlays_standing[HEAD_LAYER] - overlays_lying[HEAD_LAYER] = null - overlays_standing[HEAD_LAYER] = null - if(update_icons) update_icons() + + if(head.blood_DNA) + lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood2") + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") + + apply_overlay(HEAD_LAYER) -/mob/living/carbon/human/update_inv_belt(var/update_icons=1) + +/mob/living/carbon/human/update_inv_belt() + remove_overlay(BELT_LAYER) + if(belt) if(client && hud_used && hud_used.hud_shown) - belt.screen_loc = ui_belt //TODO + belt.screen_loc = ui_belt client.screen += belt - overlays -= overlays_lying[BELT_LAYER] - overlays -= overlays_standing[BELT_LAYER] + var/t_state = belt.item_state if(!t_state) t_state = belt.icon_state - overlays_lying[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]2", "layer" = -BELT_LAYER) - overlays_standing[BELT_LAYER] = image("icon" = 'icons/mob/belt.dmi', "icon_state" = "[t_state]", "layer" = -BELT_LAYER) - if (src.lying) - overlays += overlays_lying[BELT_LAYER] - else - overlays += overlays_standing[BELT_LAYER] - else - overlays -= overlays_lying[BELT_LAYER] - overlays -= overlays_standing[BELT_LAYER] - overlays_lying[BELT_LAYER] = null - overlays_standing[BELT_LAYER] = null - if(update_icons) update_icons() + overlays_lying[BELT_LAYER] = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]2", "layer"=-BELT_LAYER) + overlays_standing[BELT_LAYER] = image("icon"='icons/mob/belt.dmi', "icon_state"="[t_state]", "layer"=-BELT_LAYER) + + apply_overlay(BELT_LAYER) -/mob/living/carbon/human/update_inv_wear_suit(var/update_icons=1) - if( wear_suit && istype(wear_suit, /obj/item/clothing/suit) ) //TODO check this + +/mob/living/carbon/human/update_inv_wear_suit() + remove_overlay(SUIT_LAYER) + + if(istype(wear_suit, /obj/item/clothing/suit)) if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown) wear_suit.screen_loc = ui_oclothing //TODO client.screen += wear_suit - overlays -= overlays_lying[SUIT_LAYER] - overlays -= overlays_standing[SUIT_LAYER] - var/image/lying = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]2", "layer" = -SUIT_LAYER) - var/image/standing = image("icon" = 'icons/mob/suit.dmi', "icon_state" = "[wear_suit.icon_state]", "layer" = -SUIT_LAYER) - - if(FAT in mutations) - if(!wear_suit.flags&ONESIZEFITSALL) - src << "\red You burst out of \the [wear_suit]!" - var/obj/item/clothing/c = wear_suit - wear_suit = null - if(client) - client.screen -= c - c.loc = loc - c.dropped(src) - c.layer = initial(c.layer) - lying = null - standing = null - - else - if( istype(wear_suit, /obj/item/clothing/suit/straight_jacket) ) - drop_from_inventory(handcuffed) - drop_l_hand() - drop_r_hand() - - if(wear_suit.blood_DNA) - var/obj/item/clothing/suit/S = wear_suit - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "[S.blood_overlay_type]blood2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "[S.blood_overlay_type]blood") - + + var/image/lying = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]2", "layer"=-SUIT_LAYER) + var/image/standing = image("icon"='icons/mob/suit.dmi', "icon_state"="[wear_suit.icon_state]", "layer"=-SUIT_LAYER) overlays_lying[SUIT_LAYER] = lying overlays_standing[SUIT_LAYER] = standing - if (src.lying) - overlays += overlays_lying[SUIT_LAYER] - else - overlays += overlays_standing[SUIT_LAYER] - else - overlays -= overlays_lying[SUIT_LAYER] - overlays -= overlays_standing[SUIT_LAYER] - overlays_lying[SUIT_LAYER] = null - overlays_standing[SUIT_LAYER] = null - if(update_icons) update_icons() -/mob/living/carbon/human/update_inv_pockets(var/update_icons=1) + if(istype(wear_suit, /obj/item/clothing/suit/straight_jacket)) + drop_from_inventory(handcuffed) + drop_l_hand() + drop_r_hand() + + if(wear_suit.blood_DNA) + var/obj/item/clothing/suit/S = wear_suit + lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="[S.blood_overlay_type]blood2") + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="[S.blood_overlay_type]blood") + + apply_overlay(SUIT_LAYER) + + +/mob/living/carbon/human/update_inv_pockets() if(l_store) if(client && hud_used && hud_used.hud_shown) l_store.screen_loc = ui_storage1 //TODO @@ -709,54 +529,42 @@ Please contact me on #coderbus IRC. ~Carn x if(client && hud_used && hud_used.hud_shown) r_store.screen_loc = ui_storage2 //TODO client.screen += r_store - if(update_icons) update_icons() -/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1) - if( wear_mask && istype(wear_mask, /obj/item/clothing/mask) ) +/mob/living/carbon/human/update_inv_wear_mask() + remove_overlay(FACEMASK_LAYER) + + if(istype(wear_mask, /obj/item/clothing/mask)) if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown) wear_mask.screen_loc = ui_mask //TODO client.screen += wear_mask - overlays -= overlays_lying[FACEMASK_LAYER] - overlays -= overlays_standing[FACEMASK_LAYER] - var/image/lying = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]2", "layer" = -FACEMASK_LAYER) - var/image/standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]", "layer" = -FACEMASK_LAYER) - if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) - lying.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood2") - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood") + + var/image/lying = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]2", "layer"=-FACEMASK_LAYER) + var/image/standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) overlays_lying[FACEMASK_LAYER] = lying overlays_standing[FACEMASK_LAYER] = standing - if (src.lying) - overlays += overlays_lying[FACEMASK_LAYER] - else - overlays += overlays_standing[FACEMASK_LAYER] - else - overlays -= overlays_lying[FACEMASK_LAYER] - overlays -= overlays_standing[FACEMASK_LAYER] - overlays_lying[FACEMASK_LAYER] = null - overlays_standing[FACEMASK_LAYER] = null - if(update_icons) update_icons() + + if(wear_mask.blood_DNA && !istype(wear_mask, /obj/item/clothing/mask/cigarette)) + lying.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood2") + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + + apply_overlay(FACEMASK_LAYER) -/mob/living/carbon/human/update_inv_back(var/update_icons=1) + +/mob/living/carbon/human/update_inv_back() + remove_overlay(BACK_LAYER) + if(back) if(client && hud_used && hud_used.hud_shown) back.screen_loc = ui_back //TODO client.screen += back - overlays -= overlays_lying[BACK_LAYER] - overlays -= overlays_standing[BACK_LAYER] - overlays_lying[BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]2", "layer" = -BACK_LAYER) - overlays_standing[BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]", "layer" = -BACK_LAYER) - if (src.lying) - overlays += overlays_lying[BACK_LAYER] - else - overlays += overlays_standing[BACK_LAYER] - else - overlays -= overlays_lying[BACK_LAYER] - overlays -= overlays_standing[BACK_LAYER] - overlays_lying[BACK_LAYER] = null - overlays_standing[BACK_LAYER] = null - if(update_icons) update_icons() + + overlays_lying[BACK_LAYER] = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]2", "layer"=-BACK_LAYER) + overlays_standing[BACK_LAYER] = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) + + apply_overlay(BACK_LAYER) + /mob/living/carbon/human/update_hud() //TODO: do away with this if possible @@ -766,7 +574,9 @@ Please contact me on #coderbus IRC. ~Carn x hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar -/mob/living/carbon/human/update_inv_handcuffed(var/update_icons=1) +/mob/living/carbon/human/update_inv_handcuffed() + remove_overlay(HANDCUFF_LAYER) + if(handcuffed) drop_r_hand() drop_l_hand() @@ -774,84 +584,72 @@ Please contact me on #coderbus IRC. ~Carn x if(hud_used) //hud handcuff icons var/obj/screen/inventory/R = hud_used.adding[3] var/obj/screen/inventory/L = hud_used.adding[4] - R.overlays += image("icon" = 'icons/mob/screen_gen.dmi', "icon_state" = "markus") - L.overlays += image("icon" = 'icons/mob/screen_gen.dmi', "icon_state" = "gabrielle") - overlays -= overlays_lying[HANDCUFF_LAYER] - overlays -= overlays_standing[HANDCUFF_LAYER] - overlays_lying[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "handcuff2", "layer" = -HANDCUFF_LAYER) - overlays_standing[HANDCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "handcuff1", "layer" = -HANDCUFF_LAYER) - if(src.lying) - overlays += overlays_lying[HANDCUFF_LAYER] - else - overlays += overlays_standing[HANDCUFF_LAYER] + R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") + L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") + + overlays_lying[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff2", "layer"=-HANDCUFF_LAYER) + overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) else if(hud_used) var/obj/screen/inventory/R = hud_used.adding[3] var/obj/screen/inventory/L = hud_used.adding[4] R.overlays = null L.overlays = null - overlays -= overlays_lying[HANDCUFF_LAYER] - overlays -= overlays_standing[HANDCUFF_LAYER] - overlays_lying[HANDCUFF_LAYER] = null - overlays_standing[HANDCUFF_LAYER] = null - if(update_icons) update_icons() + + apply_overlay(HANDCUFF_LAYER) -/mob/living/carbon/human/update_inv_legcuffed(var/update_icons=1) + +/mob/living/carbon/human/update_inv_legcuffed() + remove_overlay(LEGCUFF_LAYER) + if(legcuffed) - overlays -= overlays_lying[LEGCUFF_LAYER] - overlays -= overlays_standing[LEGCUFF_LAYER] - overlays_lying[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff2", "layer" = -LEGCUFF_LAYER) - overlays_standing[LEGCUFF_LAYER] = image("icon" = 'icons/mob/mob.dmi', "icon_state" = "legcuff1", "layer" = -LEGCUFF_LAYER) - if(src.lying) - overlays += overlays_lying[LEGCUFF_LAYER] - else - overlays += overlays_standing[LEGCUFF_LAYER] if(src.m_intent != "walk") src.m_intent = "walk" if(src.hud_used && src.hud_used.move_intent) src.hud_used.move_intent.icon_state = "walking" + + overlays_lying[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff2", "layer"=-LEGCUFF_LAYER) + overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) - else - overlays -= overlays_lying[LEGCUFF_LAYER] - overlays -= overlays_standing[LEGCUFF_LAYER] - overlays_lying[LEGCUFF_LAYER] = null - overlays_standing[LEGCUFF_LAYER] = null - if(update_icons) update_icons() + apply_overlay(LEGCUFF_LAYER) -/mob/living/carbon/human/update_inv_r_hand(var/update_icons=1) + +/mob/living/carbon/human/update_inv_r_hand() + remove_overlay(R_HAND_LAYER) + if(r_hand) if(client) r_hand.screen_loc = ui_rhand //TODO client.screen += r_hand + var/t_state = r_hand.item_state if(!t_state) t_state = r_hand.icon_state - overlays -= overlays_standing[R_HAND_LAYER] - overlays_standing[R_HAND_LAYER] = image("icon" = 'icons/mob/items_righthand.dmi', "icon_state" = "[t_state]", "layer" = -R_HAND_LAYER) - overlays += overlays_standing[R_HAND_LAYER] - else - overlays -= overlays_standing[R_HAND_LAYER] - overlays_standing[R_HAND_LAYER] = null - if(update_icons) update_icons() + + overlays_standing[R_HAND_LAYER] = image("icon"='icons/mob/items_righthand.dmi', "icon_state"="[t_state]", "layer"=-R_HAND_LAYER) + + apply_overlay(R_HAND_LAYER) -/mob/living/carbon/human/update_inv_l_hand(var/update_icons=1) + +/mob/living/carbon/human/update_inv_l_hand() + remove_overlay(L_HAND_LAYER) + if(l_hand) if(client) l_hand.screen_loc = ui_lhand //TODO client.screen += l_hand + var/t_state = l_hand.item_state if(!t_state) t_state = l_hand.icon_state - overlays -= overlays_standing[L_HAND_LAYER] - overlays_standing[L_HAND_LAYER] = image("icon" = 'icons/mob/items_lefthand.dmi', "icon_state" = "[t_state]", "layer" = -L_HAND_LAYER) - overlays += overlays_standing[L_HAND_LAYER] - else - overlays -= overlays_standing[L_HAND_LAYER] - overlays_standing[L_HAND_LAYER] = null - if(update_icons) update_icons() + + overlays_standing[L_HAND_LAYER] = image("icon"='icons/mob/items_lefthand.dmi', "icon_state"="[t_state]", "layer"=-L_HAND_LAYER) + + apply_overlay(L_HAND_LAYER) + //Human Overlays Indexes///////// -#undef MUTANTRACE_LAYER +#undef BODY_LAYER #undef MUTATIONS_LAYER #undef DAMAGE_LAYER #undef UNIFORM_LAYER diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index d565fd874ce..707692685ed 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -62,9 +62,7 @@ /mob/living/carbon/slime/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) name = text("[colour] baby slime ([rand(1, 1000)])") real_name = name spawn (1) @@ -594,22 +592,6 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 /mob/living/carbon/slime/show_inv(mob/user) return - -/mob/living/carbon/slime/updatehealth() - if(status_flags & GODMODE) - if(istype(src, /mob/living/carbon/slime/adult)) - health = 200 - else - health = 150 - stat = CONSCIOUS - else - // slimes can't suffocate unless they suicide. They are also not harmed by fire - if(istype(src, /mob/living/carbon/slime/adult)) - health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) - else - health = 150 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) - - /mob/living/carbon/slime/proc/get_obstacle_ok(atom/A) var/direct = get_dir(src, A) var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( src.loc ) @@ -722,9 +704,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 /obj/item/slime_extract/New() ..() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) /obj/item/slime_extract/grey name = "grey slime extract" @@ -1082,9 +1062,7 @@ mob/living/carbon/slime/var/temperature_resistance = T0C+75 /obj/item/slime_core/New() ..() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) POWERFLAG = rand(1,10) Uses = rand(7, 25) //flags |= NOREACT diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 1beac95ed93..6f381e56834 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -10,9 +10,7 @@ update_icon = 0 ///no need to call regenerate_icon /mob/living/carbon/monkey/New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src + create_reagents(1000) internal_organs += new /obj/item/organ/appendix internal_organs += new /obj/item/organ/heart @@ -47,11 +45,6 @@ now_pushing = 1 if(ismob(AM)) var/mob/tmob = AM - if(istype(tmob, /mob/living/carbon/human) && (HULK in tmob.mutations)) - if(prob(70)) - usr << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return if(!(tmob.status_flags & CANPUSH)) now_pushing = 0 return diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 46a7d09e551..b0955f512af 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -17,10 +17,10 @@ /mob/living/proc/updatehealth() if(status_flags & GODMODE) - health = 100 + health = maxHealth stat = CONSCIOUS - else - health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() - halloss + return + health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() - getCloneLoss() //This proc is used for mobs which are affected by pressure to calculate the amount of pressure that actually @@ -41,7 +41,7 @@ for(var/datum/limb/affecting in H.organs) if(!affecting) continue if(affecting.take_damage(0, divided_damage+extradam)) //TODO: fix the extradam stuff. Or, ebtter yet...rewrite this entire proc ~Carn - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) H.updatehealth() return 1 else if(istype(src, /mob/living/carbon/monkey)) @@ -171,6 +171,8 @@ L += src.contents for(var/obj/item/weapon/storage/S in src.contents) //Check for storage items L += get_contents(S) + for(var/obj/item/clothing/under/U in src.contents) //Check for jumpsuit accessories + L += U.contents return L /mob/living/proc/check_contents_for(A) @@ -260,7 +262,7 @@ ..() return -/mob/living/proc/UpdateDamageIcon() +/mob/living/proc/update_damage_overlays() return diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4f12b17ef9d..2eda94c37f1 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -14,6 +14,7 @@ var/list/department_radio_keys = list( ":a" = "alientalk", "#a" = "alientalk", ".a" = "alientalk", ":t" = "Syndicate", "#t" = "Syndicate", ".t" = "Syndicate", ":u" = "Supply", "#u" = "Supply", ".u" = "Supply", + ":v" = "Service", "#v" = "Service", ".v" = "Service", ":g" = "changeling", "#g" = "changeling", ".g" = "changeling", ":R" = "right hand", "#R" = "right hand", ".R" = "right hand", @@ -30,6 +31,7 @@ var/list/department_radio_keys = list( ":A" = "alientalk", "#A" = "alientalk", ".A" = "alientalk", ":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate", ":U" = "Supply", "#U" = "Supply", ".U" = "Supply", + ":V" = "Service", "#V" = "Service", ".V" = "Service", ":G" = "changeling", "#G" = "changeling", ".G" = "changeling", //kinda localization -- rastaf0 diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index fc5edc2f2a3..028a233013c 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -163,10 +163,9 @@ /mob/living/silicon/ai/updatehealth() if(status_flags & GODMODE) - health = 100 + health = maxHealth stat = CONSCIOUS - else - if(fire_res_on_core) - health = 100 - getOxyLoss() - getToxLoss() - getBruteLoss() - else - health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() \ No newline at end of file + return + health = maxHealth - getOxyLoss() - getToxLoss() - getBruteLoss() + if(!fire_res_on_core) + health -= getFireLoss() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/decoy/life.dm b/code/modules/mob/living/silicon/decoy/life.dm index d62d5d15dae..8a336b8353b 100644 --- a/code/modules/mob/living/silicon/decoy/life.dm +++ b/code/modules/mob/living/silicon/decoy/life.dm @@ -9,7 +9,7 @@ /mob/living/silicon/decoy/updatehealth() if(status_flags & GODMODE) - health = 100 + health = maxHealth stat = CONSCIOUS - else - health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() + return + health = maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm index 61bbd2c33d7..da97f539da1 100644 --- a/code/modules/mob/living/silicon/pai/life.dm +++ b/code/modules/mob/living/silicon/pai/life.dm @@ -20,10 +20,10 @@ /mob/living/silicon/pai/updatehealth() if(status_flags & GODMODE) - health = 100 + health = maxHealth stat = CONSCIOUS - else - health = 100 - getBruteLoss() - getFireLoss() + return + health = maxHealth - getBruteLoss() - getFireLoss() /mob/living/silicon/pai/proc/follow_pai() while(card) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 78a2070aedc..2f513e5c0a4 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -327,11 +327,6 @@ now_pushing = 1 if(ismob(AM)) var/mob/tmob = AM - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(20)) - usr << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return if(!(tmob.status_flags & CANPUSH)) now_pushing = 0 return diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index e2ed726be3a..62f3cadb384 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -7,7 +7,7 @@ emote_hear = list("wails","screeches") response_help = "thinks better of touching" response_disarm = "flails at" - response_harm = "punches the" + response_harm = "punches" icon_dead = "shade_dead" speed = -1 a_intent = "harm" @@ -32,7 +32,7 @@ new /obj/item/weapon/ectoplasm (src.loc) for(var/mob/M in viewers(src, null)) if((M.client && !( M.blinded ))) - M.show_message("\red [src] collapses in a shattered heap ") + M.show_message("\red [src] collapses in a shattered heap. ") ghostize() del src return @@ -60,11 +60,6 @@ now_pushing = 1 if(ismob(AM)) var/mob/tmob = AM - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(5)) - src << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return if(!(tmob.status_flags & CANPUSH)) now_pushing = 0 return @@ -92,7 +87,7 @@ /mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob) if(istype(M, /mob/living/simple_animal/construct/builder)) health += 5 - M.emote("mends some of \the [src]'s wounds") + M.emote("mends some of \the [src]'s wounds.") else if(M.melee_damage_upper <= 0) M.emote("[M.friendly] \the [src]") @@ -114,12 +109,12 @@ health -= damage for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + M.show_message("\red \b [src] has been attacked with [O] by [user]. ") else usr << "\red This weapon is ineffective, it does no damage." for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") + M.show_message("\red [user] gently taps [src] with [O]. ") @@ -136,7 +131,7 @@ icon_living = "behemoth" maxHealth = 250 health = 250 - response_harm = "harmlessly punches the" + response_harm = "harmlessly punches" harm_intent_damage = 0 melee_damage_lower = 30 melee_damage_upper = 30 @@ -155,16 +150,16 @@ health -= damage for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + M.show_message("\red \b [src] has been attacked with [O] by [user]. ") else for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") + M.show_message("\red \b [O] bounces harmlessly off of [src]. ") else usr << "\red This weapon is ineffective, it does no damage." for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") + M.show_message("\red [user] gently taps [src] with [O]. ") @@ -229,7 +224,7 @@ maxHealth = 750 health = 750 speak_emote = list("rumbles") - response_harm = "harmlessly punches the" + response_harm = "harmlessly punches" harm_intent_damage = 0 melee_damage_lower = 50 melee_damage_upper = 50 @@ -249,16 +244,16 @@ health -= damage for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + M.show_message("\red \b [src] has been attacked with [O] by [user]. ") else for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") + M.show_message("\red \b [O] bounces harmlessly off of [src]. ") else usr << "\red This weapon is ineffective, it does no damage." for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") + M.show_message("\red [user] gently taps [src] with [O]. ") diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index db4d6f96f78..4729fcbbdae 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -13,17 +13,14 @@ turns_per_move = 5 see_in_dark = 6 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "kicks the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" //RUNTIME IS ALIVE! SQUEEEEEEEE~ /mob/living/simple_animal/cat/Runtime name = "Runtime" - desc = "" - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "kicks" + desc = "GCAT" var/turns_since_scan = 0 var/mob/living/simple_animal/mouse/movement_target diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 5fb5eca6582..9538213b197 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -14,9 +14,9 @@ turns_per_move = 10 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi meat_amount = 3 - response_help = "pets the" - response_disarm = "bops the" - response_harm = "kicks the" + response_help = "pets" + response_disarm = "bops" + response_harm = "kicks" see_in_dark = 5 var/obj/item/inventory_head var/obj/item/inventory_back @@ -40,7 +40,7 @@ else dat += "
Back: Nothing" - user << browse(dat, text("window=mob[];size=325x500", name)) + user << browse(dat, text("window=mob[];size=325x500", real_name)) onclose(user, "mob[real_name]") return @@ -49,15 +49,15 @@ //helmet and armor = 100% protection if( istype(inventory_head,/obj/item/clothing/head/helmet) && istype(inventory_back,/obj/item/clothing/suit/armor) ) if( O.force ) - usr << "\red This animal is wearing too much armor. You can't cause /him any damage." + usr << "\red [src] is wearing too much armor. You can't cause \him any damage." for (var/mob/M in viewers(src, null)) - M.show_message("\red \b [user] hits [src] with the [O], however [src] is too armored.") + M.show_message("\red \b [user] hits [src] with [O], however [src] is too armored.") else - usr << "\red This animal is wearing too much armor. You can't reach its skin." + usr << "\red [src] is wearing too much armor. You can't reach \his skin." for (var/mob/M in viewers(src, null)) - M.show_message("\red [user] gently taps [src] with the [O]. ") - if(prob(15)) - emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression on \his face") + M.show_message("\red [user] gently taps [src] with [O]. ") + if(health>0 && prob(15)) + emote("looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression") return ..() @@ -82,6 +82,7 @@ SetLuminosity(0) inventory_head.loc = src.loc inventory_head = null + regenerate_icons() else usr << "\red There is nothing to remove from its [remove_from]." return @@ -89,76 +90,23 @@ if(inventory_back) inventory_back.loc = src.loc inventory_back = null + regenerate_icons() else usr << "\red There is nothing to remove from its [remove_from]." return - //show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying. + show_inv(usr) //Adding things to inventory else if(href_list["add_inv"]) if(get_dist(src,usr) > 1 || !(ishuman(usr) || ismonkey(usr) || isrobot(usr) || isalienadult(usr))) return + var/add_to = href_list["add_inv"] - if(!usr.get_active_hand()) - usr << "\red You have nothing in your hand to put on its [add_to]." - return + switch(add_to) if("head") - if(inventory_head) - usr << "\red It's is already wearing something." - return - else - place_on_head(usr.get_active_hand()) - - var/obj/item/item_to_add = usr.get_active_hand() - if(!item_to_add) - return - - //Corgis are supposed to be simpler, so only a select few objects can actually be put - //to be compatible with them. The objects are below. - //Many hats added, Some will probably be removed, just want to see which ones are popular. - - var/list/allowed_types = list( - /obj/item/clothing/head/helmet, - /obj/item/clothing/glasses/sunglasses, - /obj/item/clothing/head/caphat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/that, - /obj/item/clothing/head/that, - /obj/item/clothing/head/kitty, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/rabbitears, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/beret, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/det_hat, - /obj/item/clothing/head/nursehat, - /obj/item/clothing/head/pirate, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/ushanka, - /obj/item/clothing/head/chefhat, - /obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/wizard/fake, - /obj/item/clothing/head/wizard, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/hardhat/white, - /obj/item/weapon/bedsheet, - /obj/item/clothing/head/helmet/space/santahat, - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/soft - ) - - if( ! ( item_to_add.type in allowed_types ) ) - usr << "\red It doesn't seem too keen on wearing that item." - return - - usr.drop_item() - - place_on_head(item_to_add) + place_on_head(usr.get_active_hand()) if("back") if(inventory_back) @@ -166,19 +114,33 @@ return else var/obj/item/item_to_add = usr.get_active_hand() + if(!item_to_add) + usr.visible_message("\blue [usr] pets [src]","\blue You rest your hand on [src]'s back for a moment.") + return + if(istype(item_to_add,/obj/item/weapon/plastique)) // last thing he ever wears, I guess + item_to_add.afterattack(src,usr,1) return - //Corgis are supposed to be simpler, so only a select few objects can actually be put - //to be compatible with them. The objects are below. - + //The objects that corgis can wear on their backs. var/list/allowed_types = list( /obj/item/clothing/suit/armor/vest, - /obj/item/device/radio + /obj/item/device/radio, + /obj/item/clothing/suit/cardborg, + /obj/item/weapon/tank/oxygen, + /obj/item/weapon/tank/air, + /obj/item/weapon/extinguisher ) if( ! ( item_to_add.type in allowed_types ) ) - usr << "\red This object won't fit." + usr << "You set [item_to_add] on [src]'s back, but \he shakes it off!" + usr.drop_item() + item_to_add.loc = loc + if(prob(25)) + step_rand(item_to_add) + for(var/i in list(1,2,4,8,4,8,4,dir)) + dir = i + sleep(1) return usr.drop_item() @@ -186,73 +148,154 @@ src.inventory_back = item_to_add regenerate_icons() - //show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying. + show_inv(usr) else ..() +//Corgis are supposed to be simpler, so only a select few objects can actually be put +//to be compatible with them. The objects are below. +//Many hats added, Some will probably be removed, just want to see which ones are popular. /mob/living/simple_animal/corgi/proc/place_on_head(obj/item/item_to_add) - item_to_add.loc = src - src.inventory_head = item_to_add - regenerate_icons() - //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed. - switch(inventory_head && inventory_head.type) + if(istype(item_to_add,/obj/item/weapon/plastique)) // last thing he ever wears, I guess + item_to_add.afterattack(src,usr,1) + return + + if(inventory_head) + usr << "\red You can't put more than one hat on [src]!" + return + if(!item_to_add) + usr.visible_message("\blue [usr] pets [src]","\blue You rest your hand on [src]'s head for a moment.") + return + + + var/valid = 0 + + //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed. + switch(item_to_add.type) + if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper, + /obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat,/obj/item/clothing/head/hardhat/white, /obj/item/weapon/paper ) + valid = 1 + + if(/obj/item/clothing/head/helmet) + name = "Sergeant [real_name]" + desc = "The ever-loyal, the ever-vigilant." + valid = 1 + + if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef) + name = "Sous chef [real_name]" + desc = "Your food will be taste-tested. All of it." + valid = 1 + if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain) name = "Captain [real_name]" desc = "Probably better than the last captain." + valid = 1 + if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty) name = "Runtime" emote_see = list("coughs up a furball", "stretches") emote_hear = list("purrs") speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") desc = "It's a cute little kitty-cat! ... wait ... what the hell?" + valid = 1 + if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears) name = "Hoppy" emote_see = list("twitches its nose", "hops around a bit") - desc = "This is hoppy. It's a corgi-...urmm... bunny rabbit" + desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" + valid = 1 + if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret) name = "Yann" desc = "Mon dieu! C'est un chien!" speak = list("le woof!", "le bark!", "JAPPE!!") emote_see = list("cowers in fear", "surrenders", "plays dead","looks as though there is a wall in front of him") + valid = 1 + if(/obj/item/clothing/head/det_hat) name = "Detective [real_name]" desc = "[name] sees through your lies..." emote_see = list("investigates the area","sniffs around for clues","searches for scooby snacks") + valid = 1 + if(/obj/item/clothing/head/nursehat) name = "Nurse [real_name]" desc = "[name] needs 100cc of beef jerky...STAT!" + valid = 1 + if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate) name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" desc = "Yaarghh!! Thar' be a scurvy dog!" emote_see = list("hunts for treasure","stares coldly...","gnashes his tiny corgi teeth") emote_hear = list("growls ferociously", "snarls") speak = list("Arrrrgh!!","Grrrrrr!") + valid = 1 + if(/obj/item/clothing/head/ushanka) name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]" desc = "A follower of Karl Barx." emote_see = list("contemplates the failings of the capitalist economic model", "ponders the pros and cons of vangaurdism") + valid = 1 + if(/obj/item/clothing/head/collectable/police) name = "Officer [real_name]" emote_see = list("drools","looks for donuts") desc = "Stop right there criminal scum!" + valid = 1 + if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard) name = "Grandwizard [real_name]" speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") + valid = 1 + + if(/obj/item/clothing/head/cardborg) + name = "Borgi" + speak = list("Ping!","Beep!","Woof!") + emote_see = list("goes rogue", "sniffs out non-humans") + desc = "Result of robotics budget cuts." + valid = 1 + if(/obj/item/weapon/bedsheet) name = "\improper Ghost" speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") emote_see = list("stumbles around", "shivers") emote_hear = list("howls","groans") desc = "Spooky!" + valid = 1 + if(/obj/item/clothing/head/helmet/space/santahat) name = "Rudolph the Red-Nosed Corgi" emote_hear = list("barks christmas songs", "yaps") desc = "He has a very shiny nose." SetLuminosity(4) + valid = 1 + if(/obj/item/clothing/head/soft) name = "Corgi Tech [real_name]" desc = "The reason your yellow gloves have chew-marks." + valid = 1 + + if(valid) + usr.visible_message("[usr] puts [item_to_add] on [real_name]'s head. [src] looks at [usr] and barks once.", + "You put [item_to_add] on [real_name]'s head. [src] gives you a peculiar look, then wags \his tail once and barks.", + "You hear a friendly-sounding bark.") + usr.drop_item() + item_to_add.loc = src + src.inventory_head = item_to_add + regenerate_icons() + + else + usr << "You set [item_to_add] on [src]'s head, but \he shakes it off!" + usr.drop_item() + item_to_add.loc = loc + if(prob(25)) + step_rand(item_to_add) + for(var/i in list(1,2,4,8,4,8,4,dir)) + dir = i + sleep(1) + + return valid //IAN! SQUEEEEEEEEE~ @@ -309,7 +352,7 @@ movement_target.attack_animal(src) else if(ishuman(movement_target.loc) ) if(prob(20)) - emote("stares at the [movement_target] that [movement_target.loc] has with a sad puppy-face") + emote("stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") if(prob(1)) emote(pick("dances around","chases its tail")) @@ -326,11 +369,6 @@ now_pushing = 1 if(ismob(AM)) var/mob/tmob = AM - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(70)) - src << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return if(!(tmob.status_flags & CANPUSH)) now_pushing = 0 return @@ -358,9 +396,7 @@ /mob/living/simple_animal/corgi/attackby(var/obj/item/O as obj, var/mob/user as mob) //Marker -Agouri if(istype(O, /obj/item/weapon/newspaper)) if(!stat) - for(var/mob/M in viewers(user, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\blue [user] baps [name] on the nose with the rolled up [O]") + user.visible_message("\blue [user] baps [name] on the nose with the rolled up [O]") spawn(0) for(var/i in list(1,2,4,8,4,2,1,2)) dir = i diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 111a278b369..a033f81ac63 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -11,9 +11,9 @@ speak_chance = 1 turns_per_move = 5 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "stomps the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "stomps" stop_automated_movement = 1 friendly = "pinches" var/obj/item/inventory_head @@ -60,20 +60,20 @@ del(MED) for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\blue [user] applies the [MED] on [src]") + M.show_message("\blue [user] applies [MED] on [src]") else - user << "\blue this [src] is dead, medical items won't bring it back to life." + user << "\blue this crab is dead, medical items won't bring it back to life." else if(O.force) health -= O.force for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + M.show_message("\red \b [src] has been attacked with [O] by [user]. ") else usr << "\red This weapon is ineffective, it does no damage." for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") + M.show_message("\red [user] gently taps [src] with [O]. ") /mob/living/simple_animal/crab/GetMad() name = "MEGAMADCRAB" diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 5d79c98fb6b..42fdaa21c91 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -14,9 +14,9 @@ see_in_dark = 6 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat meat_amount = 4 - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "kicks the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" faction = "goat" attacktext = "kicks" health = 40 @@ -60,7 +60,7 @@ /mob/living/simple_animal/hostile/retaliate/goat/Retaliate() ..() - src.visible_message("\red [src] gets an evil-looking gleam in their eye.") + src.visible_message("\red [src] gets an evil-looking gleam in \his eye.") /mob/living/simple_animal/hostile/retaliate/goat/Move() ..() @@ -77,7 +77,7 @@ var/obj/item/weapon/reagent_containers/glass/G = O var/transfered = udder.trans_id_to(G, "milk", rand(5,10)) if(G.reagents.total_volume >= G.volume) - user << "\red The [O] is full." + user << "\red [O] is full." if(!transfered) user << "\red The udder is dry. Wait a bit longer..." else @@ -99,9 +99,9 @@ see_in_dark = 6 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat meat_amount = 6 - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "kicks the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" attacktext = "kicks" health = 50 var/datum/reagents/udder = null @@ -117,7 +117,7 @@ var/obj/item/weapon/reagent_containers/glass/G = O var/transfered = udder.trans_id_to(G, "milk", rand(5,10)) if(G.reagents.total_volume >= G.volume) - user << "\red The [O] is full." + user << "\red [O] is full." if(!transfered) user << "\red The udder is dry. Wait a bit longer..." else @@ -140,7 +140,7 @@ var/list/responses = list( "[src] looks at you imploringly.", "[src] looks at you pleadingly", "[src] looks at you with a resigned expression.", - "[src] seems resigned to it's fate.") + "[src] seems resigned to its fate.") M << pick(responses) else ..() @@ -160,9 +160,9 @@ turns_per_move = 2 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat meat_amount = 1 - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "kicks the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" attacktext = "kicks" health = 1 var/amount_grown = 0 @@ -200,9 +200,9 @@ var/global/chicken_count = 0 turns_per_move = 3 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat meat_amount = 2 - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "kicks the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "kicks" attacktext = "kicks" health = 10 var/eggsleft = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 1909be755b8..941eb0a3329 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -14,9 +14,9 @@ maxHealth = 5 health = 5 meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "splats the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "splats" density = 0 var/color //brown, gray and white, leave blank for random @@ -31,10 +31,14 @@ /mob/living/simple_animal/mouse/proc/splat() src.health = 0 - src.stat = DEAD src.icon_dead = "mouse_[color]_splat" - src.icon_state = "mouse_[color]_splat" + Die() +/mob/living/simple_animal/mouse/Die() + ..() + var/obj/item/trash/deadmouse/M = new(src.loc) + M.icon_state = src.icon_dead + del (src) /mob/living/simple_animal/mouse/HasEntered(AM as mob|obj) if( ishuman(AM) ) @@ -66,4 +70,10 @@ desc = "Jerry the cat is not amused." response_help = "pets" response_disarm = "gently pushes aside" - response_harm = "splats" \ No newline at end of file + response_harm = "splats" + +/obj/item/trash/deadmouse + name = "dead mouse" + desc = "It looks like somebody dropped the bass on it." + icon = 'icons/mob/animal.dmi' + icon_state = "mouse_gray_dead" diff --git a/code/modules/mob/living/simple_animal/friendly/mushroom.dm b/code/modules/mob/living/simple_animal/friendly/mushroom.dm index 736aeeed6be..e99470ca03c 100644 --- a/code/modules/mob/living/simple_animal/friendly/mushroom.dm +++ b/code/modules/mob/living/simple_animal/friendly/mushroom.dm @@ -9,7 +9,7 @@ maxHealth = 5 health = 5 meat_type = /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "whacks the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "whacks" harm_intent_damage = 5 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index adb494adec8..0b6c2d00cfe 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -22,11 +22,6 @@ now_pushing = 1 if(ismob(AM)) var/mob/tmob = AM - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(70)) - src << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return if(!(tmob.status_flags & CANPUSH)) now_pushing = 0 return diff --git a/code/modules/mob/living/simple_animal/friendly/tomato.dm b/code/modules/mob/living/simple_animal/friendly/tomato.dm index 1248e702d2d..57c0f4c939b 100644 --- a/code/modules/mob/living/simple_animal/friendly/tomato.dm +++ b/code/modules/mob/living/simple_animal/friendly/tomato.dm @@ -9,7 +9,7 @@ maxHealth = 15 health = 15 meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat - response_help = "prods the" - response_disarm = "pushes aside the" - response_harm = "smacks the" + response_help = "prods" + response_disarm = "pushes aside" + response_harm = "smacks" harm_intent_damage = 5 \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 0d96e85d12f..384963ff056 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -6,9 +6,9 @@ icon_living = "alienh_running" icon_dead = "alien_l" icon_gib = "syndicate_gib" - response_help = "pokes the" - response_disarm = "shoves the" - response_harm = "hits the" + response_help = "pokes" + response_disarm = "shoves" + response_harm = "hits" speed = -1 meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat maxHealth = 100 diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index a7a84c23fbf..f4a74965c4d 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -14,9 +14,9 @@ turns_per_move = 5 see_in_dark = 6 meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "pokes the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "pokes" stop_automated_movement_when_pulled = 0 maxHealth = 60 health = 60 diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 7537080186e..d2601c3303d 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -10,9 +10,9 @@ speak_chance = 0 turns_per_move = 5 meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "hits" speed = -1 maxHealth = 25 health = 25 diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index ecc0e8882e6..c9a3907e796 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -1,14 +1,14 @@ /mob/living/simple_animal/hostile/faithless - name = "Faithless" + name = "The Faithless" desc = "The Wish Granter's faith in humanity, incarnate" icon_state = "faithless" icon_living = "faithless" icon_dead = "faithless_dead" speak_chance = 0 turns_per_move = 5 - response_help = "passes through the" + response_help = "passes through" response_disarm = "shoves" - response_harm = "hits the" + response_harm = "hits" speed = -1 maxHealth = 80 health = 80 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 55cc35cf979..a0cf20cf4af 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -17,9 +17,9 @@ turns_per_move = 5 see_in_dark = 10 meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat - response_help = "pets the" - response_disarm = "gently pushes aside the" - response_harm = "pokes the" + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "pokes" stop_automated_movement_when_pulled = 0 maxHealth = 200 health = 200 diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index 887c1a5ce8b..4fafd9db5e1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -10,9 +10,9 @@ icon_living = "crate" meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat - response_help = "touches the" - response_disarm = "pushes the" - response_harm = "hits the" + response_help = "touches" + response_disarm = "pushes" + response_harm = "hits" speed = -1 maxHealth = 250 health = 250 diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 6c2d55df6c4..10b744a1f06 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -6,9 +6,9 @@ icon_dead = "piratemelee_dead" speak_chance = 0 turns_per_move = 5 - response_help = "pushes the" + response_help = "pushes" response_disarm = "shoves" - response_harm = "hits the" + response_harm = "hits" speed = -1 stop_automated_movement_when_pulled = 0 maxHealth = 100 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 68d0e3c5cdb..283849d5896 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -7,9 +7,9 @@ icon_gib = "clown_gib" speak_chance = 0 turns_per_move = 5 - response_help = "pokes the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" + response_help = "pokes" + response_disarm = "gently pushes aside" + response_harm = "hits" speak = list("HONK", "Honk!", "Welcome to clown planet!") emote_see = list("honks") speak_chance = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index ec2f9dcfd7e..04e16208787 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -7,9 +7,9 @@ icon_gib = "syndicate_gib" speak_chance = 0 turns_per_move = 5 - response_help = "pokes the" - response_disarm = "shoves the" - response_harm = "hits the" + response_help = "pokes" + response_disarm = "shoves" + response_harm = "hits" speed = -1 stop_automated_movement_when_pulled = 0 maxHealth = 100 diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 17e43670fa4..a9fce0633f2 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -7,9 +7,9 @@ icon_gib = "syndicate_gib" speak_chance = 0 turns_per_move = 5 - response_help = "pokes the" - response_disarm = "shoves the" - response_harm = "hits the" + response_help = "pokes" + response_disarm = "shoves" + response_harm = "hits" speed = -1 stop_automated_movement_when_pulled = 0 maxHealth = 100 @@ -65,12 +65,12 @@ if (O.damtype == HALLOSS) damage = 0 health -= damage - visible_message("\red \b [src] has been attacked with the [O] by [user]. ") + visible_message("\red \b [src] has been attacked with [O] by [user]. ") else - visible_message("\red \b [src] blocks the [O] with its shield! ") + visible_message("\red \b [src] blocks [O] with its shield! ") else usr << "\red This weapon is ineffective, it does no damage." - visible_message("\red [user] gently taps [src] with the [O]. ") + visible_message("\red [user] gently taps [src] with [O]. ") /mob/living/simple_animal/hostile/syndicate/melee/bullet_act(var/obj/item/projectile/Proj) diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index d0ac951fcc7..c757ecf8b82 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -9,9 +9,9 @@ speak_chance = 0 turns_per_move = 5 meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat - response_help = "brushes the" - response_disarm = "pushes the" - response_harm = "hits the" + response_help = "brushes" + response_disarm = "pushes" + response_harm = "hits" speed = -1 maxHealth = 250 health = 250 diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index de6e4eeaed1..35206cf6687 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -26,7 +26,7 @@ /mob/living/simple_animal/parrot - name = "\improper Parrot" + name = "parrot" desc = "The parrot squaks, \"It's a Parrot! BAWWK!\"" icon = 'icons/mob/animal.dmi' icon_state = "parrot_fly" @@ -43,9 +43,9 @@ turns_per_move = 5 meat_type = /obj/item/weapon/reagent_containers/food/snacks/cracker/ - response_help = "pets the" - response_disarm = "gently moves aside the" - response_harm = "swats the" + response_help = "pets" + response_disarm = "gently moves aside" + response_harm = "swats" stop_automated_movement = 1 var/parrot_state = PARROT_WANDER //Hunt for a perch when created @@ -425,7 +425,7 @@ if(!parrot_perch || parrot_interest.loc != parrot_perch.loc) held_item = parrot_interest parrot_interest.loc = src - visible_message("[src] grabs the [held_item]!", "\blue You grab the [held_item]!", "You hear the sounds of wings flapping furiously.") + visible_message("[src] grabs [held_item]!", "\blue You grab [held_item]!", "You hear the sounds of wings flapping furiously.") parrot_interest = null parrot_state = PARROT_SWOOP | PARROT_RETURN @@ -608,7 +608,7 @@ return -1 if(held_item) - src << "\red You are already holding the [held_item]" + src << "\red You are already holding [held_item]" return 1 for(var/obj/item/I in view(1,src)) @@ -621,7 +621,7 @@ held_item = I I.loc = src - visible_message("[src] grabs the [held_item]!", "\blue You grab the [held_item]!", "You hear the sounds of wings flapping furiously.") + visible_message("[src] grabs [held_item]!", "\blue You grab [held_item]!", "You hear the sounds of wings flapping furiously.") return held_item src << "\red There is nothing of interest to take." @@ -636,7 +636,7 @@ return -1 if(held_item) - src << "\red You are already holding the [held_item]" + src << "\red You are already holding [held_item]" return 1 var/obj/item/stolen_item = null @@ -652,7 +652,7 @@ C.u_equip(stolen_item) held_item = stolen_item stolen_item.loc = src - visible_message("[src] grabs the [held_item] out of [C]'s hand!", "\blue You snag the [held_item] out of [C]'s hand!", "You hear the sounds of wings flapping furiously.") + visible_message("[src] grabs [held_item] out of [C]'s hand!", "\blue You snag [held_item] out of [C]'s hand!", "You hear the sounds of wings flapping furiously.") return held_item src << "\red There is nothing of interest to take." @@ -688,11 +688,11 @@ var/obj/item/weapon/grenade/G = held_item G.loc = src.loc G.prime() - src << "You let go of the [held_item]!" + src << "You let go of [held_item]!" held_item = null return 1 - src << "You drop the [held_item]." + src << "You drop [held_item]." held_item.loc = src.loc held_item = null diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 7c31082bba2..2390a5957c2 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -12,7 +12,7 @@ emote_hear = list("wails","screeches") response_help = "puts their hand through" response_disarm = "flails at" - response_harm = "punches the" + response_harm = "punches" melee_damage_lower = 5 melee_damage_upper = 15 attacktext = "drains the life from" @@ -51,10 +51,10 @@ health -= damage for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + M.show_message("\red \b [src] has been attacked with [O] by [user]. ") else usr << "\red This weapon is ineffective, it does no damage." for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") + M.show_message("\red [user] gently taps [src] with [O]. ") return diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 1644490fed9..dd9c173010e 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -238,7 +238,7 @@ if(M.attack_sound) playsound(loc, M.attack_sound, 50, 1, 1) for(var/mob/O in viewers(src, null)) - O.show_message("\red [M] [M.attacktext] [src]!", 1) + O.show_message("\red \The [M] [M.attacktext] [src]!", 1) M.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") src.attack_log += text("\[[time_stamp()]\] was attacked by [M.name] ([M.ckey])") var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) @@ -258,7 +258,7 @@ if (health > 0) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message("\blue [M] [response_help] [src]") + O.show_message("\blue [M] [response_help] [src].") if("grab") if (M == src) @@ -283,7 +283,7 @@ adjustBruteLoss(harm_intent_damage) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) - O.show_message("\red [M] [response_harm] [src]") + O.show_message("\red [M] [response_harm] [src]!") return @@ -346,7 +346,7 @@ if(M.Victim) return // can't attack while eating! - visible_message("\red The [M.name] glomps [src]!") + visible_message("\red [M.name] glomps [src]!") var/damage = rand(1, 3) @@ -374,9 +374,9 @@ del(MED) for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\blue [user] applies the [MED] on [src]") + M.show_message("\blue [user] applies [MED] on [src]") else - user << "\blue this [src] is dead, medical items won't bring it back to life." + user << "\blue [src] is dead, medical items won't bring it back to life." if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead. if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch)) new meat_type (get_turf(src)) @@ -392,12 +392,12 @@ adjustBruteLoss(damage) for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + M.show_message("\red \b "+"[src] has been attacked with [O] by [user]. ") else usr << "\red This weapon is ineffective, it does no damage." for(var/mob/M in viewers(src, null)) if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") + M.show_message("\red [user] gently taps [src] with [O]. ") diff --git a/code/modules/mob/living/simple_animal/worm.dm b/code/modules/mob/living/simple_animal/worm.dm index 14faaffdd57..814b619d558 100644 --- a/code/modules/mob/living/simple_animal/worm.dm +++ b/code/modules/mob/living/simple_animal/worm.dm @@ -12,7 +12,7 @@ response_help = "touches" response_disarm = "flails at" - response_harm = "punches the" + response_harm = "punches" harm_intent_damage = 2 diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 7e0cb82f2e6..14ec3a49e10 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -122,12 +122,6 @@ icon_state = "grabbed1" else if(state < GRAB_NECK) - if(istype(affecting, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = affecting - if(FAT in H.mutations) - assailant << "You can't strangle [affecting] through all that fat!" - return - if(isslime(affecting)) assailant << "You squeeze [affecting], but nothing interesting happens." return diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index d4447280d2a..7cfb72db6c3 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -6,7 +6,7 @@ datum/preferences else gender = pick(MALE,FEMALE) underwear = random_underwear(gender) - s_tone = random_skin_tone() + skin_tone = random_skin_tone() h_style = random_hair_style(gender) f_style = random_facial_hair_style(gender) h_color = random_short_color() @@ -23,10 +23,7 @@ datum/preferences var/g = "m" if(gender == FEMALE) g = "f" - preview_icon = new /icon('icons/mob/human.dmi', "body_[g]_s") - - // Skin tone - preview_icon.Blend("#[skin_tones[s_tone]]", ICON_MULTIPLY) + preview_icon = new /icon('icons/mob/human.dmi', "[skin_tone]_[g]_s") if(underwear) var/datum/sprite_accessory/underwear/U = underwear_all[underwear] diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 99446bf0532..0b52fa0e41b 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -353,6 +353,10 @@ name = "Five o Clock Shadow" icon_state = "facial_fiveoclock" + fu + name = "Fu Manchu" + icon_state = "facial_fumanchu" + /////////////////////////// // Underwear Definitions // /////////////////////////// diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index e96a7d61455..bc69e3a78a4 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -36,8 +36,8 @@ user << "You put [W] into [src]." update_icon() else if(istype(W, /obj/item/weapon/pen)) - var/n_name = copytext(sanitize(input(usr, "What would you like to label the folder?", "Folder Labelling", null) as text), 1, MAX_NAME_LEN) - if((loc == usr && usr.stat == 0)) + var/n_name = copytext(sanitize(input(user, "What would you like to label the folder?", "Folder Labelling", null) as text), 1, MAX_NAME_LEN) + if((in_range(src,user) && user.stat == CONSCIOUS)) name = "folder[(n_name ? "- '[n_name]'" : null)]" diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index b2495c0f730..cd814d9d5c8 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -277,12 +277,12 @@ else if(istype(P, /obj/item/weapon/stamp)) if(!in_range(src, usr) && loc != user && !istype(loc, /obj/item/weapon/clipboard) && loc.loc != user && user.get_active_hand() != P) return - + if(istype(P, /obj/item/weapon/stamp/clown)) if(!clown) user << "You are totally unable to use the stamp. HONK!" return - + stamps += "" var/image/stampoverlay = image('icons/obj/bureaucracy.dmi') @@ -323,7 +323,7 @@ /obj/item/weapon/paper/djstation name = "paper - 'DJ Listening Outpost'" - info = "Welcome new owner!

You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
  1. Equip yourself with a multi-tool
  2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
  3. Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
  • 145.7 - Common Channel
  • 144.7 - Private AI Channel
  • 135.9 - Security Channel
  • 135.7 - Engineering Channel
  • 135.5 - Medical Channel
  • 135.3 - Command Channel
  • 135.1 - Science Channel
  • 134.9 - Mining Channel
  • 134.7 - Cargo Channel
  • " + info = "Welcome new owner!

    You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio frequencies. Here is a step by step guide to start listening in on those saucy radio channels:
    1. Equip yourself with a multitool
    2. Use the multitool on the relay.
    3. Turn it on. It has already been configured for you to listen on.
    Simple as that. Now to listen to the private channels, you'll have to configure the intercoms. They are located on the front desk. Here is a list of frequencies for you to listen on.
    • 145.9 - Common Channel
    • 144.7 - Private AI Channel
    • 135.9 - Security Channel
    • 135.7 - Engineering Channel
    • 135.5 - Medical Channel
    • 135.3 - Command Channel
    • 135.1 - Science Channel
    • 134.9 - Service Channel
    • 134.7 - Supply Channel
    • " /obj/item/weapon/paper/jobs name = "paper- 'Job Information'" diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 49a6dbd9635..2ab3c71d57a 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -63,10 +63,8 @@ /obj/item/weapon/pen/sleepypen/New() - var/datum/reagents/R = new /datum/reagents(30) //Used to be 300 - reagents = R - R.my_atom = src - R.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin //30 Chloral seems to be fatal, reducing it to 22. + create_reagents(30) + reagents.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin //30 Chloral seems to be fatal, reducing it to 22. ..() @@ -96,10 +94,8 @@ /obj/item/weapon/pen/paralysis/New() - var/datum/reagents/R = new/datum/reagents(50) - reagents = R - R.my_atom = src - R.add_reagent("zombiepowder", 10) - R.add_reagent("impedrezene", 25) - R.add_reagent("cryptobiolin", 15) + create_reagents(50) + reagents.add_reagent("zombiepowder", 10) + reagents.add_reagent("impedrezene", 25) + reagents.add_reagent("cryptobiolin", 15) ..() \ No newline at end of file diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index f5e87665e61..70da53ed059 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -497,7 +497,7 @@ var/datum/limb/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm") if(affecting.take_damage( 0, 5 )) // 5 burn damage - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) H.updatehealth() return // if burned, don't remove the light diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 6e1e31abaa3..2f75251a0ea 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -248,17 +248,11 @@ datum if(!C.required_other) matching_other = 1 - else - /*if(istype(my_atom, /obj/item/slime_core)) - var/obj/item/slime_core/M = my_atom + else if(istype(my_atom, /obj/item/slime_extract)) + var/obj/item/slime_extract/M = my_atom - if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this - matching_other = 1*/ - if(istype(my_atom, /obj/item/slime_extract)) - var/obj/item/slime_extract/M = my_atom - - if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this - matching_other = 1 + if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this + matching_other = 1 @@ -278,13 +272,6 @@ datum for(var/mob/M in seen) M << "\blue \icon[my_atom] The solution begins to bubble." - /* if(istype(my_atom, /obj/item/slime_core)) - var/obj/item/slime_core/ME = my_atom - ME.Uses-- - if(ME.Uses <= 0) // give the notification that the slime core is dead - for(var/mob/M in viewers(4, get_turf(my_atom)) ) - M << "\blue \icon[my_atom] The innards begin to boil!" - */ if(istype(my_atom, /obj/item/slime_extract)) var/obj/item/slime_extract/ME2 = my_atom ME2.Uses-- diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 3ea1a9c501e..639ff1c485b 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -188,9 +188,7 @@ var/useramount = 30 // Last used amount /obj/machinery/chem_master/New() - var/datum/reagents/R = new/datum/reagents(100) - reagents = R - R.my_atom = src + create_reagents(100) /obj/machinery/chem_master/ex_act(severity) switch(severity) diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index a5316ef123f..c66e0f92bcb 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -315,10 +315,11 @@ datum if(!M) M = holder.my_atom if(ishuman(M)) var/mob/living/carbon/human/human = M - if(human.dna.mutantrace == null) + if(human.dna && !human.dna.mutantrace) M << "\red Your flesh rapidly mutates!" human.dna.mutantrace = "slime" - human.update_mutantrace() + human.update_body() + human.update_hair() ..() return @@ -1628,7 +1629,7 @@ datum var/datum/limb/affecting = H.get_organ("head") if(affecting) if(affecting.take_damage(4*toxpwr, 2*toxpwr)) - H.UpdateDamageIcon(0) + H.update_damage_overlays(0) if(prob(meltprob)) //Applies disfigurement H.emote("scream") H.f_style = "Shaved" diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 0828e545fcd..6f55530469d 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -20,9 +20,7 @@ ..() if (!possible_transfer_amounts) src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT - var/datum/reagents/R = new/datum/reagents(volume) - reagents = R - R.my_atom = src + create_reagents(volume) /obj/item/weapon/reagent_containers/attack_self(mob/user as mob) return diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 0b03e21d95c..d197d3ca2eb 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -204,12 +204,10 @@ amount_per_transfer_from_this = 5 New() - var/datum/reagents/R = new/datum/reagents(20) - reagents = R - R.my_atom = src + ..() var/datum/disease/F = new /datum/disease/gbs var/list/data = list("virus"= F) - R.add_reagent("blood", 20, data) + reagents.add_reagent("blood", 20, data) /obj/item/weapon/reagent_containers/glass/bottle/fake_gbs name = "GBS culture bottle" @@ -230,9 +228,7 @@ amount_per_transfer_from_this = 5 New() - var/datum/reagents/R = new/datum/reagents(20) - reagents = R - R.my_atom = src + ..() var/datum/disease/F = new /datum/disease/rhumba_beat var/list/data = list("virus"= F) R.add_reagent("blood", 20, data) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 9a2f683fe64..fa401d32e06 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -51,9 +51,6 @@ return if(ismob(target)) //Blood! - if(istype(target, /mob/living/carbon/slime)) - user << "You are unable to locate any blood." - return if(reagents.has_reagent("blood")) user << "There is already a blood sample in this syringe." return @@ -61,8 +58,8 @@ var/amount = src.reagents.maximum_volume - src.reagents.total_volume var/mob/living/carbon/T = target var/datum/reagent/B = new /datum/reagent/blood - if(!T.dna) - user << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum- report this to an admin.)" + if(!check_dna_integrity(T)) + user << "You are unable to locate any blood." return if(NOCLONE in T.mutations) //target done been et, no more blood in him user << "You are unable to locate any blood." diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index bf0c6d90a6d..26cfcb77b4c 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -17,9 +17,7 @@ return New() - var/datum/reagents/R = new/datum/reagents(1000) - reagents = R - R.my_atom = src + create_reagents(1000) if (!possible_transfer_amounts) src.verbs -= /obj/structure/reagent_dispensers/verb/set_APTFT ..() diff --git a/code/modules/reagents/syringe_gun.dm b/code/modules/reagents/syringe_gun.dm index 915e1899ffc..e64f5132fcc 100644 --- a/code/modules/reagents/syringe_gun.dm +++ b/code/modules/reagents/syringe_gun.dm @@ -117,6 +117,4 @@ density = 0 New() - var/datum/reagents/R = new/datum/reagents(15) - reagents = R - R.my_atom = src \ No newline at end of file + create_reagents(15) \ No newline at end of file diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 3571d3a2244..24b807d4a30 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -191,7 +191,7 @@ var/obj/machinery/blackbox_recorder/blackbox var/list/msg_security = list() var/list/msg_deathsquad = list() var/list/msg_syndicate = list() - var/list/msg_mining = list() + var/list/msg_service = list() var/list/msg_cargo = list() var/list/datum/feedback_variable/feedback = new() @@ -216,7 +216,7 @@ var/obj/machinery/blackbox_recorder/blackbox BR.msg_security = msg_security BR.msg_deathsquad = msg_deathsquad BR.msg_syndicate = msg_syndicate - BR.msg_mining = msg_mining + BR.msg_service = msg_service BR.msg_cargo = msg_cargo BR.feedback = feedback BR.messages = messages @@ -257,7 +257,7 @@ var/obj/machinery/blackbox_recorder/blackbox feedback_add_details("radio_usage","SEC-[msg_security.len]") feedback_add_details("radio_usage","DTH-[msg_deathsquad.len]") feedback_add_details("radio_usage","SYN-[msg_syndicate.len]") - feedback_add_details("radio_usage","MIN-[msg_mining.len]") + feedback_add_details("radio_usage","SRV-[msg_service.len]") feedback_add_details("radio_usage","CAR-[msg_cargo.len]") feedback_add_details("radio_usage","OTH-[messages.len]") feedback_add_details("radio_usage","PDA-[pda_msg_amt]") diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm index f88bbde0e3e..97632823ef8 100644 --- a/code/modules/scripting/Implementations/Telecomms.dm +++ b/code/modules/scripting/Implementations/Telecomms.dm @@ -84,6 +84,7 @@ interpreter.SetVar("$engineering",1357) interpreter.SetVar("$security", 1359) interpreter.SetVar("$supply", 1347) + interpreter.SetVar("$service", 1349) // Signal data diff --git a/code/unused/_debug.dm b/code/unused/_debug.dm index 9183a1f9737..7def5f45c90 100644 --- a/code/unused/_debug.dm +++ b/code/unused/_debug.dm @@ -489,7 +489,7 @@ Doing this because FindTurfs() isn't even used e.update_icon() if(src.type == /mob/living/carbon/human) var/mob/living/carbon/human/H = src - H.UpdateDamageIcon() + H.update_damage_overlays() else alert("Debugging off") return diff --git a/config/game_options.txt b/config/game_options.txt index bb6b3eace9e..0eab68d60c3 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -141,4 +141,11 @@ JOBS_HAVE_MINIMAL_ACCESS ### NON-VOCAL SILICONS ### ## Uncomment to stop the AI, or cyborgs, from having vocal communication. #SILENT_AI -#SILENT_BORG \ No newline at end of file +#SILENT_BORG + +### SANDBOX PANEL AUTOCLOSE ### +## The sandbox panel's item spawning dialog now stays open even after you click an option. +## If you find that your players are abusing the sandbox panel, this option may slow them down +## without preventing people from using it properly. +## Only functions in sandbox game mode. +#SANDBOX_AUTOCLOSE \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index dc4977ad225..9634c07a4cc 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -48,14 +48,15 @@ Stuff which is in development and not yet visible to players or just code relate should be listed in the changelog upon commit tho. Thanks. --> - -
      + +

      28 May 2013

      Petethegoat updated:

      • Updated chemical grenades. The build process is much the same, except they require an igniter-X assembly instead of a single assembly item. You can also just use a cable coil to get regular grenade behaviour.
      -
      +
      +

      11 May 2013

      @@ -65,6 +66,13 @@ should be listed in the changelog upon commit tho. Thanks. -->
    +
    +

    7 May 2013

    +

    Ikarrus updated:

    +
      +
    • As a part of the most recent round of budget cuts, toolboxes will now be made with a cheaper but heavier alloy. HR reminds employees to avoid being struck with toolboxes, as toolbox-related injuries are not covered under the company's standard health plan.
    • +
    +

    5 May 2013

    @@ -74,9 +82,6 @@ should be listed in the changelog upon commit tho. Thanks. -->
- - -

2 May 2013

Malkevin updated:

@@ -87,8 +92,13 @@ should be listed in the changelog upon commit tho. Thanks. -->
- - +
+

30 April 2013

+

Ikarrus updated:

+
    +
  • Researchers have discovered that glass shards are, in fact, dangerous due to their typically sharp nature. Our internal Safety Committee advises that glass shards only be handled while using Nanotrasen-approved hand-protective equipment.
  • +
+

24 April 2013

diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi index 81b4308f1ce..c839eb9e4eb 100644 Binary files a/icons/effects/genetics.dmi and b/icons/effects/genetics.dmi differ diff --git a/icons/mob/corgi_back.dmi b/icons/mob/corgi_back.dmi index 81626df0333..2947ea587cb 100644 Binary files a/icons/mob/corgi_back.dmi and b/icons/mob/corgi_back.dmi differ diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi index 241afa0988c..e8ac14df82c 100644 Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index b20b815a48e..f42d9d406bc 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index 2edfe8382e8..ef7bddb8235 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 734fad6d2d7..e3a0357805c 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 4e4f2b2170c..4afda5ee852 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 1ec2dc1c426..4be81af9fc8 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/maps/MetaStation v27G-II.dmm b/maps/MetaStation v27G-III.dmm similarity index 99% rename from maps/MetaStation v27G-II.dmm rename to maps/MetaStation v27G-III.dmm index 525a4174200..4e785ad9893 100644 --- a/maps/MetaStation v27G-II.dmm +++ b/maps/MetaStation v27G-III.dmm @@ -135,7 +135,7 @@ "acE" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/red,/turf/simulated/floor/carpet,/area/security/hos) "acF" = (/obj/item/weapon/stamp/hos,/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/security/hos) "acG" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/woodentable,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/security/hos) -"acH" = (/obj/structure/table/woodentable,/obj/item/device/radio,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31; pixel_y = -10},/obj/machinery/keycard_auth{pixel_x = 24; pixel_y = 8},/turf/simulated/floor/carpet,/area/security/hos) +"acH" = (/obj/structure/table/woodentable,/obj/item/device/radio/off,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31; pixel_y = -10},/obj/machinery/keycard_auth{pixel_x = 24; pixel_y = 8},/turf/simulated/floor/carpet,/area/security/hos) "acI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/main) "acJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/main) "acK" = (/turf/simulated/wall/r_wall,/area/security/main) @@ -248,7 +248,7 @@ "aeN" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Prison Gate"; name = "Prison Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/brig) "aeO" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Prison Gate"; name = "Prison Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/brig) "aeP" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/closet/secure_closet/warden,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) -"aeQ" = (/obj/structure/table,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio,/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/obj/machinery/camera{c_tag = "Brig Control Room"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) +"aeQ" = (/obj/structure/table,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/turf/simulated/floor,/area/gateway) "aeR" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) "aeS" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) "aeT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) @@ -1124,7 +1124,7 @@ "avF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/engine/engineering) "avG" = (/obj/structure/lattice,/turf/space,/area/engine/engineering) "avH" = (/obj/item/device/multitool,/turf/simulated/floor/plating/airless,/area/engine/engineering) -"avI" = (/obj/item/device/radio,/turf/simulated/floor/plating/airless,/area/engine/engineering) +"avI" = (/obj/item/device/radio/off,/turf/simulated/floor/plating/airless,/area/engine/engineering) "avJ" = (/obj/machinery/camera{c_tag = "Fore Arm Far"; network = list("Singulo")},/turf/simulated/floor/plating/airless,/area/engine/engineering) "avK" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fore) "avL" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/mining/station) @@ -1351,7 +1351,7 @@ "azY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/table,/obj/structure/sign/biohazard{pixel_x = -32},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/gateway) "azZ" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor,/area/gateway) "aAa" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/gateway) -"aAb" = (/obj/structure/table,/obj/item/device/radio{pixel_y = 6},/obj/item/device/radio{pixel_x = 6; pixel_y = 4},/obj/item/device/radio{pixel_x = -6; pixel_y = 4},/obj/item/device/radio,/turf/simulated/floor,/area/gateway) +"aAb" = (/obj/structure/table,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio/off,/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/obj/machinery/camera{c_tag = "Brig Control Room"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/security/warden) "aAc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table,/obj/machinery/recharger,/obj/structure/sign/biohazard{pixel_x = 32},/obj/machinery/camera/autoname{dir = 8; network = list("SS13")},/turf/simulated/floor,/area/gateway) "aAd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/turf/simulated/floor{dir = 1; icon_state = "neutralcorner"},/area/hallway/primary/fore) "aAe" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 20},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 1; freerange = 0; listening = 1; name = "Common Channel"; pixel_x = -25; pixel_y = -4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) @@ -2309,7 +2309,7 @@ "aSu" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/northright{dir = 2; pixel_y = 1},/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/storage) "aSv" = (/obj/structure/closet/secure_closet/security/cargo,/obj/machinery/light_switch{pixel_x = -25; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/checkpoint/supply) "aSw" = (/obj/machinery/power/apc{dir = 1; name = "Cargo Security APC"; pixel_x = 1; pixel_y = 24},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/camera/autoname{dir = 2; network = list("SS13")},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint/supply) -"aSx" = (/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio,/obj/machinery/light{dir = 1},/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint/supply) +"aSx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/janitorialcart,/turf/simulated/floor,/area/janitor) "aSy" = (/obj/structure/filingcabinet,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/checkpoint/supply) "aSz" = (/obj/structure/table,/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech) "aSA" = (/obj/machinery/light/small,/obj/machinery/power/apc{dir = 2; name = "Tech Storage APC"; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/storage/tech) @@ -2496,7 +2496,7 @@ "aVZ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/engine/break_room) "aWa" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/machinery/light/small{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/engine/break_room) "aWb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/security/checkpoint/engineering) -"aWc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/item/weapon/screwdriver{pixel_y = 10},/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "Engineering"; name = "Engineering Lockdown"; pixel_x = -24; pixel_y = -6; req_access_txt = "10"},/obj/item/device/radio,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_switch{pixel_x = -27; pixel_y = 6},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/checkpoint/engineering) +"aWc" = (/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio/off,/obj/machinery/light{dir = 1},/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint/supply) "aWd" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/security/checkpoint/engineering) "aWe" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/obj/machinery/light{dir = 4},/obj/machinery/camera/autoname{dir = 8; network = list("SS13")},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/checkpoint/engineering) "aWf" = (/turf/simulated/floor/plating/airless,/area/engine/break_room) @@ -2954,7 +2954,7 @@ "beP" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/hallway/primary/central) "beQ" = (/obj/machinery/door/window/westleft{dir = 1; name = "Janitoral Delivery"; req_access_txt = "26"},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/central) "beR" = (/obj/machinery/disposal{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/janitor) -"beS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair/janicart,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor,/area/janitor) +"beS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/item/weapon/screwdriver{pixel_y = 10},/obj/machinery/door_control{desc = "A remote control-switch for the engineering security doors."; id = "Engineering"; name = "Engineering Lockdown"; pixel_x = -24; pixel_y = -6; req_access_txt = "10"},/obj/item/device/radio/off,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_switch{pixel_x = -27; pixel_y = 6},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/checkpoint/engineering) "beT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/janitor) "beU" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/obj/machinery/camera/autoname{dir = 8; network = list("SS13")},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/janitor) "beV" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/bridge) @@ -4147,7 +4147,7 @@ "bBM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "bBN" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) "bBO" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/starboard) -"bBP" = (/obj/structure/rack,/obj/item/weapon/wrench,/obj/item/device/radio,/turf/simulated/floor/plating,/area/maintenance/starboard) +"bBP" = (/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio/off,/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/checkpoint/science) "bBQ" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/tcommsat/computer) "bBR" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/tcommsat/computer) "bBS" = (/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/tcommsat/computer) @@ -4196,7 +4196,7 @@ "bCJ" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/light_switch{pixel_x = -28; pixel_y = 0},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/teleporter{name = "\improper Teleporter Room"}) "bCK" = (/obj/structure/rack{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/teleporter{name = "\improper Teleporter Room"}) "bCL" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/teleporter{name = "\improper Teleporter Room"}) -"bCM" = (/obj/item/weapon/hand_labeler,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/structure/table,/obj/item/device/radio,/obj/item/device/assembly/timer,/obj/machinery/power/apc{dir = 4; name = "Teleporter APC"; pixel_x = 24},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/teleporter{name = "\improper Teleporter Room"}) +"bCM" = (/obj/item/device/radio/off,/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/box/lights/mixed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bCN" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/teleporter{name = "\improper Teleporter Room"}) "bCO" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor,/area/hallway/primary/central) "bCP" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Maltese Falcon APC"; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/bar) @@ -4549,7 +4549,7 @@ "bJy" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/ai_monitored/storage/eva) "bJz" = (/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/ai_monitored/storage/eva) "bJA" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 2; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"; tag = "icon-warnwhite (NORTHEAST)"},/area/ai_monitored/storage/eva) -"bJB" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/disk/data,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) +"bJB" = (/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/machinery/light/small{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/autoname{dir = 8; network = list("SS13")},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/ai_monitored/storage/eva) "bJC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor/wood,/area/assembly/showroom{name = "\improper Corporate Showroom"}) "bJD" = (/turf/simulated/floor/wood,/area/assembly/showroom{name = "\improper Corporate Showroom"}) "bJE" = (/obj/structure/table/woodentable,/obj/machinery/cell_charger,/obj/item/weapon/cell/crap,/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) @@ -4626,7 +4626,7 @@ "bKX" = (/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/head/welding,/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/ai_monitored/storage/eva) "bKY" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/device/multitool,/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/ai_monitored/storage/eva) "bKZ" = (/obj/item/weapon/cable_coil{pixel_x = 3; pixel_y = -7},/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/ai_monitored/storage/eva) -"bLa" = (/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/assembly/prox_sensor,/obj/item/device/assembly/prox_sensor,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/obj/machinery/light/small{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/autoname{dir = 8; network = list("SS13")},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/ai_monitored/storage/eva) +"bLa" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/disk/data,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/disk/tech_disk{pixel_x = 3; pixel_y = -1},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) "bLb" = (/obj/machinery/light/small{dir = 8},/obj/structure/table/woodentable,/obj/item/clothing/suit/captunic,/obj/item/clothing/head/helmet/cap,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) "bLc" = (/obj/structure/table/woodentable,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/beach_ball{desc = "The simple beach ball is one of Nanotrasen's most popular products. 'Why do we make beach balls? Because we can! (TM)' - Nanotrasen"; item_state = "beachball"; name = "Beach Ball Exhibit"; pixel_y = 7},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) "bLd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/wood,/area/assembly/showroom{name = "\improper Corporate Showroom"}) @@ -4683,7 +4683,7 @@ "bMc" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HULL BREACH AHEAD'."; name = "\improper HULL BREACH AHEAD"},/turf/simulated/wall/r_wall,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bMd" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/barricade/wooden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bMe" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"bMf" = (/obj/item/device/radio{pixel_y = 6},/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/box/lights/mixed,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"bMf" = (/obj/structure/rack,/obj/item/weapon/wrench,/obj/item/device/radio/off,/turf/simulated/floor/plating,/area/maintenance/starboard) "bMg" = (/obj/machinery/door/window{dir = 1; name = "Mass Driver"; req_access_txt = "22"},/obj/machinery/mass_driver{dir = 2; id = "chapelgun"},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/chapel/main) "bMh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/chapel/main) "bMi" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main) @@ -5598,7 +5598,7 @@ "cdH" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/checkpoint/science) "cdI" = (/obj/machinery/computer/secure_data,/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = -30},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint/science) "cdJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint/science) -"cdK" = (/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio,/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/checkpoint/science) +"cdK" = (/obj/item/weapon/hand_labeler,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/structure/table,/obj/item/device/radio/off,/obj/item/device/assembly/timer,/obj/machinery/power/apc{dir = 4; name = "Teleporter APC"; pixel_x = 24},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/teleporter{name = "\improper Teleporter Room"}) "cdL" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cdM" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "cdN" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/medical/research{name = "Research Division"}) @@ -5978,7 +5978,7 @@ "ckX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "ckY" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "ckZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) -"cla" = (/obj/machinery/door_control{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -5; pixel_y = 5; req_access_txt = "47"},/obj/structure/table/reinforced,/obj/item/device/radio,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) +"cla" = (/obj/machinery/door_control{id = "Biohazard"; name = "Biohazard Shutter Control"; pixel_x = -5; pixel_y = 5; req_access_txt = "47"},/obj/structure/table/reinforced,/obj/item/device/radio/off,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "clb" = (/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/effect/landmark/start{name = "Research Director"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "clc" = (/obj/machinery/computer/robotics,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/hor) "cld" = (/turf/simulated/floor{dir = 10; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTHEAST)"},/area/crew_quarters/hor) @@ -6057,7 +6057,7 @@ "cmy" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Aft Maintenance APC"; pixel_y = -24},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cmz" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cmA" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/item/device/radio/intercom{pixel_x = -25},/obj/machinery/light_switch{pixel_x = 0; pixel_y = -23},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/checkpoint/medical) -"cmB" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint/medical) +"cmB" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio/off,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint/medical) "cmC" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/obj/machinery/newscaster{pixel_x = 0; pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/machinery/camera/autoname{dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint/medical) "cmD" = (/obj/machinery/computer/secure_data,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for monitoring medbay to ensure patient safety."; name = "Medbay Monitor"; network = "Medbay"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/checkpoint/medical) "cmE" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/security/checkpoint/medical) @@ -7008,10 +7008,10 @@ "cEN" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew3,/area) "cEO" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space/transit/east/shuttlespace_ew4,/area) "cEP" = (/turf/space{tag = "icon-black"; icon_state = "black"},/area) -"cEQ" = (/turf/unsimulated/wall{tag = "icon-iron6"; icon_state = "iron6"},/area) -"cER" = (/obj/structure/window/reinforced,/turf/unsimulated/wall{tag = "icon-iron12"; icon_state = "iron12"},/area) -"cES" = (/turf/unsimulated/wall{tag = "icon-iron14"; icon_state = "iron14"},/area) -"cET" = (/turf/unsimulated/wall{tag = "icon-iron10"; icon_state = "iron10"},/area) +"cEQ" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/wall{icon_state = "iron3"},/area) +"cER" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall{icon_state = "iron3"},/area) +"cES" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall{icon_state = "iron3"},/area) +"cET" = (/obj/structure/window/reinforced,/turf/unsimulated/wall{icon_state = "iron12"},/area) "cEU" = (/turf/space/transit/north/shuttlespace_ns8,/area) "cEV" = (/turf/space/transit/north/shuttlespace_ns4,/area) "cEW" = (/turf/space/transit/north/shuttlespace_ns11,/area) @@ -7035,15 +7035,15 @@ "cFo" = (/turf/space/transit/east/shuttlespace_ew11,/area) "cFp" = (/turf/space/transit/east/shuttlespace_ew12,/area) "cFq" = (/turf/space/transit/east/shuttlespace_ew9,/area) -"cFr" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/wall{tag = "icon-iron3"; icon_state = "iron3"},/area) +"cFr" = (/turf/unsimulated/wall{icon_state = "iron10"},/area) "cFs" = (/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Holodeck Projector Floor"},/area/holodeck/source_wildlife) -"cFt" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall{tag = "icon-iron3"; icon_state = "iron3"},/area) +"cFt" = (/turf/unsimulated/wall{icon_state = "iron14"},/area) "cFu" = (/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Holodeck Projector Floor"},/area/holodeck/source_plating) "cFv" = (/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Burn-Mix Floor"; nitrogen = 0; oxygen = 2500; temperature = 370; toxins = 5000},/area/holodeck/source_burntest) "cFw" = (/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_emptycourt) "cFx" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_emptycourt) "cFy" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_emptycourt) -"cFz" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall{tag = "icon-iron3"; icon_state = "iron3"},/area) +"cFz" = (/turf/unsimulated/wall{icon_state = "iron6"},/area) "cFA" = (/obj/effect/landmark{name = "Holocarp Spawn"},/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Holodeck Projector Floor"},/area/holodeck/source_wildlife) "cFB" = (/obj/effect/landmark{name = "Atmospheric Test Start"},/turf/simulated/floor/holofloor{icon_state = "engine"; name = "Burn-Mix Floor"; nitrogen = 0; oxygen = 2500; temperature = 370; toxins = 5000},/area/holodeck/source_burntest) "cFC" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/source_emptycourt) @@ -7093,10 +7093,10 @@ "cGu" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; name = "thrower_leftnostop"},/turf/space/transit/east/shuttlespace_ew4,/area) "cGv" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; name = "thrower_leftnostop"},/turf/space/transit/east/shuttlespace_ew5,/area) "cGw" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; name = "thrower_leftnostop"},/turf/space/transit/east/shuttlespace_ew6,/area) -"cGx" = (/turf/unsimulated/wall{tag = "icon-iron3"; icon_state = "iron3"},/area) -"cGy" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/wall{tag = "icon-iron12"; icon_state = "iron12"},/area) +"cGx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/wall{icon_state = "iron12"},/area) +"cGy" = (/turf/unsimulated/wall{icon_state = "iron11"},/area) "cGz" = (/turf/unsimulated/wall,/area) -"cGA" = (/turf/unsimulated/wall{tag = "icon-iron11"; icon_state = "iron11"},/area) +"cGA" = (/turf/unsimulated/wall{icon_state = "iron3"},/area) "cGB" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdownside"; nostop = 1; stopper = 0; tiles = 0},/turf/space/transit/north/shuttlespace_ns1,/area) "cGC" = (/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_basketball) "cGD" = (/obj/structure/holohoop,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_basketball) @@ -7105,9 +7105,9 @@ "cGG" = (/obj/structure/table/holotable,/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "cGH" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_thunderdomecourt) "cGI" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_thunderdomecourt) -"cGJ" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_boxingcourt) +"cGJ" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_boxingcourt) "cGK" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "red"},/area/holodeck/source_boxingcourt) -"cGL" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/simulated/floor/holofloor{dir = 5; icon_state = "red"},/area/holodeck/source_boxingcourt) +"cGL" = (/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 9; icon_state = "red"},/area/holodeck/source_boxingcourt) "cGM" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdownside"; nostop = 1; stopper = 0; tiles = 0},/turf/space/transit/north/shuttlespace_ns15,/area) "cGN" = (/turf/simulated/floor/holofloor{dir = 8; icon_state = "red"},/area/holodeck/source_basketball) "cGO" = (/turf/simulated/floor/holofloor,/area/holodeck/source_basketball) @@ -7171,13 +7171,13 @@ "cHU" = (/obj/structure/table/holotable,/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_thunderdomecourt) "cHV" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_thunderdomecourt) "cHW" = (/obj/structure/table/holotable,/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_thunderdomecourt) -"cHX" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen"; item_state = "boxinggreen"},/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_boxingcourt) +"cHX" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/source_boxingcourt) "cHY" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_boxingcourt) -"cHZ" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen"; item_state = "boxinggreen"},/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_boxingcourt) -"cIa" = (/turf/unsimulated/wall{tag = "icon-iron5"; icon_state = "iron5"},/area) -"cIb" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall{tag = "icon-iron12"; icon_state = "iron12"},/area) -"cIc" = (/turf/unsimulated/wall{tag = "icon-iron13"; icon_state = "iron13"},/area) -"cId" = (/turf/unsimulated/wall{tag = "icon-iron9"; icon_state = "iron9"},/area) +"cHZ" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/source_boxingcourt) +"cIa" = (/turf/unsimulated/wall{icon_state = "iron13"},/area) +"cIb" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall{icon_state = "iron12"},/area) +"cIc" = (/turf/unsimulated/wall{icon_state = "iron9"},/area) +"cId" = (/turf/unsimulated/wall{icon_state = "iron5"},/area) "cIe" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space/transit/north/shuttlespace_ns7,/area) "cIf" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area) "cIg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area) @@ -7325,7 +7325,7 @@ "cKS" = (/turf/simulated/shuttle/wall{tag = "icon-swall14"; icon_state = "swall14"; dir = 2},/area/centcom/evac) "cKT" = (/turf/simulated/shuttle/wall{tag = "icon-swallc4"; icon_state = "swallc4"; dir = 2},/area/centcom/evac) "cKU" = (/obj/machinery/door/airlock/hatch{name = "Cockpit"; req_access_txt = "109"},/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/centcom/evac) -"cKV" = (/obj/structure/table,/obj/item/device/radio,/turf/simulated/shuttle/floor,/area/centcom/evac) +"cKV" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_boxingcourt) "cKW" = (/obj/structure/stool/bed/chair{dir = 4; name = "Prosecution"},/turf/simulated/shuttle/floor,/area/centcom/evac) "cKX" = (/obj/structure/filingcabinet,/turf/simulated/shuttle/floor,/area/centcom/evac) "cKY" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor,/area/centcom/evac) @@ -7886,7 +7886,7 @@ "cVH" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{tag = "icon-swall_f10"; icon_state = "swall_f10"; dir = 2},/area/derelict/ship) "cVI" = (/obj/machinery/computer/pod{id = "oldship_gun"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) "cVJ" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) -"cVK" = (/obj/structure/table,/obj/item/device/radio,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"cVK" = (/obj/machinery/readybutton,/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_boxingcourt) "cVL" = (/turf/simulated/wall/r_wall,/area/tcommsat/chamber) "cVM" = (/obj/structure/girder,/turf/simulated/floor/plating/airless,/area/tcommsat/chamber) "cVN" = (/turf/simulated/floor/plating/airless,/area/tcommsat/chamber) @@ -7952,7 +7952,7 @@ "cWV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area) "cWW" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area) "cWX" = (/obj/item/weapon/table_parts,/turf/simulated/floor/airless,/area/tcommsat/chamber) -"cWY" = (/obj/structure/table,/obj/item/device/radio,/turf/simulated/floor/airless,/area/tcommsat/chamber) +"cWY" = (/obj/structure/holowindow{dir = 1},/obj/item/weapon/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 6; icon_state = "red"},/area/holodeck/source_boxingcourt) "cWZ" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/airless,/area/tcommsat/chamber) "cXa" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/airless{tag = "icon-dark"; icon_state = "dark"},/area/tcommsat/chamber) "cXb" = (/turf/simulated/floor/airless{tag = "icon-dark"; icon_state = "dark"},/area/tcommsat/chamber) @@ -7978,7 +7978,7 @@ "cXv" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{tag = "icon-dark"; icon_state = "dark"},/area/tcommsat/chamber) "cXw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/tcommsat/chamber) "cXx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/teleporter,/turf/simulated/floor/airless,/area/tcommsat/chamber) -"cXy" = (/obj/item/device/radio,/turf/simulated/floor/airless{tag = "icon-dark"; icon_state = "dark"},/area/tcommsat/chamber) +"cXy" = (/obj/structure/holowindow{dir = 1},/obj/item/weapon/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/source_boxingcourt) "cXz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/tcommsat/chamber) "cXA" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating/airless,/area/tcommsat/chamber) "cXB" = (/obj/effect/decal/cleanable/blood,/obj/structure/stool/bed/chair/e_chair,/obj/item/clothing/under/rank/centcom_officer,/obj/item/weapon/handcuffs,/obj/effect/decal/remains/human,/turf/simulated/floor/plating/airless,/area/tcommsat/chamber) @@ -8403,7 +8403,7 @@ "dfE" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/derelict/arrival) "dfF" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "dark"},/area/derelict/medical/chapel) "dfG" = (/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) -"dfH" = (/obj/item/weapon/disk/data/demo,/turf/simulated/floor/plating/airless,/area) +"dfH" = (/obj/structure/holowindow{dir = 1},/obj/item/weapon/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 10; icon_state = "red"},/area/holodeck/source_boxingcourt) "dfI" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area) "dfJ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/derelict/arrival) "dfK" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/derelict/arrival) @@ -9279,6 +9279,13 @@ "dww" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dwx" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dwy" = (/obj/machinery/conveyor{tag = "icon-conveyor0 (SOUTHWEST)"; icon_state = "conveyor0"; dir = 10; id = "mining_internal"},/obj/machinery/mineral/input,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"; tag = "loading"},/area/mine/production) +"dwz" = (/obj/structure/holowindow,/obj/item/weapon/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/source_boxingcourt) +"dwA" = (/obj/structure/holowindow,/obj/item/weapon/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 9; icon_state = "green"},/area/holodeck/source_boxingcourt) +"dwB" = (/obj/structure/holowindow,/obj/item/weapon/beach_ball/holoball/dodgeball,/turf/simulated/floor/holofloor{dir = 5; icon_state = "green"},/area/holodeck/source_boxingcourt) +"dwC" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/shuttle/floor,/area/centcom/evac) +"dwD" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship) +"dwE" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/floor/airless,/area/tcommsat/chamber) +"dwF" = (/obj/item/device/radio/off,/turf/simulated/floor/airless{tag = "icon-dark"; icon_state = "dark"},/area/tcommsat/chamber) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9347,7 +9354,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaadacNacNacNacNacNaadacOaadacNacNacNacNacNaadaakaakaadaaaaadaaaaaaaaaaadaaaaaaaaiacPacQacRacSacTacUacVacWacXacYacZadaadbadcaddadeabvadfadgadhadhadiacCacCadjabvadkadladmacoadnabwadoadpadqadradsadtaduaduadvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaadadwaaaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaadadxadyadyadyadyadzadAadBadCadCadCadCadDaadaakaadaaaaaaaadaaaaaaaaaaadaaaaaaadEadFadGaaCaaCadHadIadJadKadLadMadNadOadOadPadQadRabvadfadfadSadTadUadVadWadXabvadYadZaeaaebaecabwaedaeeaefaegadsaehaeiaejaekaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaakaakaakaakaakaaaaelaaaabaaakaakaakabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaadaemaemaemaemaemaadadAaadaemaemaemaemaemaadaakaadaadaaaaadaaaaaaaadaadaadaadaaiaenaeoaaiaepaeqaboaeraesaetaboaeuaeuaeuaboaevaewabvaexaexaeyaezaeAaeBabvaeCabvaeDabwaeEabwaeFabwaeGaeeaeHadraeIaeJaduaduaeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEaaaaaaaadaadaadaaaaaaaelaadaadaaaaadaadaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaabaaaaaaaaaaaadaaaaaaaadadAaaaaaaaaaaadaaaaaaaaaaaEaadaadaadaadaadaadaadaadaaaaadaaiaaiaeLaaiaaiaaiaaiaaiaeMaeMaeMaeMaeMaeMaeMaeNaeOabvaePaeQaeRaeSaeTaeUabvaeVaeWaeXaeYaeZafaafbafcafdafeadrabWabWabWacLaffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaadafgafgafgafgafgaadafhaadafgafgafgafgafgaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaabaaaaaaaaaaaadaaaaaaaadadAaaaaaaaaaaadaaaaaaaaaaaEaadaadaadaadaadaadaadaadaaaaadaaiaaiaeLaaiaaiaaiaaiaaiaeMaeMaeMaeMaeMaeMaeMaeNaeOabvaePaAbaeRaeSaeTaeUabvaeVaeWaeXaeYaeZafaafbafcafdafeadrabWabWabWacLaffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaadafgafgafgafgafgaadafhaadafgafgafgafgafgaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaakaadacNacNacNacNacNaadafiaadacNacNacNacNacNaadaakaaaaaaaadaaaaaaaacaaaaaaaaaaaaaadaaaaaaaadaadaadaadafjafkafkafkaflafmafkaeMafnafoafpafqafrafqafsaftafuafvafwafxafyafzafAafBafCafDafEafFafGafHafIabWabWabWabWaadaakaadaadaakaakaaEaadaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaadafJafKafKafKafKafLafMafNafOafOafOafOafPaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaakaadadxadyadyadyadyadzadAadBadCadCadCadCadDaadaakaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaadabWafQafRafSafTafUafVafkaeMafnafWafXafYafZagaagaafZagbagcagdageagfaggaggaggaghagiagjagkadradragladsadsagmagnaadaaaaaaaaaaaaaaaaadaaaaaaaakaadaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaakaadagoagoagoagoagoaadafMaadagoagoagoagoagoaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaakaadaemaemaemaemaemaadadAaadaemaemaemaemaemaadaakaaaaaaaadaaaaaaaaeaadaadaadaadaadaadabWabWagpabWabWagqagragsagtaguagvafkaeMafnagwagxagyagzagAagBafqagCabvagDagEagFagGagHagIagJagKagLagMagNagOagPagOagQagRagSaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaadaaaaaaaadagTaaaaaaaaaaadaaaaaaaaaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9375,7 +9382,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaabWamJahsavKapxaadaaaavLavMavNavOavLavPavQavRabWadradradravSadradradradradravTadradrasZadraaaavUavVavWavXavYavZavUaaaatUauYawaawbawcauYatUatVatWawdatXatXaweawfawgawhawiawjawkawlatXawmavfawnawoawpawqawrawsaoaaoaaoaaoaawtawuawpanyaqLawvaqLaqLawwawxawyamOawzawAamOawzawAamOamOawzawAamOanyawzawAanyawBamfawCanyawDawEavAatJarNasPasPasPasPasPasPawFawGawHawIawJawKawLawMawNawOasPawPaadaadaaaaaaaaaaadaadaaaaaaaadaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaabWagRahsadsabWaadaaaauKawQawRawQauKawSawTawUawVawWawXawYawZawVawVaxaaxbaxcaxdaxeadrasZadraadavUaxfaxgaxhaxiaxjavUaadatUauYaxkaxlaxmauYatUaxnaxoaxpatXatXaxqaxraxsaxtaxuaxvaxwaxxavdaxyavfawnawoaoaaoaaoaaoaaoaaxzaxAaxBaxCaxDaxEanyaxFaxGanyavvaxHaxIaxJaxKaxLaxManyaxNaxLaxOanyaxNaxLaxPanyaxQaxRanyanyaxSanyanyaxTaxUaxVaxWarNaxXaxYaxZayaaybauHaycaycaydayeayfayeaygayhayiayjaykaaaaaaaadaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaaEaaaaaaaaaaaaaaaabWabWarXahsabWabWaaaaaaavLawQawQawQaylaymaynaynayoaypayqayraysaytayuayvaywayxayyayzadrasZadraaaavUayAayBayCaxiayDavUaaaatUayEayFayGayFayHatUayIatWatXatXatXayJayKayLayLayLayMayNatXawlatXayOatZayPayQayRaySayRayRayRayTapeayUayVayWayXayYayZanyazaazbazcaxJazdazeazfanyazdazeazganyazdazeazhanyaziamfazjazkazlazmaznazoazparNarNarNazqazrazsaztazuazvazwazxazyazzazAazzazBazCayiayjazDaaaaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEazEazFazFaakaaaaaaaaaaaaabWabWamJamJahsapxaaaaaaaaaauKawRawRawRauKazGazHazIazJaypaynazKazLazMawVazNazOazPazQazRadrasZadraadazSazTazUazVazWazXavUaadatUazYazZaAaaAbaAcatUaAdatWatXatXaAeaAfaAgayLaAhayLaAiaAjaAkawlatXaAlawnaAmaAnaAoaApaAoaAqaAoaAraAraAsaAtaAraAuaAvaAwanyanyaAxaxJaxJanyaAyaxJanyanyaAzaxJanyanyaAAaxJanyamfaABaACaADameamfaAEaAFaAGaAHarNarNaAIaAJaAKawMaALazDaAMaANaAOaAPaAQaARaASaATayiayjaAUaAVaadaAWaaaaaaaaaaaaaAWaaaaaaaAWaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEazEazFazFaakaaaaaaaaaaaaabWabWamJamJahsapxaaaaaaaaaauKawRawRawRauKazGazHazIazJaypaynazKazLazMawVazNazOazPazQazRadrasZadraadazSazTazUazVazWazXavUaadatUazYazZaAaaeQaAcatUaAdatWatXatXaAeaAfaAgayLaAhayLaAiaAjaAkawlatXaAlawnaAmaAnaAoaApaAoaAqaAoaAraAraAsaAtaAraAuaAvaAwanyanyaAxaxJaxJanyaAyaxJanyanyaAzaxJanyanyaAAaxJanyamfaABaACaADameamfaAEaAFaAGaAHarNarNaAIaAJaAKawMaALazDaAMaANaAOaAPaAQaARaASaATayiayjaAUaAVaadaAWaaaaaaaaaaaaaAWaaaaaaaAWaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaAXaAYaAZaAYaakaaaaadaaaaaaabWarmajwaklahsabWabWaadaaaavLaBaaBbaBcavLaBdavQavRaBeaBfaynaBgazLaBhawVaBiaBjaBkaBlaBmadrasZadraaaaBnavUaBoaBpaBoavUavUaaaatUaBqaBraBsaBtaBuaBvatfatWatXatXatXaBwaBxaByaBzaBAaBxaBBatXawlatXaBCawnawoaoaaoaaBDaBEaoaaBFaBGaBGaBGaBGaBHanyaBIaBJaBKaBLaBMaBNaBNaBLaBOaBNaBPaBLaBOaBNaBQaBLaBOaBNaBRaBRaBSaBTaBUaBUaBVaBWaBXaAGaBYarNarNaBZaAJaAKawMaCaaCbaCcaCdaAOaCeasPasPaCfasPasPaCgaChaCiaadaaaaaaaaaaaaaaaaCjaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaAXaAYaCkaAYaadaadaadaadaadabWadsadsadsasTaClabWaaaaaaaCmauJaCnauJaCoaaaaadaadaCpaCqaCraCsaCtaCuawVaCvaCwaCxaCyaCzadrasZadraaaaCAaCBaCCaCDaCCaCBaCEaaaatUaCFaCGaCHaCIaCJaCKaCLaxoaCMatXatXaCNaCOaCPaCQaCRaCSaCTatXawlaCUavfawnawoaCVaCWaCWaCWaCWaCXaCYaCWaCZaCZaCZanyaDaaDbaDcaDdaDeaDcaDfaDgaDhaDcaDeaDiaDhaDfaDcaDcaDhaDjaDkaDlaDmaDnaDoaDpaDqaDraDsaDtaDuarNarNaDvaDwaDxaDyaDzasPaDAaDBaAOaDCasPaDDaDEaDFaDGaycaDHazDaadaaaaaaaadaadaadaadaadaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaAXaAYaAZaAYaAYaDIaDJaDJaDKabWadradradradsahsabWaadaaaaaaaaaaaaaaaaaaaaaaadaadaDLaDMaDNaDOaDPawVawVaDQaDRaDSaywaywadrasZadraDTaDUaDVaDWaDXaDYaDVaDZavUatUaEaaEbaAaaEcaEdatUayIatWaEeaEfaEgaEhaEiaweaEjaweaEkaElavcaEmaEnavfawnawoaCVaCWaEoaEpaEqaEraEsaEtaCZaEuaEvaCZanyanyanyaEwaExaCZaEyaEzaEzaEzaEAaEzaEzaEBaECaECaEDaEDaEEaEFaEGaEHaEDaEDaEDaEIasPasPasPasPasPasPaEJaEKaELasPasPaEMaDBaAOaENaEOaEPaEQaAKaERaESawMazDaadaAWaadaadaaeaaeaaeaadaETaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9389,15 +9396,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaOaaMIaObaMIaOaaMLaJiaEUaCkaCkaCkaCkaCkaCkaCkaEUaOcadrahsamJabWaadaFaaFaaFaaFaaFaaFaaFaaOdaOeaOdaOfaJnaKvaOgaOhaOiaOjaJuaOkaOlaKAaOmaOnaOoaOpadratQaMWaadaMXaOqaOraOsaOtaOuaOtaOvaOtaOtaOwaOxaOyaNnaOzaNpaOAaOBaLUaOCaODaNmaOEaNnaOFaNnavfawnawoaCWaOGaOHaOIaOIaOJaOKaOLaOMaNuaJRaONaOOaKRaOPaIFaJVaOQaCZaEzaEzaORaOSaEzaOTaECaOUaECaEDaOVaOWaOXaOYaOZaPaaEDaEDatJarNaPbaPcaPdaPeaPfaPgasPasPasPaPhaPiaPjaPkaPlasPaPmaPnawMawNaPoasPaPpaadaadaaaaaaaaaaaaaadaaaaaaaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMLaPqaPraPsaMLaMLaCkaEUaEUaEUaEUaCkaCkaCkaCkaEUaEUadrasTagQapxaadaFaaFaaFaaFaaFaaFaaFaaPtaHWaPuaPvaJnaKvaPwaPxaPyaPzaJuaPAaPBaKAaPCaPDaPEaPFadraPGaMWaaaaMXaPHaPIaPJaPKaPLaPMaPNaPOaPPaJzaPQavaaPRaPSaPTaPUaPVaPWaPXaPYaPZaQaaPTaOFaNnaQbawnaQcaCWaQdaQeaQfaQfaQgaNsaQhaCZaQiaQjaQkaQlaQmaQnaIFaJVaQoaQpaFMaQqaIKaNBaEzaECaECaECaECaEDaEDaQraEDaEDaEDaEDaEDaQsatJarNaNLaQtaQuaQvaQwaQxaQyaQzaQAaQBaQCaQDaQEaQFasPaQGaQHavEasPasPasPavGaadauBaQIauBauBauBauBauBauBauBauBaQJaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaMLaQKaQLaQMaQNaQOaEUaEUaQPaEXaEXaEUaEUaEUaQQaQRaEUadrasRahsabWaadaFaaFaaFaaFaaFaaFaaFaaaaaaaaQSaPvaQTaKvaKvaKwaKvaIeaJuaPAaQUaQVaQVaQVaQVaQVadraQWaQXaadaQYaLEaQZaRaaRbaPLaLIaRcaRdaReaRfaGJaGTaRgaOFaRhaRiaRjaRkaRlaRmaRnaRoaRhaOFaNnavfawnawoaCWaRpaRqaRraRsaIxaNsaRtaCZaRuaRvaRwaRxaJSaJRaRyaRzaRAaCZaRBaRCaRDaREaRFaRGaRHasMasMasMasMaRIasMasMaRJasMasMasMaRKaRLaNLaRMaRNaROaRPaRQaRRaRSaRTaRUaRVaRWaRXaRYasPaRZaSaaSbauyauzauyaScauBaSdaSeatLatMaSfatMatOaSeaSdatPauHaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaSgaMLaMLaShaSiaQNaQNaQNaSjaQNaSkaSlaSlaSmaQNaQNaSnaQNaQNaQNaSoaMLaadaFaaFaaFaaFaaFaaFaaFaaaaaadaQSaPvaJnaKvaSpaSqaSraSsaJuaStaSuaQVaSvaSwaSxaSyadraQWaKBaaaaaaaadaaaaJzaSzaSAaSBaJzaJzaJzaJzaJAatWaSCaNgaNgaNgaNgaSDaSEaSFaNgaNgaNgaNgaRgaSGaSHaSIaCWaIwaCWaIwaCWaSJaSKaSLaCZaRuaSMaRwaSNaSOaSPaCZaCZaCZaCZaEzaEzaEzaEzaEzaQsaSQaQsaSRaSSaSTaQsaQsaSUaSVaSWaSXavAaSYaSZaNLaTaaTbaTcaTdaTeasPaTfaTgaThaPiaTiaTjaTkaTlaTlaTlaTlaTmasPasPaTnatMaToatMauGasPasPasPaTnatMauGatPasPaadaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaSgaMLaMLaShaSiaQNaQNaQNaSjaQNaSkaSlaSlaSmaQNaQNaSnaQNaQNaQNaSoaMLaadaFaaFaaFaaFaaFaaFaaFaaaaaadaQSaPvaJnaKvaSpaSqaSraSsaJuaStaSuaQVaSvaSwaWcaSyadraQWaKBaaaaaaaadaaaaJzaSzaSAaSBaJzaJzaJzaJzaJAatWaSCaNgaNgaNgaNgaSDaSEaSFaNgaNgaNgaNgaRgaSGaSHaSIaCWaIwaCWaIwaCWaSJaSKaSLaCZaRuaSMaRwaSNaSOaSPaCZaCZaCZaCZaEzaEzaEzaEzaEzaQsaSQaQsaSRaSSaSTaQsaQsaSUaSVaSWaSXavAaSYaSZaNLaTaaTbaTcaTdaTeasPaTfaTgaThaPiaTiaTjaTkaTlaTlaTlaTlaTmasPasPaTnatMaToatMauGasPasPasPaTnatMauGatPasPaadaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaTpaTqaTraTsaTsaTsaTsaTtaTsaTsaTsaTsaTuaTsaTvaTwaTxaTyaTzaMLaadaaaaFaaFaaFaaFaaFaaaaaaaaadaQSaPvaJnaKvaKvaKwaKvaIeaTAaTBaTCaTDaTEaTFaTGaTHadraQWaKBaKBaKBaKBaKBaKBaKBaKBaKBaJzaTIaTIaJzaTJaTKaTLaTMaTNaTOaTLaTPaTQaTPaTLaTRaTSaTTaTUaTVaTWaTXaTYaTYaTZaUaaCWaUbaUcaIwaCZaCZaCZaCZaUdaNtaUeaCZaTMaUfaUgaUhaUiaUiaUiaUjaUkaUlaUmaUnaUoaUpaUqaUraUsaUtaUuaUvavAaSYaUwaNLaUxaUyaUzaUAaUBasPaUCaUDaUDaUEaUFaUGaUHaTlaUIaUJaUKaTmasPasPasPasPasPasPasPasPasPasPasPasPasPasPasQaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaULaUMaUMaUNaUMaUMaUMaUMaUOaQOaQOaUPaUMaUMaUMaUOaQOaUQaURaMLaadaadaadaaaaaaaaaaaaaaaaadaadaUSaPvaJnaJoaJpaUTaLtaUUaUVaUWaUXaUYaUZaVaaVbaVcadraVdaVeaVfaVfaVgaVfaVfaVfaVfaVhaViaVjaVkaVlaVmaVnaVoaVpaVkaVkaVqaVraVsaVraVtaVkaVuaVvaVwaVxaVyaVzaVAaVBaVCaVDaVEaVDaVFaVDaVGaVDaVHaVDaVIaVJaVKaVkaVkaVDaVLaVMaVMaVMaVMaVNaVMaVMavAavAavAavAaVOavAaVPaVQaVRaVSavAaVTavAaNLaVUaVVaVWaVXaVVasPasPasPasPasPaVYaVZaWaaWbaWcaWdaWeaTmaWfaWfaaeaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaULaUMaUMaUNaUMaUMaUMaUMaUOaQOaQOaUPaUMaUMaUMaUOaQOaUQaURaMLaadaadaadaaaaaaaaaaaaaaaaadaadaUSaPvaJnaJoaJpaUTaLtaUUaUVaUWaUXaUYaUZaVaaVbaVcadraVdaVeaVfaVfaVgaVfaVfaVfaVfaVhaViaVjaVkaVlaVmaVnaVoaVpaVkaVkaVqaVraVsaVraVtaVkaVuaVvaVwaVxaVyaVzaVAaVBaVCaVDaVEaVDaVFaVDaVGaVDaVHaVDaVIaVJaVKaVkaVkaVDaVLaVMaVMaVMaVMaVNaVMaVMavAavAavAavAaVOavAaVPaVQaVRaVSavAaVTavAaNLaVUaVVaVWaVXaVVasPasPasPasPasPaVYaVZaWaaWbbeSaWdaWeaTmaWfaWfaaeaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSgaAXaMLaWgaMLaMLaMLaTpaWhaTpaWiaQOaQOaWjaTpaWhaTpaWkaWlaWmaWnaWoaWoaWoaWoaWpaWqaWqaWqaWqaWraWoaWoaWsaJnaKvaKvaWtaKvaIeaWuaWvaWwaQVaWxaWyaQVaWzadraWAaKBaKBaKBaWBaKBaKBaKBaKBaKBaWCaWDaWEaWEaWFaWGaWHaWIaWEaWEaWJaWKaWLaWKaWKaWKaWMaWNaWOaWPaWQaWRaWSaWTaWKaWKaWKaWKaWUaWKaWKaWKaWVaWKaWWaWKaWXaWKaWKaWYaWZaVMaXaaXbaXcaXdaXeaVMaXfaXgavAaXhaXiavAavAavAavAavAavAaSYaXjaXkaXlaXmaXnaXoaXpaXqaXraXsaXtaXuaXvaXwaXxaXyaXzaXAaXBaTmaXCaTmaadaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaaaqXaXDaMLaXEaQLaXFaXGaXHaUMaXIaXFaQLaXJaXKaMLaXLaXMaXNaXOaXOaXOaXOaXOaXOaXOaXPaXQaXRaKBaXSaXTaXTaXTaXUaXVaPAaXWaXXaXYaXZaYaaYbaYcaYdaYeaYfaYgaYhaYiaYjaYkaYlaYmaYnaYhaYoaYpaYqaYraYraYsaYtaYuaYvaYraYwaYxaYsaYraYraYraYraYraYsaYsaYyaYzaYzaYzaYzaYzaYzaYzaYzaYzaYAaYBaYCaYzaYDaYAaYEaYFaYBaYGaYHaYIaYJaYKaYJaYJaYLaVMaXfaYMaYNaYOaXiavAaYPaYQaYRavAaYSaYTaYUaYVaXlaXvaYWaYXaYYaYZaXvaXvaXvaXvaXvaZaaZbaZcaZdaZeaZfaTmaZgaTmaadaadaadaadaaaaaaaaaaadaaaaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaadaaaaaaaaaaaaaaaaULaWhaZhaSlaSlaSlaSlaZiaWhaULaaaaMLaZjaZkaZlaZlaZlaZlaZlaZlaZlaZlaZmaZnaZoaKBaZpaZqaZraZsaZpaZpaZtaZpaZuaZvaZwaZxaZyaZzaZAaZBaYfaZCaZDaZEaZFaZGaZFaZHaZIaZJaWCaYpaZKaZLaZLaZLaZLaZMaZNaZNaZOaZNaZPaZQaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZRaZSaZTaZTaZUaZTaZTaZTaZTaZTaZTaZVaYpaZWaZXaZYaZZbaaaYJbabaVMaXfaXiavAbacbadavAbaeaQsaUnavAaQsbafbagbahbaibajbakbalbambanbaobapbaqbarbarbasaZbbatbaubavbawaTmaXCaTmaTmbaxbayaadaadaadaadaadaadaadbazaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAbaBbaCbaBbaDbaBbaBbaDbaBbaCbaEbaFaMLaZjbaGbaHbaIbaJbaKbaLbaMbaNaZlaZmbaObaPbaQbaRbaSbaTbaTbaUbaTbaVbaWbaXbaYbaZbbabbbbbcbbdbbebbfbbgbbhbbibbjaZFbbkbblbbmbbnaWCaYpbboaZLbbpbbqaZLbbrbbsbbtbbubbvaZPbbwbbwbbwbbwbbwbbwbbwbbwbbwbbwbbwbbwbbwbbwbbwbbwaZTbbxbbybbzbbAbbBbbCbbDaZTbbEbbFbbGaVMbbHaYJbbIbbJbbKaVMavAbbLavAavAavAavAbbMaQsbbNavAbbObbPaYUaYUaYUbbQbbRbbSbbTbbUbbVaYZbbWbbXbbYbbZbcabcbbbYbccbcdaTmbcebcfbcgbchbchbciaadaaaaaaaaaaadaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaAbaEbaBbcjbckbckbclbcmbcnbcobcpbckbckbcqbcraTpaZjbcsbctbcubcvbcwbcxbcybczbcAbcBbcCbcDbcEbcFbcGbcHbcIbaWbaWbaWbaWbcJbcKbcLaYfbcMbcNbcOaZxbcPaZxbcQaZGbcRaZFaZFbcSbcTaYhbcUbbFbcVaZLbcWbcXaZLbcYbcZbdabdbbdcbddbbwbdebdfbdfbdgaZPbdhbdibdjaZPbdhbdkbdkbdlbbwbbwaZTbdmbdnbdobdpbdqbdrbdsaZTbdtaYpbduaVMaVMbdvbdwbdxaVMaVMbdybdzbdAbdBbdCavAavAbdDavAavAbdEbdFbdGaYUaYUbdHbdIbdJbdKbdLaTmbdMbdNbdObdPbdQbdRbdSbdTbdUbdVbdWbcebdXbdYbdZbeabebaadaaaaaaaaaaadaaaaaaaaaaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcqbecbedbeebckbefbckbefbckbefbckbefbckbegbehaXFaZjbeiaZlbejbekbelbembenbeoaZlbepbeqberbesbetbeubevbewbexbeybezbaWbeAbeBbeCbeDbeEbeFbeGbeGbeHaZCaZJbeIaZGbeJbeKbeLbeMaZJaWCaYpaZKbeNbeObePaZLbeQbeRbeSbeTbeUaZPbbwbeVbeWbeXbeYbeZbfabfbbfcbfdbfebffbfgbfhbbwbbwaZTbfibfjbfkbflbdqbbCbfmaZTaZVbfnaZWbfobfpbfqbfrbfsbfrbfrbftbfrbfrbfrbfrbfubfrbfrbfrbfvbfwbfxbfybfzbfxbfAbfAbfBbfCbfDbfEaTmaTmbfFaTmaTmbfGbfHbfIbfJbfKbfLbfMbfMbfNbchbchbfOaadaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcqbecbedbeebckbefbckbefbckbefbckbefbckbegbehaXFaZjbeiaZlbejbekbelbembenbeoaZlbepbeqberbesbetbeubevbewbexbeybezbaWbeAbeBbeCbeDbeEbeFbeGbeGbeHaZCaZJbeIaZGbeJbeKbeLbeMaZJaWCaYpaZKbeNbeObePaZLbeQbeRaSxbeTbeUaZPbbwbeVbeWbeXbeYbeZbfabfbbfcbfdbfebffbfgbfhbbwbbwaZTbfibfjbfkbflbdqbbCbfmaZTaZVbfnaZWbfobfpbfqbfrbfsbfrbfrbftbfrbfrbfrbfrbfubfrbfrbfrbfvbfwbfxbfybfzbfxbfAbfAbfBbfCbfDbfEaTmaTmbfFaTmaTmbfGbfHbfIbfJbfKbfLbfMbfMbfNbchbchbfOaadaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfPbckbckbaCbckbefbckbefbfQbefbckbefbckbegbehaXFaZjbfRaZlbfSbfTbfUbfVbfUbaHbaHbfWbfXbfYaKBbfZbgabgbaZxbgcbgdbgebaWbgfbgcbggbghbgibgjbgkbgkbglaZCbbnbgmaZGaZGbgnbeLbgobbnaWCaYpbgpaZLaZLaZLaZLbgqaZNaZNaZNaZNaZPaZPaZPbgrbgsbgtbgubgvbgtbgsbgubgwbgvbgxaZPbgyaZPaZTaZTaZTaZTbgzbgAbgBbgCaZTbgDbgEbgFbgGbgHbgIbgJbgKbgJbgJbgLbgMbgMbgNbgMbgMbgMbgMbgMbgMbgObgPbgQbgRbgSbgMbgTbgUbgVbgWbgXbgYbgZbhabhbbgXaTmbhcbhdbhebhfbhgbhhbhhbhibaxbhjaadaadaadaadaaaaadaaaaaaaaaaadaadaadaadaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcqbhkbedbeebckbefbckbefbckbefbckbefbckbegbehaXFbhlbhmbhnbhobhpbhqbhqbhrbhsbhtbhubhvbhwbaWbhxbhybhzbhAbhBbgkbhCbhDbhEbhFbhGbhHbhIbaWaYcbhJbhKbgjaYhbhLaZGbhMbhNbhObhPaYhaWCaYpaZKbhQbhRbhRbhRbhRbhSbhSbhSbhTbhUbhVbhWbhXbgubhYbgubgubhZbgubgubgubgubiabibbicaZPaZTbidbiebifbigbihbiibijaZTbikbilbimbinbiobipbiqbirbiqbipbisbitbipbirbipbipbipbiubivbiwbixbiybiwbizbiybiAbiBbiCbiDbiEbgXbiFbiGbiHbiIbiJbgXbgXbiKbiLbiMbiNbiObiPbiQbiRbiSbgXbgXbgXaadaaaaadaaaaaaaaaaadaaaaaaaaaaaEaaaaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiTbiUbaBbcjbckbckbiVbckbiWbiXbckbiYbckbcqbiZaULaZjbjabjbbjcbjdbjebjfbjgbjhbjibjjbjkbjlbaWbjmaYcbjnaYcbaWbjobaWbaWbjpbjqbaWbjrbaWbaWbjsbjtbjubjvaYhbjwbjxbjybjzbjAbjBaYhaWCaYpbjCaTLaTLaTLaTLaTLbjDbjDbjDbjDaZPbjEbjFbjGbgubjHbjIbjJbjKbjIbjIbjLbjMbjNbjObjPaZPaZTaZTaZTaZTbjQaZTaZTaZTaZTaZVaYpbjRbjSbjSbjTbjUbjVbjWbjSbjXbjSbjSbjYbjSbjZbkabjSbjYbjSbkbbkcbkbbkdbkebkfbkgbkhbkibkjbkkbklbkmbknbkobkpbkqbkrbksbktbkubkvbkwbkxbkybkzbkAbkBbkCbgXaadaadaadaadaadaadaadaaaaaEaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9411,15 +9418,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfaadbwgbwhaZjbwibuQbwjbwkbwlbwmbwnbwobwpbuQbwqbwrbwsbwtbwubwvaKBbwwbwxbwybwzbwAbrPbrQbwzbwAbwBbpYbrTbqabwCbwCbwCbrYbtEbwDbwDbwDbwEbwFbwGbwHbsebqgaYpaZKbwIbtIbwJbwKbwLbwMbwNbwObtIblebwPbwQaZPaZPaZPbwRbwSbwSbwSbwTaZPaZPaZPbwUbwPaZTaZTbtYaZTaZTaZTaZUaZTbwVbqEbwWbwXbwYbwZbxabxbbxbbxbbxcbxbbxdbxebxebxebxebxebxebxebxebxfbxgavAaUoaUoaQsbxharNbvJbxibxjbxkbxlbxmbxnbxobxpbxqbxrbxsbxtbxubxvbxwbxxbxyblXbvZbxzbxAbxBbrobrpbxCbuJbuJbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbxDbxEbxFaZjbxGbuQbxHbxIbxHbxJbxKbxHbxLbuQbxMbxNbxObxPbxQbxRaKBbxSaKBbxTbxUbxVbrPbrQbxUbxVbxTbpYbrTbqabxWbxXbxXbxYbtEbrVbrVbrVbxZbyabrVbybbqabycaYpaZKbtIbtIbydbyebyfbygbyhbyibtIbyjbykbylbymbynbyobypbypbypbyqbypbymbyrbysbytbyubyvbyobyobyobywbyxbyybyzbyAbyBbyCbyDbnsbyEbyFbulbyGbulbyHbulbyIbulbyJbyKbyLbyLbyLbyLbyLbyKbyMavAbyNbyOaQsbxharNbxpbxpbyPbxpbxpbxpbyQbxpbxpbxqbyRbySbiJbiJbiJbyTblXbvXblXbvZbyUbwbbpHbmnbmobmobmobmobmoaadaaaaaEaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfaWhaQLaWhaZjbyVbuQbyWbxHbxHbyXbyYbyYbyZbzabzbbzcbzdaKBbzebzfaKBbzgbzhbxTbzibwAbrPbrQbwzbwAbxTbpYbrTbqabzjbwCbwEbzkbzlbzmbznbzobzpbrVbrVbzqbqabzrbzsbztbzubzvbzwbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzIbzJbzKbzIbzLbzMbzNbzObzPbzQbzRbzPbzSbzTbzUbzEbzPbzVbzWbzXbzYbqGbzZbyFbAabAbbAcbyHbAabAdbAcbAebAfbAgbAhbAibAfbAjbAfbAkavAaQsaQsaQsbxhaQsbxpbAlbAmbAnbxpbAobApbAqbxpbArbAsbAtbAubiJbAvbxyblXbxwbAwbAxbAybAzbuHboabobbAAbABbACbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbADbAEbxFbAFbAGbAHbAIbAJbxHbAKbxHbxHbALbuQbAMbrTbrTaKBbANaKBaKBaKBaKBbAObAPbxVbrPbrQbxUbxVbAQbpYbrTbqabARbrVbrVbASbtEbrVbrVbrVbATbAUbrVbAVbqabAWaYpbAXbAYbAZbAZbBabBbbBcbBdbBebBfbBgbBhbBibBjbBibBkbBlbBmbBnbBobBlbBpbBibBjbBibBqbBrbBsbBqbBqbBtbBubBvbBqbBwbBqbBxbBybBzbBAbBBbBCbBDbBCbBEbyKbBFbyKbBGbBHbBIbBJbBKbvBbBLbBMbBNavAbBObBPaQsbxhaQsbxpbBQbBRbBSbBTbBUbBVbBWbxpbArbAsbAtbAubBXbAvbBYblXbxwbAwbvZbBZbwbbpHbmnbpIbCabCbbCcbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfaadaULbwhaZjbyVbuQbCdbCebCfbCgbChbxHbCibuQbAMbCjbrTbrTbCkaKBbClbCmbCnbCobCpbCqbCrbCsbCqbxTbxTbpYbrTbqabwCbwCbwCbASbtEbCtbCtbCtbqabqabCubqabqabCvbCwbCxbCybCybCybCzbCAbCzbCybCBbCybCybCybCybCCbCDbCEbBlbBlbCFbBlbBlbCGbCHbCIbBibCJbCKbCLbCMbBqbBqbBqbBqbBqbCNbBqbBxbCOblIbsIbCPbCQbCRbAebulbCSbyFbulbCTbCUbulbCVbulbCWbsIbsIbCXavAavAavAavAbxhaQsbxpbCYbCZbDabDbbDcbDdbDebxpbgXbDfbDgbAubiJbAvbDhblXbDibAwbvZbDjbxAbxBbrobrpbDkbABbABbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbADbAEbxFbAFbAGbAHbAIbAJbxHbAKbxHbxHbALbuQbAMbrTbrTaKBbANaKBaKBaKBaKBbAObAPbxVbrPbrQbxUbxVbAQbpYbrTbqabARbrVbrVbASbtEbrVbrVbrVbATbAUbrVbAVbqabAWaYpbAXbAYbAZbAZbBabBbbBcbBdbBebBfbBgbBhbBibBjbBibBkbBlbBmbBnbBobBlbBpbBibBjbBibBqbBrbBsbBqbBqbBtbBubBvbBqbBwbBqbBxbBybBzbBAbBBbBCbBDbBCbBEbyKbBFbyKbBGbBHbBIbBJbBKbvBbBLbBMbBNavAbBObMfaQsbxhaQsbxpbBQbBRbBSbBTbBUbBVbBWbxpbArbAsbAtbAubBXbAvbBYblXbxwbAwbvZbBZbwbbpHbmnbpIbCabCbbCcbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfbwfaadaULbwhaZjbyVbuQbCdbCebCfbCgbChbxHbCibuQbAMbCjbrTbrTbCkaKBbClbCmbCnbCobCpbCqbCrbCsbCqbxTbxTbpYbrTbqabwCbwCbwCbASbtEbCtbCtbCtbqabqabCubqabqabCvbCwbCxbCybCybCybCzbCAbCzbCybCBbCybCybCybCybCCbCDbCEbBlbBlbCFbBlbBlbCGbCHbCIbBibCJbCKbCLcdKbBqbBqbBqbBqbBqbCNbBqbBxbCOblIbsIbCPbCQbCRbAebulbCSbyFbulbCTbCUbulbCVbulbCWbsIbsIbCXavAavAavAavAbxhaQsbxpbCYbCZbDabDbbDcbDdbDebxpbgXbDfbDgbAubiJbAvbDhblXbDibAwbvZbDjbxAbxBbrobrpbDkbABbABbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaXDaMLbDlaSlbxFaMLaMLaMLbDmaZjbDnbuQbDobxHbCfbDpbDqbxHbDrbuQbAMaKBaKBaKBaKBaKBbDsbDtbDubDvbDwbDtbDxbDybDzbDAbxTbpYbrTbpZbrVbrVbrVbASbtEbrVbsabDBbqabDCbDDbDEbqabqgaYpbCxbCybDFbDGbDHbDIbDJbCybDKbCybDLbDMbDNbDObDPbDQbDRbDSbDTbDRbDSbDUbDVbDObDWbDXbDYbDZbEabEbbEcbEdbEebBqbEfbBqbEgbEhbEibEjbEjbEjbEjbEkbElbEjbEmbEjbEjbAfbulbEnbEobEpbsIbEqbErbEsbEtbEuavAbxhbEvbxpbEwbEwbEwbExbEybEzbEAbxpbgXbmcbEBbiJbiJbiJbECblXbEDbEEbvZbyUbwbbpHbmnbmobmobmobmobmoaadaadbuMaadbuLaadaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbwgbEFaZjbyVbuQbEGbxHbxHbAKbxHbEHaKBaKBbAMaKBbEIbEJbEKbELbEMbENbEObEPbEQbENbENbERbENbENbESbpYbrTbqabETbrUbEUbEVbEWbEXbEYbEZbqabFabFbbFcbqabqgaYpbCxbCybFdbFebFfbFgbFhbCybFibCybFjbFkbCybFlbFmbFlbFmbFmbFnbFmbFmbFlbFmbFlbBqbFobFpbFqbFrbFsbFtbFubEabFvbCNbBqbFwbqFbFxbEjbFybFzbFAbFBbFCbFDbFEbFFbEjbEjbEjbEjbEjbEjbsIbFGbFHbFIbFJbFKavAbxharNbxpbFLbFMbFNbxpbxpbyQbxpbxpbgXbFObsVbFPbFQbFRbpAbFSbFTbFUbAxbFVbAzbuHboabobbFWbFXbFXbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXFbFYbAFbFZbuQbxHbGabxHbAKbGabGbaKBbGcbGdaKBbGebxTbxTbGfbGgbpYbGhbGibGjbGhbGhbGhbGhaKBbGkaKBbrTbqabGlbGmbGnbASbtEbqabqabqabqabqabqabqabqabGobbFbGpbCybGqbFebGrbGsbGtbCybGubCybGvbCzbCybGwbGxbGybGzbGAbGBbGCbGDbGEbGFbGGbBqbGHbGIbGJbGKbFsbGLbGMbGNbBqbCNbBqbFwbqFbGObGPbGQbGRbGSbGTbGUbGVbFEbGWbEjbGXbGYbGZbHabHbbsIbHcbHdbHebHfbHgavAbxharNbHhbHibHjbHjbHkbHlbHmbHnbHobgXbmcbHpbHqbHqbHqbrhblXblXblXbvZbHrbwbbpHbmnbpIbHsbHtbHubmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaULbHvbHwbHxbuQbxIbHybHzbHAbHzbHBaKBbAMaKBaKBbHCbHCbHDbHEbpYbpYbHFbHGbHHbHIbGhbHJbHKaKBbHLbHMbrTbqabHNbrXbrXbASbHObqabHPbHPbrVbHQbHRbHSbqabHTaYpbCxbCybHUbFebHVbHWbHXbHYbHZbIabIbbIcbCybIdbIebIfbIfbIgbIfbIgbIfbIhbIibIjbBqbFtbIkbIlbImbEbbInbIobIpbBqbCNbBqbIqbqFbqGbIrbFCbIsbItbIubIvbIwbIxbIybEjbIzbIAbIBbHabICavAavAavAbIDbIEbIFavAbxharNbIGbIHbIIbIJbIKbILbIGbIMbINbgXbmcbsVblXblXblXblXblXblXbnTbvZbIObxAbxBbrobrpbIPbFXbFXbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbIQbIRbISbITaKBaKBaKBaKBaKBaKBaKBaKBbIUbIVbIWbIXbIYbIZbJabpYbpYbJbbJcbJdbJebGhbJfbJgaKBbJhbJibJjbqabJkbrXbrXbASbtEbJlbrVbrVbJmbJnbJobJpbJqbqgaYpbJrbCybJsbFebJtbJubJvbJwbJxbJybJzbJAbCybJBbGBbJCbJDbJEbJFbJGbJDbJHbJIbJJbBqbJKbJLbJMbJNbBqbJObJPbJQbBqbCNbBqbFwbqFbqGbJRbFCbJSbJTbJUbJVbJWbJXbJYbEjbJZbIAbKabKbbKbbKcbKdavAbKeavAbKfavAbxharNbIGbKgbKhbKibKjbKkbKlbKmbINbgXbKnbsVblXblXbKobKpbKoblXblXbvZbyUbKqbpHbmnbmobmobmobmobmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbIRbKrbKsbIVbKtbKtbKubKvbKwbKtbKtbKxaKBbKybxTbKzbxTbxTbKAbKBbKCbKDbKEbKFbKGbKHbKIbKJbKKbHMbKLbKMbKNbKObKPbKQbtEbJqbrVbKRbJmbwFbrZbJpbKSbqgaYpbCxbCybKTbFebKUbKVbKWbCybKXbKYbKZbLabCybLbbLcbLdbLebLfbLgbLhbLibLjbLkbLlbBqbLmbLnbLobLpbBqbBqbBqbBqbBqbCNbBqbLqbqFbqGbEjbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBbLCbLDbLEbLFbLGbLHbLIbLJbLKbLLbLMarNbIGbLNbKhbLObKhbLPbIGbIMbINbgXbLQbsVblXbnTbKobLRbKoblXblXbAxbLSbLTbLUbLVbLWbLXbLYbLYbmoaadaadbuKaadbuLaadbuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbIRbLZbMaaWobMbbMbbMcbMdaWobMebxObMfaKBbMgbMhbMibMjbMkbKAbKBbMlbMmbMnbMobGhbMpbMqaKBbMrbrTaQWbqabMsbrXbrXbrXbMtbMubMvbMvbMwbMxbMybzobqabAWaYpbMzbCybCybCybCybMAbMBbCybCybMCbMDbCybCybMEbMFbMGbMEbMHbMHbMHbMFbMIbMEbMFbBqbBqbMJbMKbBqbBqbMLbMMbBtbBqbBwbBqbFwbqFbdubMNbMNbMNbMNbMNbMNbMObMPbMNbMNbMNbMNbMNbMNbMNbMNavAbMQbMRbMSbMTbLMaQsarNbMUbMVbKhbMWbKhbMXbMUbIMbMYbgXbMZbNablXblXblXblXblXblXblXbvZbNbbwbbNcbmnbpIbNdbNebNfbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbIQbIRbISbITaKBaKBaKBaKBaKBaKBaKBaKBbIUbIVbIWbIXbIYbIZbJabpYbpYbJbbJcbJdbJebGhbJfbJgaKBbJhbJibJjbqabJkbrXbrXbASbtEbJlbrVbrVbJmbJnbJobJpbJqbqgaYpbJrbCybJsbFebJtbJubJvbJwbJxbJybJzbJAbCybLabGBbJCbJDbJEbJFbJGbJDbJHbJIbJJbBqbJKbJLbJMbJNbBqbJObJPbJQbBqbCNbBqbFwbqFbqGbJRbFCbJSbJTbJUbJVbJWbJXbJYbEjbJZbIAbKabKbbKbbKcbKdavAbKeavAbKfavAbxharNbIGbKgbKhbKibKjbKkbKlbKmbINbgXbKnbsVblXblXbKobKpbKoblXblXbvZbyUbKqbpHbmnbmobmobmobmobmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbIRbKrbKsbIVbKtbKtbKubKvbKwbKtbKtbKxaKBbKybxTbKzbxTbxTbKAbKBbKCbKDbKEbKFbKGbKHbKIbKJbKKbHMbKLbKMbKNbKObKPbKQbtEbJqbrVbKRbJmbwFbrZbJpbKSbqgaYpbCxbCybKTbFebKUbKVbKWbCybKXbKYbKZbJBbCybLbbLcbLdbLebLfbLgbLhbLibLjbLkbLlbBqbLmbLnbLobLpbBqbBqbBqbBqbBqbCNbBqbLqbqFbqGbEjbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLBbLCbLDbLEbLFbLGbLHbLIbLJbLKbLLbLMarNbIGbLNbKhbLObKhbLPbIGbIMbINbgXbLQbsVblXbnTbKobLRbKoblXblXbAxbLSbLTbLUbLVbLWbLXbLYbLYbmoaadaadbuKaadbuLaadbuMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadbIRbLZbMaaWobMbbMbbMcbMdaWobMebxObCMaKBbMgbMhbMibMjbMkbKAbKBbMlbMmbMnbMobGhbMpbMqaKBbMrbrTaQWbqabMsbrXbrXbrXbMtbMubMvbMvbMwbMxbMybzobqabAWaYpbMzbCybCybCybCybMAbMBbCybCybMCbMDbCybCybMEbMFbMGbMEbMHbMHbMHbMFbMIbMEbMFbBqbBqbMJbMKbBqbBqbMLbMMbBtbBqbBwbBqbFwbqFbdubMNbMNbMNbMNbMNbMNbMObMPbMNbMNbMNbMNbMNbMNbMNbMNavAbMQbMRbMSbMTbLMaQsarNbMUbMVbKhbMWbKhbMXbMUbIMbMYbgXbMZbNablXblXblXblXblXblXblXbvZbNbbwbbNcbmnbpIbNdbNebNfbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaaaWobNgaWoaWobNhaWoaWoaWobNgaKBbNibNjbNkbNlbNmbNnbNobNpbNqbNrbNsbGhbNtbMpaKBbMrbrTaQWbqabNubscbNvbNwbNxbqabNybNzbNAbNBbqabqabqabqgaYpbNCbNDbNDbNDbNEbNFbNDbNGbNDbNHbNFbNDbNIbNDbNDbNJbNKbNKbNKbNLbNKbNMbNNbNNbNObNPbNQbNNbNRbNSbNTbNNbNNbNNbNUbNNbNVbqFbNWbNXbNYbNZbOabObbOcbOdbOebOfbOgbOhbNZbOibMNbOjbOkbOlatJaQsaUobOmbOnbOoarNbMUbOpbOqbOrbOsbOtbMUbIMbgXbgXbOubsVbOvbOwbOxbOyblXbOzbOAbOBbOCbLTbODbLVbOEbOFbOGbLYbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaadaaaaadajebOHbOIbOJajGaadaadbOKbOLbOKbOMbOMbOKbONbOObOPbOQbORbOPbOPbOPbOPaWobMrbHMaQWbqabqabqabqabqabqabqabqabqabOSbqabqabqabOTbqgbOUbOVaWKaWKaWKaWKaWKaWKaWVaWKbOWbOXaWXaWWaWKaWKbOYbOZbPabPbbPcbPdbPebPfaWKaWKbPgbPhaWKaWKaWKaWVaWKaWKaWKbPiaWKbPjbPkbNWbPlbPmbPnbPobPnbPnbPpbPqbPrbPnbPnbPsbPtbPubPvbPwavAatJaQsaUoaUoaUoaUoarNbMUbPxbPybPzbPAbPBbMUbIMbPCbPDbPEbPFbOvbPGbxwbAwblXbPHbPIbAxbPJbAzbPKbPLbmobmobmobmobmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaadajGbPMaadbPNajeaadaaabPObPPbPObPQbPQbPObPPbPPaadaadaadaadaadaadaqXaWobPRbPSbPTaVfaVfaVfaVfaVfaVfbPUbPVbPWbPXaVfaVfaVhbPYbPZbQabQbbQcbQdbQdbQdbQebQdbQfbQdbQgaVCbQhbQiaVCaVCbQjbQkbQlbQmbQnbQobQpbQqaVCbQrbQsaVCaVCaVCbQtbQubQvbQtbQwbQtbQtbQxbQybQzbQAbQBbQCbQDbQDbQEbQDbQDbQFbQDbQDbQGbQHbMNbQIbQJbMNbQKbQLaQsaQsbOobQMbMUbQNbQObQPbPzbQQbQRbQNbQSbQTbQUbQVbQWbQXbQYbQZbRabQWbRbbRcbOBbRdbAzbPKbRebobbRfbRgbRgbmoaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9433,7 +9440,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadbWRbWUbWRaadbZrbZsbZtbZtaadaadaaaaaaaaaaaaaaabZubYtbYubYvbYvbYvbYvbYvbYvbZvbZwbZxbZxbZxbZxbZxbZxbZxbZybZzbZAbZAbZAbZBbZCbZDbZEbZFbZGbZHbRpbRpbZIbZJbZKbRpbRpbZLbZMbZNbZObZPbZQbZRbZSbZNbYMbTSbZTbYPbZUbZVbZWbZXbZYbZZcaacabcaccadcadcaecafcafcagcahcaibRLbRLbRLbRLbRLbRLcajcakcalcalcamcancalcaocajbZgbZharNarNarNarNcapcaqcaparNcararNarNarNarNcasbTdbyObgXbgXbgXbgXbgXbgXcatcaucavbgXbgXbgXbgXbgXbgXaadaadaadaadaadaadaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaabVNaadaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaadbYvbYvcawcaxcaybYvcazbQKcaAcaAcaBcaCcaCcaCcaCcaDcaCcaCcaCcaEcaFcaGcaHcaIcaJcaKcaLcaMcaNcaObUYcaPcaQcaRcaScaTcaUcaVcaVcaVcaVcaWcaXbYMbTSbYNcaYcaZcaZcbacaZcaZcbbcbccbdbTYcbecbfcbgcbhcbicbecbjcbkbRLcblcbmcbncbocbpcajcbqcalcbrcbscalcalcbtcajbZgcbuarNcbvcbwaUoaQscbxcbycbzaQscbAajeaadarNcbBcbCcbDarNaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaadaaaaaaaadaaaaakaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaadaaaaadbWRbWRaadbWTbWRbWRaadaadaadaaaaaaaaaaaaaaaaaaaaaaadbYvcbEbZhbZhbZhbYvbQLbQKcaAcbFcbGcbHcbIcbJcaAcbKcbLcbMcbNcbOcbPcbQcbRcbScbTcbUcbVcbWcbXcbYcbZcbYccacbYccbcccccdcceccfccgcchcciccjcckcclccmccnccoccoccoccpccqccrccscctccuccvccwccxccycczccAccBccCccDccEccEccFccGccHcajcakcalccIcalcalcalccJcajbZgbQLarNccKccLbTdccMccNaQsccLaQsccOaqYaadaadaadaadaadaadaadaadaaaaaaaadaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaadaaaaAXaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZraaeccPbYrbYsaaeaaebZraadaaaaaaaaaaaaaaaaaaaaaaaaaaabYvccQcbuccRbQLccSbQLbQKcaAccTccUccVccWccXccYccZcdacdbcdccddcdecdfcdgcdhcdicdjbWkcdkcdlcdmbXvbXvcdncdocdpcdqbZNcdrcdscdtcducdvbZNbYMbTScdwbYPcdxcdycdzcdAcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdGcdLcdMcdNcdOcdOcdPccGcdQcajcajcajccIcalcdRcajcajcajbZgbQLarNcbycdScdScbyaUocdTbTdcdScdUajeaadaaaaaaaaaaaaaaaaaaaadaaaaaaaadaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaAXaAXaAXaaEaAXbuLaAXbuLaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZraaeccPbYrbYsaaeaaebZraadaaaaaaaaaaaaaaaaaaaaaaaaaaabYvccQcbuccRbQLccSbQLbQKcaAccTccUccVccWccXccYccZcdacdbcdccddcdecdfcdgcdhcdicdjbWkcdkcdlcdmbXvbXvcdncdocdpcdqbZNcdrcdscdtcducdvbZNbYMbTScdwbYPcdxcdycdzcdAcdBcdCcdDcdEcdFcdGcdHcdIcdJbBPcdGcdLcdMcdNcdOcdOcdPccGcdQcajcajcajccIcalcdRcajcajcajbZgbQLarNcbycdScdScbyaUocdTbTdcdScdUajeaadaaaaaaaaaaaaaaaaaaaadaaaaaaaadaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaAXaAXaAXaaEaAXbuLaAXbuLaadaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaadaadbWScdVaaebWRbWUaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaacdWbQLcdXbZhcdYbYvbQLbQKcaAcdZceacebceccedcaAceecefcegcaAcehcehceicejcehcehcekbWkcelcemcemcenceocepcemcemceqbZNcercescdtcducetbZNceubTScevbYPcewcexceycdAcezceAceBceCceDcbeceEcbeceFceEcbeceGcbkbRLceHceIceJceKceLcajceMceNceOcePceQceRceMcajbZgbQLarNceSceTceUcdSaUoceVcdSceWarNajeaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaAXaAXaaaaaaaaaaaaaadaaaaadaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSgaaaaaaaadceXaaeaaeaaeaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaabYvceYbQLbZhbZhbYvbQLceZcaAcfacfbcfccfdcfecaAcffcfgcfhcaAcficfjcfkcflcfmcejcfnbWkcdkcemcfocfpcfqcfrcfscemcftbZNcfucfvcfwcfxcfycfzcfAcfBcfCcfDcfEcfFcfGcfHcfIcfJcfKceCbTYcfLcfMcfMcfNcfMcfOceGcfPbRLcfQbRLcfRcfSbRLcajcfTcfUcfVcfWcfXcfYcfZcajbZgbZharNarNarNcgaarNarNarNcgaarNajeaadaadaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaadaaaaaaaadcgbaadaAXaAXaAXbuLaadaadaakaakaakaaEaakbuMaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadabaaaaaaaaadaadaadaaaaaaaadbVMaadaaaaaaaaaaaaaaaaaaaaaaaaaadbYvcgcbQLbQLcdYbYvbQLbQKcaAcgdcgecgfcggcghcaAcgicgjcgkcglcgmcgncgocgpcgqcgrcgsbWkcdkcgtcgucgvcgwcgxcgycemcftbZNcgzcgAcgBcgCcgDcgEcgFbTSbTTcgGcgHcgIcgJcgKcgLcgMcgNcgOcgPcgQcgRbWvcgSbWvcgTcgUcgVcgWcgXcgYcgZchachbchcchdchechfchgchhchichjchkchlbQLchmbYvchnaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9539,29 +9546,29 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} (1,1,2) = {" -cEecEfcEgcEhcEicEjcEkcElcEecEmcEncEocEpcEqcErcEscEkcEjcEncEgcEhcElcEocEicEqcEmcEscEtcEucEvcEwcExcEycEzcEAcEBcECcEDcEEcEFcEGcEHcEIcEJcEKcELcEMcENcEOcEAcEBcECcEDcEEcEFcEGcEHcEIcEJcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcERcERcERcERcERcEScERcERcERcERcERcEScERcERcERcERcERcEScERcERcERcERcERcET -cEncEUcEVcEWcEXcEYcEZcFacFbcFccFdcFecFfcFgcFhcFicEZcEYcFdcEVcEWcFacFecEXcFgcFccEfcExcEycEzcFjcFkcFlcFmcEEcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcENcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFscFscFscFscFtcFucFucFucFucFucFtcFvcFvcFvcFvcFvcFtcFwcFxcFxcFxcFycFz -cEqcEXcFccFfcFacFhcEVcEZcFdcEYcFgcFbcFicEWcFecEUcEVcFhcFgcFccFfcEZcFbcFacEWcEYcEicEucEvcEwcExcEycEzcFjcEBcFlcFmcFqcFncFocFpcEtcEucEvcEvcEwcExcEycFjcFkcFlcFmcFqcFncFocFpcEtcEucEKcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFAcFscFAcFscFtcFucFucFucFucFucFtcFvcFBcFvcFBcFvcFtcFCcFDcFDcFDcFEcFz -cEhcFacEYcFicEZcFecFccEVcFgcFhcEWcFdcEUcFfcFbcEXcFccFecEWcEYcFicEVcFdcEZcFfcFhcElcFjcFkcFlcFmcFqcFncFocEHcEtcEucEvcEwcExcEycEzcFjcFkcEzcFjcFkcFlcFocFpcEtcEucEvcEwcExcEycEzcFjcEBcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFscFscFscFscFtcFucFucFucFucFucFtcFvcFvcFvcFvcFvcFtcFCcFDcFDcFDcFEcFz -cEpcEZcFhcEUcEVcFbcEYcFccEWcFecFfcFgcEXcFicFdcFacEYcFbcFfcFhcEUcFccFgcEVcFicFecEkcFocFpcEtcEucEvcEwcExcENcEzcFjcFkcFlcFmcFqcFncFocFpcEwcExcEycEzcExcEycEzcFjcFkcFlcFmcFqcFncFocEHcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFscFscFscFscFtcFucFucFucFucFucFtcFvcFvcFvcFvcFvcFtcFCcFDcFDcFDcFEcFz -cEscEVcFecEXcFccFdcFhcEYcFfcFbcFicEWcFacEUcFgcEZcFhcFdcFicFecEXcEYcEWcFccEUcFbcEgcFjcFkcFlcFmcFqcFncFocEHcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcEBcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFscFAcFscFscFtcFucFucFucFucFucFtcFvcFvcFvcFvcFvcFtcFCcFDcFDcFDcFEcFz -cEfcFccFbcFacEYcFgcFecFhcFicFdcEUcFfcEZcEXcEWcEVcFecFgcEUcFbcFacFhcFfcEYcEXcFdcEmcEvcEwcExcEycEzcFjcFkcECcFmcFqcFncFocFpcEtcEucEvcEwcEtcEucEvcEwcFkcFlcFmcFqcFncFocFpcEtcEucEvcELcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFscFAcFscFscFtcFucFucFucFucFucFtcFvcFvcFvcFvcFvcFtcFFcFDcFDcFDcFGcFz -cEicEYcFdcEZcFhcEWcFbcFecEUcFgcEXcFicEVcFacFfcFccFbcEWcEXcFdcEZcFecFicFhcFacFgcEjcFqcFncFocFpcEtcEucEvcELcExcEycEzcFjcFkcFlcFmcFqcFHcFIcFJcFKcFLcFMcEwcExcEycEzcFjcFkcFlcFmcFqcEFcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFscFscFscFscFtcFucFucFucFucFucFtcFvcFvcFvcFvcFvcFtcFFcFDcFDcFDcFGcFz -cElcFhcFfcFNcEYcFhcFOcFPcFQcFRcFScFTcFTcFUcFVcFWcFUcFUcFXcFYcFhcFccFZcFbcEZcEWcErcFpcEtcEucEvcEwcExcEycEOcFjcFkcFlcFmcFqcFncFocFpcFJcGacGbcGccGdcGecEzcFjcFkcFlcFmcFqcFncFocFpcEIcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFscFscFscFscFtcFucFucFucFucFucFtcFvcFvcFvcFvcFvcFtcFFcFDcFDcFDcFGcFz -cEkcFecGfcFgcFhcGgcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGgcEYcFccFNcEVcFfcEocFlcFmcFqcFncFocFpcEtcEJcEvcEwcExcEycEzcFjcFkcFlcGicGjcGkcGlcGacGmcEucEvcEwcExcEycEzcFjcFkcFlcEDcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFAcFscFAcFscFtcFucFucFucFucFucFtcFvcFBcFvcFBcFvcFtcFFcFDcFDcFDcFGcFz -cEgcFbcFicEZcFecGncGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGncEXcFccFecFccFicEecEwcExcEycEzcFjcFkcFlcEDcFqcFncFocFpcEtcEucEvcEwcFIcGkcGlcGacGbcGocFmcFqcFncFocFpcEtcEucEvcEwcEMcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcFscFscFscFscFscFtcFucFucFucFucFucFtcFvcFvcFvcFvcFvcFtcGpcGqcGqcGqcGrcFz -cEmcFdcFfcFacFhcGscGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGscFacEYcFbcEYcEUcEncFkcFlcFmcFqcFncFocFpcEIcEucEvcEwcExcEycEzcFjcFkcGtcGucGvcGwcFIcGvcEtcEucEvcEwcExcEycEzcFjcFkcECcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGxcGycGycGycGycGycGzcGycGycGycGycGycGzcGycGycGycGycGycGzcGycGycGycGycGycGA -cEjcFgcFicEZcFecGBcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGBcEZcFhcFdcFhcEXcEqcEucEvcEwcExcEycEzcFjcEBcFlcFmcFqcFncFocFpcEtcEucEycEwcExcEycEzcFmcFkcFlcFmcFqcFncFocFpcEtcEucEKcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcGCcGCcGDcGEcGEcFtcGFcGFcGFcGFcGFcFtcGGcGHcGHcGHcGIcFtcGJcGKcGKcGKcGLcFz -cErcEWcEUcEVcFbcGMcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGMcEVcFecFgcFecFacEhcEycEzcFjcFkcFlcFmcFqcEFcFocFpcEtcEucEvcEwcExcEycEvcFlcFmcFqcFncFjcFncFocFpcEtcEucEvcEwcExcEycEOcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcGNcGNcGOcGPcGPcFtcGFcGQcGFcGRcGFcFtcGScGTcGTcGTcGUcFtcGVcGWcGWcGWcGXcFz -cEocFfcEXcFccFdcGYcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGYcFccFbcEWcFbcEZcEpcFmcFqcFncFocFpcEtcEucEKcEwcExcEycEzcFjcFkcFlcFmcGucFHcGZcGtcHacFKcEvcEwcExcEycEzcFjcFkcFlcFmcEEcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcGNcHbcHbcHbcGPcFtcGFcGFcGFcGFcGFcFtcGScGTcGTcGTcGUcFtcGVcGWcGWcGWcGXcFz -cEecFicFacEYcFgcGgcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGgcEYcFdcFfcFdcEVcEscFncFocFpcEtcEucEvcEwcEMcEycEzcFjcFkcFlcFmcFqcFncFKcHccHdcHecHfcHgcExcEycEzcFjcFkcFlcFmcFqcFncEGcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcGNcGOcGOcGOcGPcFtcGFcGFcGFcGFcGFcFtcGScGTcGTcGTcGUcFtcGVcGWcGWcGWcGXcFz -cEncEUcEZcFhcEWcGncGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGncFhcFgcFicFgcFccEfcEzcFjcFkcFlcFmcFqcFncEGcFpcEtcEucEvcEwcExcEycEzcHhcHicHjcHkcHlcHmcFocFpcEtcEucEvcEwcExcEycEzcEAcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcHncHocHocHocHpcFtcGFcHqcGFcGFcGFcFtcHrcHscHscHscHtcFtcGVcGWcGWcGWcGXcFz -cEqcEXcEXcFccFdcGscGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGscFecEWcFacEWcEYcEicFqcFncFocFpcEtcEucEvcELcExcEycEzcFjcFkcFlcFmcFqcGvcHucHvcHwcHicHxcEwcExcEycEzcFjcFkcFlcFmcFqcEFcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcHycHzcHzcHzcHAcFtcGFcGFcGFcHBcGFcFtcHCcHDcHDcHDcHEcFtcHFcGWcGWcGWcHGcFz -cEhcFacFacEYcFgcGBcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGBcFbcFfcEZcFfcFhcElcEvcEwcExcEycEzcFjcFkcECcFmcFqcFncFocFpcEtcEucEvcFLcHhcHHcFHcGZcGtcFlcFmcFqcFncFocFpcEtcEucEvcELcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcHIcGOcHJcGOcHKcFtcGFcGFcGFcGFcGFcFtcHLcGTcGTcGTcHMcFtcHFcGWcGWcGWcHGcFz -cEpcEZcEZcFhcEWcGMcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGMcFhcEUcEVcFicFecEkcFlcFmcFqcFncFocFpcEtcEJcEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcEDcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcHIcHNcHNcHNcHKcFtcHOcHOcHOcHOcHOcFtcHLcGTcGTcGTcHMcFtcHFcGWcGWcGWcHGcFz -cEscEVcEVcFecFfcGYcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGYcFecEXcFccEUcFbcEgcExcEycEzcFjcFkcFlcFmcEEcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcENcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcHIcHIcGOcHKcHKcFtcHPcHPcHPcHPcHPcFtcHLcGTcGTcGTcHMcFtcHFcGWcGWcGWcHGcFz -cEfcFccFccFbcFicGgcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGgcFbcFacEYcEXcFdcEmcFpcEtcEucEvcEwcExcEycEOcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEIcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFrcHQcHQcHRcHScHScFtcHTcHTcHTcHTcHTcFtcHUcHVcHVcHVcHWcFtcHXcHYcHYcHYcHZcFz -cEicEYcEYcFdcEUcGncGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGncFdcEZcFhcFacFgcEjcFncFocFpcEtcEucEvcEwcEMcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncEGcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIacIbcIbcIbcIbcIbcIccIbcIbcIbcIbcIbcIccIbcIbcIbcIbcIbcIccIbcIbcIbcIbcIbcId +cEecEfcEgcEhcEicEjcEkcElcEecEmcEncEocEpcEqcErcEscEkcEjcEncEgcEhcElcEocEicEqcEmcEscEtcEucEvcEwcExcEycEzcEAcEBcECcEDcEEcEFcEGcEHcEIcEJcEKcELcEMcENcEOcEAcEBcECcEDcEEcEFcEGcEHcEIcEJcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFzcETcETcETcETcETcFtcETcETcETcETcETcFtcETcETcETcETcETcFtcETcETcETcETcETcFr +cEncEUcEVcEWcEXcEYcEZcFacFbcFccFdcFecFfcFgcFhcFicEZcEYcFdcEVcEWcFacFecEXcFgcFccEfcExcEycEzcFjcFkcFlcFmcEEcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcENcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFscFscFscFscERcFucFucFucFucFucERcFvcFvcFvcFvcFvcERcFwcFxcFxcFxcFycES +cEqcEXcFccFfcFacFhcEVcEZcFdcEYcFgcFbcFicEWcFecEUcEVcFhcFgcFccFfcEZcFbcFacEWcEYcEicEucEvcEwcExcEycEzcFjcEBcFlcFmcFqcFncFocFpcEtcEucEvcEvcEwcExcEycFjcFkcFlcFmcFqcFncFocFpcEtcEucEKcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFAcFscFAcFscERcFucFucFucFucFucERcFvcFBcFvcFBcFvcERcFCcFDcFDcFDcFEcES +cEhcFacEYcFicEZcFecFccEVcFgcFhcEWcFdcEUcFfcFbcEXcFccFecEWcEYcFicEVcFdcEZcFfcFhcElcFjcFkcFlcFmcFqcFncFocEHcEtcEucEvcEwcExcEycEzcFjcFkcEzcFjcFkcFlcFocFpcEtcEucEvcEwcExcEycEzcFjcEBcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFscFscFscFscERcFucFucFucFucFucERcFvcFvcFvcFvcFvcERcFCcFDcFDcFDcFEcES +cEpcEZcFhcEUcEVcFbcEYcFccEWcFecFfcFgcEXcFicFdcFacEYcFbcFfcFhcEUcFccFgcEVcFicFecEkcFocFpcEtcEucEvcEwcExcENcEzcFjcFkcFlcFmcFqcFncFocFpcEwcExcEycEzcExcEycEzcFjcFkcFlcFmcFqcFncFocEHcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFscFscFscFscERcFucFucFucFucFucERcFvcFvcFvcFvcFvcERcFCcFDcFDcFDcFEcES +cEscEVcFecEXcFccFdcFhcEYcFfcFbcFicEWcFacEUcFgcEZcFhcFdcFicFecEXcEYcEWcFccEUcFbcEgcFjcFkcFlcFmcFqcFncFocEHcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcEBcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFscFAcFscFscERcFucFucFucFucFucERcFvcFvcFvcFvcFvcERcFCcFDcFDcFDcFEcES +cEfcFccFbcFacEYcFgcFecFhcFicFdcEUcFfcEZcEXcEWcEVcFecFgcEUcFbcFacFhcFfcEYcEXcFdcEmcEvcEwcExcEycEzcFjcFkcECcFmcFqcFncFocFpcEtcEucEvcEwcEtcEucEvcEwcFkcFlcFmcFqcFncFocFpcEtcEucEvcELcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFscFAcFscFscERcFucFucFucFucFucERcFvcFvcFvcFvcFvcERcFFcFDcFDcFDcFGcES +cEicEYcFdcEZcFhcEWcFbcFecEUcFgcEXcFicEVcFacFfcFccFbcEWcEXcFdcEZcFecFicFhcFacFgcEjcFqcFncFocFpcEtcEucEvcELcExcEycEzcFjcFkcFlcFmcFqcFHcFIcFJcFKcFLcFMcEwcExcEycEzcFjcFkcFlcFmcFqcEFcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFscFscFscFscERcFucFucFucFucFucERcFvcFvcFvcFvcFvcERcFFcFDcFDcFDcFGcES +cElcFhcFfcFNcEYcFhcFOcFPcFQcFRcFScFTcFTcFUcFVcFWcFUcFUcFXcFYcFhcFccFZcFbcEZcEWcErcFpcEtcEucEvcEwcExcEycEOcFjcFkcFlcFmcFqcFncFocFpcFJcGacGbcGccGdcGecEzcFjcFkcFlcFmcFqcFncFocFpcEIcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFscFscFscFscERcFucFucFucFucFucERcFvcFvcFvcFvcFvcERcFFcFDcFDcFDcFGcES +cEkcFecGfcFgcFhcGgcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGgcEYcFccFNcEVcFfcEocFlcFmcFqcFncFocFpcEtcEJcEvcEwcExcEycEzcFjcFkcFlcGicGjcGkcGlcGacGmcEucEvcEwcExcEycEzcFjcFkcFlcEDcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFAcFscFAcFscERcFucFucFucFucFucERcFvcFBcFvcFBcFvcERcFFcFDcFDcFDcFGcES +cEgcFbcFicEZcFecGncGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGncEXcFccFecFccFicEecEwcExcEycEzcFjcFkcFlcEDcFqcFncFocFpcEtcEucEvcEwcFIcGkcGlcGacGbcGocFmcFqcFncFocFpcEtcEucEvcEwcEMcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcFscFscFscFscFscERcFucFucFucFucFucERcFvcFvcFvcFvcFvcERcGpcGqcGqcGqcGrcES +cEmcFdcFfcFacFhcGscGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGscFacEYcFbcEYcEUcEncFkcFlcFmcFqcFncFocFpcEIcEucEvcEwcExcEycEzcFjcFkcGtcGucGvcGwcFIcGvcEtcEucEvcEwcExcEycEzcFjcFkcECcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGAcGxcGxcGxcGxcGxcGzcGxcGxcGxcGxcGxcGzcGxcGxcGxcGxcGxcGzcGxcGxcGxcGxcGxcGy +cEjcFgcFicEZcFecGBcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGBcEZcFhcFdcFhcEXcEqcEucEvcEwcExcEycEzcFjcEBcFlcFmcFqcFncFocFpcEtcEucEycEwcExcEycEzcFmcFkcFlcFmcFqcFncFocFpcEtcEucEKcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcGCcGCcGDcGEcGEcERcGFcGFcGFcGFcGFcERcGGcGHcGHcGHcGIcERcGLcGKcGKcGKcGJcES +cErcEWcEUcEVcFbcGMcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGMcEVcFecFgcFecFacEhcEycEzcFjcFkcFlcFmcFqcEFcFocFpcEtcEucEvcEwcExcEycEvcFlcFmcFqcFncFjcFncFocFpcEtcEucEvcEwcExcEycEOcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcGNcGNcGOcGPcGPcERcGFcGQcGFcGRcGFcERcGScGTcGTcGTcGUcERcGVcGWcGWcGWcGXcES +cEocFfcEXcFccFdcGYcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGYcFccFbcEWcFbcEZcEpcFmcFqcFncFocFpcEtcEucEKcEwcExcEycEzcFjcFkcFlcFmcGucFHcGZcGtcHacFKcEvcEwcExcEycEzcFjcFkcFlcFmcEEcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcGNcHbcHbcHbcGPcERcGFcGFcGFcGFcGFcERcGScGTcGTcGTcGUcERcGVcHXcHXcHXcGXcES +cEecFicFacEYcFgcGgcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGgcEYcFdcFfcFdcEVcEscFncFocFpcEtcEucEvcEwcEMcEycEzcFjcFkcFlcFmcFqcFncFKcHccHdcHecHfcHgcExcEycEzcFjcFkcFlcFmcFqcFncEGcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcGNcGOcGOcGOcGPcERcGFcGFcGFcGFcGFcERcGScGTcGTcGTcGUcERcGVcGWcGWcGWcGXcES +cEncEUcEZcFhcEWcGncGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGncFhcFgcFicFgcFccEfcEzcFjcFkcFlcFmcFqcFncEGcFpcEtcEucEvcEwcExcEycEzcHhcHicHjcHkcHlcHmcFocFpcEtcEucEvcEwcExcEycEzcEAcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcHncHocHocHocHpcERcGFcHqcGFcGFcGFcERcHrcHscHscHscHtcERdfHcXycXycXycWYcES +cEqcEXcEXcFccFdcGscGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGscFecEWcFacEWcEYcEicFqcFncFocFpcEtcEucEvcELcExcEycEzcFjcFkcFlcFmcFqcGvcHucHvcHwcHicHxcEwcExcEycEzcFjcFkcFlcFmcFqcEFcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcHycHzcHzcHzcHAcERcGFcGFcGFcHBcGFcERcHCcHDcHDcHDcHEcERdwAdwzdwzdwzdwBcES +cEhcFacFacEYcFgcGBcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGBcFbcFfcEZcFfcFhcElcEvcEwcExcEycEzcFjcFkcECcFmcFqcFncFocFpcEtcEucEvcFLcHhcHHcFHcGZcGtcFlcFmcFqcFncFocFpcEtcEucEvcELcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcHIcGOcHJcGOcHKcERcGFcGFcGFcGFcGFcERcHLcGTcGTcGTcHMcERcHFcGWcGWcGWcHGcES +cEpcEZcEZcFhcEWcGMcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGMcFhcEUcEVcFicFecEkcFlcFmcFqcFncFocFpcEtcEJcEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcEDcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcHIcHNcHNcHNcHKcERcHOcHOcHOcHOcHOcERcHLcGTcGTcGTcHMcERcHFcHZcHZcHZcHGcES +cEscEVcEVcFecFfcGYcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGYcFecEXcFccEUcFbcEgcExcEycEzcFjcFkcFlcFmcEEcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcENcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcHIcHIcGOcHKcHKcERcHPcHPcHPcHPcHPcERcHLcGTcGTcGTcHMcERcHFcGWcGWcGWcHGcES +cEfcFccFccFbcFicGgcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGgcFbcFacEYcEXcFdcEmcFpcEtcEucEvcEwcExcEycEOcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEIcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacEQcHQcHQcHRcHScHScERcHTcHTcHTcHTcHTcERcHUcHVcHVcHVcHWcERcKVcHYcHYcHYcVKcES +cEicEYcEYcFdcEUcGncGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGncFdcEZcFhcFacFgcEjcFncFocFpcEtcEucEvcEwcEMcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncEGcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIdcIbcIbcIbcIbcIbcIacIbcIbcIbcIbcIbcIacIbcIbcIbcIbcIbcIacIbcIbcIbcIbcIbcIc cElcFhcFhcFgcEXcGscGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGscFgcEVcFecEZcEWcErcEycEzcFjcFkcFlcFmcFqcEFcFocFpcEtcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEOcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa cEkcFecFecEWcFacGYcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGYcEWcFccFbcEVcFfcEocFkcFlcFmcFqcFncFocFpcEIcEucEvcEwcExcEycEzcFjcFkcFlcFmcFqcFncFocFpcEtcEucEvcEwcExcEycEzcFjcFkcECcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa cEgcFbcFbcFfcEZcGgcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGhcGgcFfcEYcFdcFccFicEecEwcExcEycEzcFjcFkcFlcEDcEEcEFcEGcEHcEIcEJcEKcELcEMcENcEOcEAcEBcECcEDcEEcEFcEGcEHcEIcEJcEKcELcEMcEPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9666,8 +9673,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJTcKKcKfcKKcKOcKfcKmcKmcKmcKmcKOcKMcKMcKMcKMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJTcKKcKfcKKcJTcKfcKPcKQcKRcKecJTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKncKScKScJZcKTcKUcJYcJZcKScKScKpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKncKacKVcKxcKfcKWcKXcJVcKpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJTcKRcKmcKYcKmcKVcJTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKncKadwCcKxcKfcKWcKXcJVcKpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJTcKRcKmcKYcKmdwCcJTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJTcKZcLacLbcLccLdcJTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLecLecLecLecLecLecLecLecLeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKncLfcLgcLgcLgcLhcKpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLecLicLjcLjcLjcLjcLjcLkcLeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacLecLlcLmcLncLncLncLncLlcLeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9840,7 +9847,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVhcUacTScTRcUfcTUcTVcTVcTVcTVcTVcUtcTVcTVcUBcTScUccUmcUmcUhcUiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVCcVDcVEcTVcTVcTVcTVcTVcTVcVFcVGcUBcUfcVgcVhcVHcUmcUhcUiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVhcTRcUccVIcTVcTVcTVcTVcTVcUlcTScUfcVgaaaaaacVhcVHcUhcUiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVhcTScUjcTVcVJcVKcUBcUfcUacVgaaaaaaaaaaaacVhcTScUyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVhcTScUjcTVcVJdwDcUBcUfcUacVgaaaaaaaaaaaacVhcTScUyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVhcUacTRcTRcTRcUacVgaaaaaaaaaaaaaaaaaaaaacVhcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9915,12 +9922,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXajeajeaaaaadaaacCkcWlcWmcWncWmcWocCmcVLcWdcWpcWdcWdcWdcWgcVLcWicVLcWqcWjcWdcWdcVWcVWcVLajeajeaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSgajeajeaaaaadaaaaaacWrcWscWtcWucWvcWwcWxcWycWdcWzcWdcWdcWgcVLcWAcVLcWjcWjcWdcWBcWCcWDcVLajeajeaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAXajeajeaaaaadaaacCkcWEcWFcWGcWFcWGcWHcWIcWdcWdcWJcWdcWdcVLcVLcVLcVLcWKcWLcWdcWJcWMcWNcWOcWPcWPcWQcWRcWSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaSgaAXaAXaAXajeajeaaaaadaaacCkcWTcWUcWVcWWcWWcWWcVLcWXcWYcWZcWdcWdcXacXbcVLcVLcVLcVLcXccVLcVLcVLcVLajeajeaAXaAXaSgaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaSgaAXaAXaAXajeajeaaaaadaaacCkcWTcWUcWVcWWcWWcWWcVLcWXdwEcWZcWdcWdcXacXbcVLcVLcVLcVLcXccVLcVLcVLcVLajeajeaAXaAXaSgaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacXdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaAXajeajeaadaadaadcXecXfcWccVLcVLcVLcVLcVLcXgcXhcXicXicXjcVLcXacVLcVLcVLcXecXkcXlaadaadaadajeajeaAXaAXaAXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaeaaeaaeaaeaaeaadaadaaaaAXajeajeaaaaadaaacCkcXmcXlcVLcVNcVNcVNcVNcVNcXncVNcVNcVNcVNcXbcXbcVNcVLcXecXkaaaaaaaadaaaajeajeaAXaAXaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaaeaaeaaeaaeaaaaAXajeajeaaaaadaaacCkcXocXlcVLcVNcVNcXbcXbcVNcXbcXbcXbcXbcXbcXbcVNcVNcVLcXecXpcCmcXqcXrcXscVLajeajeaAXaadaaeaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaaeaaeaaeaaaaAXajeajeaaaaadaaaaaacWTcXlcVLcVNcXbcXbcXbcXbcXbcVNcXtcXucXbcXbcXbcVNcVLcXecXvcCmcXwcWdcWdcXxcVLajeaAXaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaAXajeajeaaaaadaaacCkcXkcCmcVLcVNcXbcXbcXbcXbcXbcVNcXtcXycXbcXbcXbcVNcVLcXecXkcWwcXzcWdcWdcWhcVLajeaAXaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaAXajeajeaaaaadaaacCkcXkcCmcVLcVNcXbcXbcXbcXbcXbcVNcXtdwFcXbcXbcXbcVNcVLcXecXkcWwcXzcWdcWdcWhcVLajeaAXaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebRhamrajeajeaadaadaadcXecWTcWccVLcVNcXbcXbcXbcVNcXAcXBcVNcXCcXbcXbcXbcVNcVLcXecXocXDcXEcWdcWdcXFcVLajeamrbRhaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaAXajeajeaaaaadaaacCkcWTcCmcVLcVNcXbcXbcVNcXbcXbcXGcXHcXIcXbcXbcXbcVNcVLcCkcXkcWWcXJcWdcXKcWdcVLajeaAXaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaeaaeaaeaaaaAXajeajeaaaaadaaaaaacXkaaacVLcVNcXbcXbcXbcXbcXbcVNcXLcXMcXbcXbcVNcVNcVLaaacXkcCmcXwcWXcWXcWhcVLajeaAXaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10153,7 +10160,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeUdfcdfcdfcdfcdfcdfcdfcdfcdfcdfddfcdfedfcdfedeUdffdfgdfgdfgdffdfhdfidfjdfkdffdflaadabaaaddcwdcwdbVdbWdbWdbWdbVdcwdcwdbVdbWdbCdbCdbCdbCaaadehdeideaddYdebdeqdeadeqddYdeqdeqdfmdeqaaedetdetdetaaedetdfadeZdfbdfbdfadfndeQdeQdeQdeQdeQdeTdeTdeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeUdfcdfcdfcdfcdfcdfcdfcdfcdfcdfcdfcdfcdfcdfcdeUdfodfodfodfpdfodfqdfrdfjdfjdfsaadaadaadaaddbCdbCdcwdftdbXdbVdcwdbCdbCdbCdbCdbCdbCaadaaddeBdfudeideadebdebdeadeBdeqdeqdfmdeqdeBdfvcxdcxddfwdfwdfxdfwdeJdeJdeJdeJdeJdeJdeQdeQdfydeQdeQdeQdeQdeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeUdfedfcdfcdfcdfcdfcdfcdeUdeUdeUdeUdeUdfzdeUdeUdfAdfodfodfodfodfBdfqdfrdfjdfjdfjdfjaadaaddbCdbCdbCdbCdbZdbCdbCdbCdbCdbCdbCaadaaaaaeddYdeBddZdeadeaddYdebdeadeadeBdegdegdegdegdegaadaadaadaaaaaaaaadfCdeudfCaaedbwdeJdeOdeOdeQdeOdfDdeQdfEdeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeUdfedfedfcdfFdfcdfcdfcdeUdfcdfcdfddfcdfcdfcdfzdfodfodfodfodfodfodfqdfrdfjdfjdfjdfjaaaaadaaddbCdbCdfGdbZdbZdbCdbCaadaadaadaaaaaadfHddYdeiddZdeadeaddYddYddYddYdeqdegdeEdetdeEdfIaaaaadaaaaaaaaaaaaaaaaaadfCaaddfIdeJdfJdfJdeQdfJdfKdeQdeQdeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeUdfedfedfcdfFdfcdfcdfcdeUdfcdfcdfddfcdfcdfcdfzdfodfodfodfodfodfodfqdfrdfjdfjdfjdfjaaaaadaaddbCdbCdfGdbZdbZdbCdbCaadaadaadaaaaaaaaeddYdeiddZdeadeaddYddYddYddYdeqdegdeEdetdeEdfIaaaaadaaaaaaaaaaaaaaaaaadfCaaddfIdeJdfJdfJdeQdfJdfKdeQdeQdeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadeUdeUdeUdeUdeUdeUdeUdfLdeUdfMdfcdfMdfcdfMdfcdeUdfodfodfodfodfodfNdfodfqdfrdfjdfjdfjaaaaaaaadaaddbCdbCdbCdbCdbCaadaadaaaaaadfOdfOdfPddYdeadfQdeadebddYdebdeqdeadeqdegdetdfIdetdetaaaaadaaaaaadbxaaaaaaaaaaaadfIaaddeJdeQdeQdeQdeQdfRdeOdeOdeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCkdfSdfTdfUdfTdfUdfTdfUdfTdeUdfMdfcdfMdfcdfMdfcdfzdfodfodfodfodfodfVdfodfWdfqdfXdfrdfjdfjdfYdffdffdffdffdfZdfZaadaaaaadaaabVMaaaaaaaaeddYddYdfQdeaddYddYdeBdebdeBdeqdegdetdfCaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaadeEdeJdeKdeQdeQdeKdeKdeKdeKdeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacCkdgadgbdgcdgbdgcdgbdgcdgbdeUdfcdfcdfcdfcdfcdfcdeUdfodfodfodfodfodgddfodgedfodfqdfqdfrdfjdfjdgfdfjdgfaaeaaeaaeaaeaaaaadaadaadaadaaaaaeddYdebdggdebdebddYdebdebdebdebdegdfIdetaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaadeJdeJdeJdeQdeQdeKdghdghdghdeKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10827,3 +10834,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/maps/RandomZLevels/wildwest.dm b/maps/RandomZLevels/wildwest.dm index 34e450600e9..056456e332f 100644 --- a/maps/RandomZLevels/wildwest.dm +++ b/maps/RandomZLevels/wildwest.dm @@ -59,19 +59,19 @@ user.see_invisible = SEE_INVISIBLE_LEVEL_TWO user << "\blue The walls suddenly disappear." user.dna.mutantrace = "shadow" - user.update_mutantrace() + user.update_body() if("Wealth") user << "Your wish is granted, but at a terrible cost..." user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart." new /obj/structure/closet/syndicate/resources/everything(loc) user.dna.mutantrace = "shadow" - user.update_mutantrace() + user.update_body() if("Immortality") user << "Your wish is granted, but at a terrible cost..." user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart." user.verbs += /mob/living/carbon/proc/immortality user.dna.mutantrace = "shadow" - user.update_mutantrace() + user.update_body() if("To Kill") user << "Your wish is granted, but at a terrible cost..." user << "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart." @@ -86,7 +86,7 @@ user << "Objective #[obj_count]: [OBJ.explanation_text]" obj_count++ user.dna.mutantrace = "shadow" - user.update_mutantrace() + user.update_body() 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." user << "You feel as if you just narrowly avoided a terrible fate..." diff --git a/maps/tgstation.2.1.2.dmm b/maps/tgstation.2.1.2.dmm index d5b2ffecb43..baad424a8ac 100644 --- a/maps/tgstation.2.1.2.dmm +++ b/maps/tgstation.2.1.2.dmm @@ -1731,7 +1731,7 @@ "aHo" = (/obj/structure/closet/gmcloset{icon_closed = "black"; icon_state = "black"; name = "formal wardrobe"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aHp" = (/obj/structure/kitchenspike,/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "aHq" = (/mob/living/simple_animal/hostile/retaliate/goat{name = "Pete"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) -"aHr" = (/obj/structure/closet/crate{desc = "It's a storage unit for kitchen clothes and equipment."; name = "Kitchen Crate"},/obj/item/clothing/head/chefhat,/obj/item/clothing/under/rank/chef,/obj/item/weapon/storage/box/mousetraps{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/mousetraps,/obj/item/clothing/under/waiter,/obj/item/clothing/under/waiter,/obj/machinery/light/small{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) +"aHr" = (/obj/machinery/light/small{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/closet/chefcloset,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "aHs" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/wall,/area/hydroponics) "aHt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hydroponics) "aHu" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Hydroponics"; req_access_txt = "35"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics) @@ -3565,7 +3565,7 @@ "bqC" = (/obj/item/weapon/book/manual/security_space_law,/obj/structure/table,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint/supply) "bqD" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/checkpoint/supply) "bqE" = (/obj/machinery/computer/secure_data,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/checkpoint/supply) -"bqF" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = null; req_access_txt = "57"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/crew_quarters/heads) +"bqF" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = null; req_access_txt = "57"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/heads) "bqG" = (/obj/machinery/ai_status_display,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/turret_protected/ai_upload_foyer) "bqH" = (/obj/machinery/door/airlock/highsecurity{icon_state = "door_closed"; locked = 0; name = "AI Upload Access"; req_access_txt = "16"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "vault"},/area/turret_protected/ai_upload_foyer) "bqI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/turret_protected/ai_upload_foyer) @@ -6404,14 +6404,14 @@ "cth" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station) "cti" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/wizard_station) "ctj" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station) -"ctk" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"ctk" = (/obj/structure/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "ctl" = (/obj/machinery/door/poddoor{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "ctm" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2) "ctn" = (/obj/machinery/door/poddoor{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{name = "plating"},/area/tdome) "cto" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/tdome) "ctp" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/tdome) "ctq" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1) -"ctr" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) +"ctr" = (/obj/structure/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "cts" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "ctt" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "ctu" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) @@ -6813,7 +6813,7 @@ "cBa" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/djstation) "cBb" = (/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/djstation) "cBc" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; freerange = 1; listening = 0; name = "Pirate Radio Broadcast Channel"; pixel_x = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/djstation) -"cBd" = (/obj/structure/table,/obj/item/weapon/paper/djstation{info = "Welcome new owner!

You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
  1. Equip yourself with a multi-tool
  2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
  3. Turn all the machines on, it has already been configured for you to listen on.
Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
  • 145.7 - Common Channel
  • 144.7 - Private AI Channel
  • 135.9 - Security Channel
  • 135.7 - Engineering Channel
  • 135.5 - Medical Channel
  • 135.3 - Command Channel
  • 135.1 - Science Channel
  • 134.7 - Supply Channel
  • "},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/djstation) +"cBd" = (/obj/structure/table,/obj/item/weapon/paper/djstation,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/djstation) "cBe" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor{icon_state = "grimy"},/area/djstation) "cBf" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/djstation) "cBg" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "grimy"},/area/djstation) @@ -7986,6 +7986,7 @@ "cXD" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "cXE" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "cXF" = (/obj/machinery/conveyor{icon_state = "conveyor0"; dir = 10; id = "mining_internal"},/obj/machinery/mineral/input,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/production) +"cXG" = (/obj/machinery/telecomms/server/presets/service,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8151,14 +8152,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabOgbOhbOibOjbOkbOjbOlbOmbOnbOobOpbOqbOrbNpbOsbOtbOubOubOubOubOvbOwbOwbOxbOwbOybOwbOwbOwbOwbOzbOAbFYbKibOBbOCbODbIzbIzbIzbOEbOFbIzbIzbOGbOHbOIbIsbOJbOKbOLbOMbIsbONbOObOPbKzaafbKAbOQbORbOSbIBaafbsCbOTbGvbGvbGvbOUbHAbOVbNMbOWbOXbOYbOZbLKbPabPbbPcbNNbMWbLObDRbDRbDRbDRbPdbPebMZbPfbPdbDRbDRbDRbDRbwJbLXaZWaZWbPgaZWaZWbmJaZWaZWaZWaZWbPhaZWbObbOcbPibPjbPkbOcaafaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaabPlbPlbPlbPlbPlbPmbPnbPobPpbPpbPqbNpbMlbPrbPrbPrbPrbPrbPrbPrbPrbPsbPsbPtbPsbPsbPubyxbwcbPvbFYbKibOBbPwbPxbPybPzbLqbPAbPBbLqbLqbPCbPDbPEbPFbPGbPHbPIbPJbIsbONbPKbPLbPMbLzbJybPNbNFbNFbIBaafbPObPPbPPbPPbxDbHzbHAbPQbKKbIJbPRbPSbNIbPTbPSbPTbNIbNNbMWbLObLPbLQbLQbPUbLSbGEbLTbLUbPVbPWbxVbxVbxVbwJbLXbLYbPXbPXbPXbPXbPXbPXbPXbPXbPXbPYbPXbPZbOcbQabQbbQcbOcaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbQdbQebQfbQgbQfbQhbQibQjbQkbQlbQmbNpbMlbPrbQnbQobQpbQqbQrbQsbQnbQtbQubQvbQwbPsbPsbyxbwcbQxbFYbKibQybQzbQAbQBbQCbQDbQEbQFbQEbQGbQHbQIbHibHibHibQJbIsbOLbIsbONbOObQKbKzaafbIBbIBbIBbIBbIBaafaafaafaafaafbsCbHzbHAbQLbKKbQMbQNbPSbIJbQObPSbQObQPbNNbMWbLObxVbQQbxVbQRbMYbGEbMZbGEbNabQSbxVbQQbxVbwJbLXbQTaZWbQUbQVaZWaZWaZWbQUbQWbQWbQVaZWaZWbOcbQXbQYbQZbOcaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbQdbRabRbbRcbRdbPobRebPobRfbPobRgbRhbRibPrbQnbRjbRkbQnbRlbRmbQnbRnbRobRpbRqbRrbPsbyxbwcbPvbFYbKibRsbRtbGgbRubRvbGgbRwbRxbRybGgbRzbMzbRAbHibRBbPJbIsbPHbRCbRDbREbRFbNDbJxbJybRGbRHbRIbIBaafaaaaaaaaaaaabJCbHzbHAbRJbQObRKbRLbRMbMIbRNbRMbRNbMIbNNbMWbLObxVbxVbxVbRObRPbLUbNQbGEbNRbRQbLQbLQbNTbwJbLXbQTaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaabRRbRSbRTbRUbRVaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbQdbRWbRXbRYbRXbRZbSabSbbScbSdbSebNpbSfbPrbSgbSgbShbQnbSibSgbSgbRnbSjbSkbSlbSmbSnbSobSpbSqbSrbSsbStbSubSvbSwbSxbSybSzbSAbSBbGgbIsbMzbRAbSCbRBbSDbIsbPHbRCbONbOObSEbKzaafbKAbSFbSGbSHbIBaafaaaaaaaaaaaabKDbHzbHAbHAbSIbSJbHAbHAbHAbHAbHAbHAbHAbNNbMWbLObDRbDRbDRbDRbPdbSKbMZbSLbPdbDRbDRbDRbDRbwJbLXbSMaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafbSNbSObSNaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbQdbRabRbbRcbRdbPobRebPobRfbPobRgbRhbRibPrbQnbWobRkbQnbRlbRmbQnbRnbRobRpbRqbRrbPsbyxbwcbPvbFYbKibRsbRtbGgbRubRvbGgbRwbRxbRybGgbRzbMzbRAbHibRBbPJbIsbPHbRCbRDbREbRFbNDbJxbJybRGbRHbRIbIBaafaaaaaaaaaaaabJCbHzbHAbRJbQObRKbRLbRMbMIbRNbRMbRNbMIbNNbMWbLObxVbxVbxVbRObRPbLUbNQbGEbNRbRQbLQbLQbNTbwJbLXbQTaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaabRRbRSbRTbRUbRVaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbQdbRWbRXbRYbRXbRZbSabSbbScbSdbSebNpbSfbPrbSgbVBbShbQnbSibSgbSgbRnbSjbSkbSlbSmbSnbSobSpbSqbSrbSsbStbSubSvbSwbSxbSybSzbSAbSBbGgbIsbMzbRAbSCbRBbSDbIsbPHbRCbONbOObSEbKzaafbKAbSFbSGbSHbIBaafaaaaaaaaaaaabKDbHzbHAbHAbSIbSJbHAbHAbHAbHAbHAbHAbHAbNNbMWbLObDRbDRbDRbDRbPdbSKbMZbSLbPdbDRbDRbDRbDRbwJbLXbSMaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafbSNbSObSNaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbPlbPlbPlbPlbPlbNpbNpbNpbNpbNpbNpbNpbSPbPrbSgbSgbQnbQnbQnbSgbSQbSRbSSbSTbSUbSVbPsbyxbwcbSWbSXbSYbSZbTabTbbTcbTdbTebTfbTgbThbGgbTibTjbRAbHibRBbTkbIsbTlbRCbONbTmbTnbPMbLzbJybTobRHbRHbIBaafaaaaaaaaaaaabLBbHzbTpbHAbHAbTqbHAbTrbTsbTtbTpbTpbTpbTubMWbLObLPbLQbLQbTvbLSbGEbLTbLUbTwbTxbxVbxVbxVbwJbLXbTyaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafbTzbRTbTzaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafUafUafUafTafTafUafTafTafTagzafTafTafTafUafTaafaafaafbwcbDbbyxbyxbyxbyxbyxbyxbyxbyxbyxbMlbPrbTAbTBbTCbTDbQnbQnbTEbTFbTEbTGbRqbTHbPsbyxbTIbKhbFYbTJbTKbTLbTbbTMbTNbTObTPbTQbTRbTSbJobTTbHibHibHibTUbIsbTVbTWbONbOObIsbKzaafbIBbIBbIBbIBbIBaafaafaafaafaafbsCbOTbGvbGvbGvbTXbGvbGvbGvbGvbGvbGvbGvbTYbTZbLObxVbxVbxVbUabMYbGEbMZbGEbNabUbbxVbxVbxVbwJbLXbTyaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaabUcaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafUaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaafTaafaaaaaabwcbUdbUebwcbwcbUfbUgbwcbwcbwcbwcbMlbPrbUhbSgbQnbQnbQnbSgbSQbUibUjbUkbUlbUmbSnbSpbSpbUnbUobUpbTKbTKbUqbTcbUrbUsbUtbUubUvbGgbIsbIvbUwbUxbUybKsbUzbUAbUBbRDbUCbUDbNDbJxbJybUEbUFbUFbIBaafaaaaaaaaaaaabPObPPbPPbPPbPPbUGbUHbUHbUHbUHbUHbUHbUHbUIbUJbUKbxVbxVbxVbULbUMbUNbUObGEbNRbUPbLQbLQbNTbwJbLXbTyaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaafaaabUcaaaaafaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafUaaabUQbURbUSaaabUQbURbUSaaabUQbURbUSaafafTaaaaaaaaabwcbwcbwcbwcaaaaaaaaaaaaaaaaafbwcbMlbPrbSgbUTbUUbQnbUVbSgbSgbRnbUWbUkbRqbUXbPsbUYbUZbVabVbbVcbVdbVebVfbTcbVfbTbbTbbTcbVgbGgbVhbVibVjbLqbLqbLsbNwbVkbNAbLtbOObVlbKzaafbKAbVmbVnbVobIBaafaaaaaaaaaaaaaafaaaaaaaaabwkbVpbVqbVrbVsbVtbVqbVqbVubsCbVvbLObwJbwJbwJbwJbwJbwJbVwbwJbwJbwJbwJbwJbwJbwJbLXbVxaaaaaaaaaaaaaaaaaabVybVybVybVzaafaafaafaafbUcaafaafaafaafaafagzbVybVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafUaaabUQbVAbUSaaabUQbVAbUSaaabUQbVAbUSaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaabwcbwcbwcbwcbMlbPrbQnbVBbVCbQnbVDbVEbQnbRnbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObVPbVQbVRbVSbVTbTbbTbbTcbVUbGgbVVbIsbIvbNwbIzbVWbVXbVYbVZbHwbWabWbbPMbLzbJybWcbUFbUFbIBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabWdbTpbWeaaaaaaaafbFybWfbWgbWhbWhbWhbWhbWhbWhbWibWjbWjbWjbWjbWjbWjbWjbWkbQTaaaaaaaaaaaaaaaaaabVyaaaaafaaaaafaaaaaaaaabWlaaaaafaafaaaaaaaaaaaabVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaafTaafbUQbVAbUSaaabUQbVAbUSaafbUQbVAbUSaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaabWmbWnbWmbyxbMlbPrbQnbWobWpbWqbWrbWsbQnbWtbWubWvbWwbWxbPsbWybWzbWAbWBbWCbWDbWEbWFbWGbWHbWIbWJbWKbWLbGgbWMbKvbWNbWObIsbIsbIsbIybOIbWObOObQKbKzaafbIBbIBbIBbIBbIBaafaafaafaafaafaafaafaafaafaafaafaafbWPbVsbWQaaaaaaaafbFybWRbPXbWSbWTbWUbWUbPXbPXbPXbPXbWVbPXbPXbWWbWXbWYbWZbXaaaaaaaaaaaaaaaaaaabVyaaabXbbXbbXbbXbbXbaafbXcaafbXbbXbbXbbXbbXbaaabVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafUaaabUQbVAbUSaaabUQbVAbUSaaabUQbVAbUSaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaabwcbwcbwcbwcbMlbPrbQnbRjbVCbQnbVDbVEbQnbRnbVFbVGbVHbVIbVJbVKbVLbVMbVNbVObVPbVQbVRbVSbVTbTbbTbbTcbVUbGgbVVbIsbIvbNwbIzbVWbVXbVYbVZbHwbWabWbbPMbLzbJybWcbUFbUFbIBaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabWdbTpbWeaaaaaaaafbFybWfbWgbWhbWhbWhbWhbWhbWhbWibWjbWjbWjbWjbWjbWjbWjbWkbQTaaaaaaaaaaaaaaaaaabVyaaaaafaaaaafaaaaaaaaabWlaaaaafaafaaaaaaaaaaaabVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaafTaafbUQbVAbUSaaabUQbVAbUSaafbUQbVAbUSaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaabWmbWnbWmbyxbMlbPrbQncXGbWpbWqbWrbWsbQnbWtbWubWvbWwbWxbPsbWybWzbWAbWBbWCbWDbWEbWFbWGbWHbWIbWJbWKbWLbGgbWMbKvbWNbWObIsbIsbIsbIybOIbWObOObQKbKzaafbIBbIBbIBbIBbIBaafaafaafaafaafaafaafaafaafaafaafaafbWPbVsbWQaaaaaaaafbFybWRbPXbWSbWTbWUbWUbPXbPXbPXbPXbWVbPXbPXbWWbWXbWYbWZbXaaaaaaaaaaaaaaaaaaabVyaaabXbbXbbXbbXbbXbaafbXcaafbXbbXbbXbbXbbXbaaabVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabUQbVAbUSaafbUQbVAbUSaaabUQbVAbUSaaaaafaafaafaafaafaafaaaaafaaaaafaafbwcbwcbwcbyxbMlbPrbPrbPrbPrbPrbPrbPrbPrbPsbPsbPsbPsbPsbPsbwcbXdbwcbXebXfbXfbXfbXgbXhbXibXfbXjbXkbXlbXmbXnbXobLvbXpbXqbXrbXqbXpbXsbXpbXtbNwbXuaafaafaafaafaafaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafbFybXvbQUbQWbQWbQVaZWbQUbQWbQWbQVaZWbQUbQWbQWbQVaZWaZWaZWaaaaaaaaaaaaaaaaaabVyaafbXwbXxbXxbXxbXxbXybXcbXzbXAbXAbXAbXAbXBaafbVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafUafUafTaafaaabUQbVAbUSaafbUQbVAbUSaaabUQbVAbUSaafaafaaaaaaaaaaaaaafaafbXCbXDbXDbXDbXDbXEbyxbyxbMlbwcbXFbKXbXGbXGbXGbXGbXGbXGbXGbXGbXGbXHbXHbXGbXIbXJbXebXKbXLbXMbXNbXObXPbXfbXQbXRbXSbGgbXTbXUbXVbXWbXXbXYbXZbYabIsbYbbYcbYdbIuaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbYebYfaaaaafaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaabVyaafbYgbYgbYgbYgbYgaaabXcaaabYgbYgbYgbYgbYgaafbVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafUaaaaafaaaaafaafbYhaafaafaafbYhaafaaaaafbYhaafaaaaafaaaaaaaaaaaabYibYjbYkbYlbYmbYnbYobYpbYqbYqbYrbwcbYsbYtbYubYubYubYubYubYubYubYubYubYubYubYubYvbYwbYxbYybYzbYAbYBbYCbYDbYEbYFbYGbYHbYIbYJbYKbYLbYMbYLbYKbYLbYMbYLbYNbYLbYNbYOaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYPbYfaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaabVyaaaaafaaaaafaafaafaaabXcaaaaafaaaaafaaaaafaaabVyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/tgstation.dme b/tgstation.dme index ef333c34664..8311ec579d4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -220,6 +220,7 @@ #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" #include "code\game\gamemodes\revolution\revolution.dm" +#include "code\game\gamemodes\sandbox\airlock_maker.dm" #include "code\game\gamemodes\sandbox\h_sandbox.dm" #include "code\game\gamemodes\sandbox\sandbox.dm" #include "code\game\gamemodes\traitor\traitor.dm" @@ -1113,8 +1114,4 @@ #include "interface\interface.dm" #include "interface\skin.dmf" #include "maps\tgstation.2.1.2.dmm" -#include "maps\RandomZLevels\Academy.dm" -#include "maps\RandomZLevels\challenge.dm" -#include "maps\RandomZLevels\stationCollision.dm" -#include "maps\RandomZLevels\wildwest.dm" // END_INCLUDE