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.
| " + if(i<=leftcolumn.len) + dat += leftcolumn[i] + dat += " | " + if(i<=rightcolumn.len) + dat += rightcolumn[i] + 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 += " 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:
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:
+
+
+
28 May 2013Petethegoat updated:11 May 2013@@ -65,6 +66,13 @@ should be listed in the changelog upon commit tho. Thanks. -->
+
7 May 2013+Ikarrus updated:+
5 May 2013@@ -74,9 +82,6 @@ should be listed in the changelog upon commit tho. Thanks. -->2 May 2013Malkevin updated:@@ -87,8 +92,13 @@ should be listed in the changelog upon commit tho. Thanks. -->
+
30 April 2013+Ikarrus updated:+
24 April 2013diff --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: |