From 470cb0a588770ea263802678bac3ac53f0e490fe Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Thu, 24 Oct 2019 18:38:39 -0700 Subject: [PATCH 01/21] Merge pull request #9587 from Ghommie/Ghommie-cit258 Porting components updates and fixing phantom thief component. --- code/controllers/subsystem/vis_overlays.dm | 4 +- code/datums/components/_component.dm | 633 +++++---- code/datums/components/earprotection.dm | 2 +- code/datums/components/mood.dm | 2 - code/datums/components/orbiter.dm | 13 +- code/datums/components/phantomthief.dm | 39 + code/datums/components/signal_redirect.dm | 33 - code/datums/components/wearertargeting.dm | 10 +- code/datums/components/wet_floor.dm | 412 +++--- code/datums/status_effects/gas.dm | 6 +- code/game/objects/effects/proximity.dm | 224 ++-- code/game/objects/items/RCL.dm | 22 +- code/game/objects/items/defib.dm | 30 +- .../objects/items/devices/geiger_counter.dm | 16 +- code/game/objects/items/his_grace.dm | 2 +- code/game/objects/items/storage/bags.dm | 881 ++++++------- code/game/objects/items/twohanded.dm | 15 +- .../antagonists/disease/disease_mob.dm | 13 +- .../antagonists/revenant/revenant_blight.dm | 7 +- code/modules/assembly/infrared.dm | 474 +++---- code/modules/clothing/gloves/_gloves.dm | 86 +- code/modules/clothing/shoes/_shoes.dm | 226 ++-- code/modules/clothing/spacesuits/hardsuit.dm | 25 +- code/modules/fields/fields.dm | 14 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../projectiles/guns/misc/beam_rifle.dm | 1137 +++++++++-------- .../crossbreeding/_status_effects.dm | 13 +- .../research/xenobiology/xenobio_camera.dm | 4 +- code/modules/unit_tests/_unit_tests.dm | 26 +- code/modules/unit_tests/component_tests.dm | 12 + .../code/datums/components/phantomthief.dm | 49 - .../code/datums/status_effects/chems.dm | 6 +- .../modules/clothing/glasses/phantomthief.dm | 17 +- tgstation.dme | 3 +- 34 files changed, 2205 insertions(+), 2253 deletions(-) create mode 100644 code/datums/components/phantomthief.dm delete mode 100644 code/datums/components/signal_redirect.dm create mode 100644 code/modules/unit_tests/component_tests.dm delete mode 100644 modular_citadel/code/datums/components/phantomthief.dm diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm index 07c786b1..fe433c3e 100644 --- a/code/controllers/subsystem/vis_overlays.dm +++ b/code/controllers/subsystem/vis_overlays.dm @@ -7,12 +7,10 @@ SUBSYSTEM_DEF(vis_overlays) var/list/vis_overlay_cache var/list/unique_vis_overlays var/list/currentrun - var/datum/callback/rotate_cb /datum/controller/subsystem/vis_overlays/Initialize() vis_overlay_cache = list() unique_vis_overlays = list() - rotate_cb = CALLBACK(src, .proc/rotate_vis_overlay) return ..() /datum/controller/subsystem/vis_overlays/fire(resumed = FALSE) @@ -57,7 +55,7 @@ SUBSYSTEM_DEF(vis_overlays) if(!thing.managed_vis_overlays) thing.managed_vis_overlays = list(overlay) - RegisterSignal(thing, COMSIG_ATOM_DIR_CHANGE, rotate_cb) + RegisterSignal(thing, COMSIG_ATOM_DIR_CHANGE, .proc/rotate_vis_overlay) else thing.managed_vis_overlays += overlay diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index ab0f7584..6c74f973 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -1,318 +1,315 @@ -/datum/component - var/dupe_mode = COMPONENT_DUPE_HIGHLANDER - var/dupe_type - var/datum/parent - //only set to true if you are able to properly transfer this component - //At a minimum RegisterWithParent and UnregisterFromParent should be used - //Make sure you also implement PostTransfer for any post transfer handling - var/can_transfer = FALSE - -/datum/component/New(datum/P, ...) - parent = P - var/list/arguments = args.Copy(2) - if(Initialize(arglist(arguments)) == COMPONENT_INCOMPATIBLE) - qdel(src, TRUE, TRUE) - CRASH("Incompatible [type] assigned to a [P.type]! args: [json_encode(arguments)]") - - _JoinParent(P) - -/datum/component/proc/_JoinParent() - var/datum/P = parent - //lazy init the parent's dc list - var/list/dc = P.datum_components - if(!dc) - P.datum_components = dc = list() - - //set up the typecache - var/our_type = type - for(var/I in _GetInverseTypeList(our_type)) - var/test = dc[I] - if(test) //already another component of this type here - var/list/components_of_type - if(!length(test)) - components_of_type = list(test) - dc[I] = components_of_type - else - components_of_type = test - if(I == our_type) //exact match, take priority - var/inserted = FALSE - for(var/J in 1 to components_of_type.len) - var/datum/component/C = components_of_type[J] - if(C.type != our_type) //but not over other exact matches - components_of_type.Insert(J, I) - inserted = TRUE - break - if(!inserted) - components_of_type += src - else //indirect match, back of the line with ya - components_of_type += src - else //only component of this type, no list - dc[I] = src - - RegisterWithParent() - -// If you want/expect to be moving the component around between parents, use this to register on the parent for signals -/datum/component/proc/RegisterWithParent() - return - -/datum/component/proc/Initialize(...) - return - -/datum/component/Destroy(force=FALSE, silent=FALSE) - if(!force && parent) - _RemoveFromParent() - if(!silent) - SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src) - parent = null - return ..() - -/datum/component/proc/_RemoveFromParent() - var/datum/P = parent - var/list/dc = P.datum_components - for(var/I in _GetInverseTypeList()) - var/list/components_of_type = dc[I] - if(length(components_of_type)) // - var/list/subtracted = components_of_type - src - if(subtracted.len == 1) //only 1 guy left - dc[I] = subtracted[1] //make him special - else - dc[I] = subtracted - else //just us - dc -= I - if(!dc.len) - P.datum_components = null - - UnregisterFromParent() - -/datum/component/proc/UnregisterFromParent() - return - -/datum/proc/RegisterSignal(datum/target, sig_type_or_types, proc_or_callback, override = FALSE) - if(QDELETED(src) || QDELETED(target)) - return - - var/list/procs = signal_procs - if(!procs) - signal_procs = procs = list() - if(!procs[target]) - procs[target] = list() - var/list/lookup = target.comp_lookup - if(!lookup) - target.comp_lookup = lookup = list() - - if(!istype(proc_or_callback, /datum/callback)) //if it wasnt a callback before, it is now - proc_or_callback = CALLBACK(src, proc_or_callback) - - var/list/sig_types = islist(sig_type_or_types) ? sig_type_or_types : list(sig_type_or_types) - for(var/sig_type in sig_types) - if(!override && procs[target][sig_type]) - stack_trace("[sig_type] overridden. Use override = TRUE to suppress this warning") - - procs[target][sig_type] = proc_or_callback - - if(!lookup[sig_type]) // Nothing has registered here yet - lookup[sig_type] = src - else if(lookup[sig_type] == src) // We already registered here - continue - else if(!length(lookup[sig_type])) // One other thing registered here - lookup[sig_type] = list(lookup[sig_type]=TRUE) - lookup[sig_type][src] = TRUE - else // Many other things have registered here - lookup[sig_type][src] = TRUE - - signal_enabled = TRUE - -/datum/proc/UnregisterSignal(datum/target, sig_type_or_types) - if(!target) - CRASH("[src] tried to unregister a signal without having a target.") - var/list/lookup = target.comp_lookup - if(!signal_procs || !signal_procs[target] || !lookup) - return - if(!islist(sig_type_or_types)) - sig_type_or_types = list(sig_type_or_types) - for(var/sig in sig_type_or_types) - switch(length(lookup[sig])) - if(2) - lookup[sig] = (lookup[sig]-src)[1] - if(1) - stack_trace("[target] ([target.type]) somehow has single length list inside comp_lookup") - if(src in lookup[sig]) - lookup -= sig - if(!length(lookup)) - target.comp_lookup = null - break - if(0) - lookup -= sig - if(!length(lookup)) - target.comp_lookup = null - break - else - lookup[sig] -= src - - signal_procs[target] -= sig_type_or_types - if(!signal_procs[target].len) - signal_procs -= target - -/datum/component/proc/InheritComponent(datum/component/C, i_am_original) - return - -/datum/component/proc/PreTransfer() - return - -/datum/component/proc/PostTransfer() - return COMPONENT_INCOMPATIBLE //Do not support transfer by default as you must properly support it - -/datum/component/proc/_GetInverseTypeList(our_type = type) - //we can do this one simple trick - var/current_type = parent_type - . = list(our_type, current_type) - //and since most components are root level + 1, this won't even have to run - while (current_type != /datum/component) - current_type = type2parent(current_type) - . += current_type - -/datum/proc/_SendSignal(sigtype, list/arguments) - var/target = comp_lookup[sigtype] - if(!length(target)) - var/datum/C = target - if(!C.signal_enabled) - return NONE - var/datum/callback/CB = C.signal_procs[src][sigtype] - return CB.InvokeAsync(arglist(arguments)) - . = NONE - for(var/I in target) - var/datum/C = I - if(!C.signal_enabled) - continue - var/datum/callback/CB = C.signal_procs[src][sigtype] - . |= CB.InvokeAsync(arglist(arguments)) - -/datum/proc/GetComponent(c_type) - var/list/dc = datum_components - if(!dc) - return null - . = dc[c_type] - if(length(.)) - return .[1] - -/datum/proc/GetExactComponent(c_type) - var/list/dc = datum_components - if(!dc) - return null - var/datum/component/C = dc[c_type] - if(C) - if(length(C)) - C = C[1] - if(C.type == c_type) - return C - return null - -/datum/proc/GetComponents(c_type) - var/list/dc = datum_components - if(!dc) - return null - . = dc[c_type] - if(!length(.)) - return list(.) - -/datum/proc/AddComponent(new_type, ...) - var/datum/component/nt = new_type - var/dm = initial(nt.dupe_mode) - var/dt = initial(nt.dupe_type) - - var/datum/component/old_comp - var/datum/component/new_comp - - if(ispath(nt)) - if(nt == /datum/component) - CRASH("[nt] attempted instantiation!") - if(!isnum(dm)) - CRASH("[nt]: Invalid dupe_mode ([dm])!") - if(dt && !ispath(dt)) - CRASH("[nt]: Invalid dupe_type ([dt])!") - else - new_comp = nt - nt = new_comp.type - - args[1] = src - - if(dm != COMPONENT_DUPE_ALLOWED) - if(!dt) - old_comp = GetExactComponent(nt) - else - old_comp = GetComponent(dt) - if(old_comp) - switch(dm) - if(COMPONENT_DUPE_UNIQUE) - if(!new_comp) - new_comp = new nt(arglist(args)) - if(!QDELETED(new_comp)) - old_comp.InheritComponent(new_comp, TRUE) - QDEL_NULL(new_comp) - if(COMPONENT_DUPE_HIGHLANDER) - if(!new_comp) - new_comp = new nt(arglist(args)) - if(!QDELETED(new_comp)) - new_comp.InheritComponent(old_comp, FALSE) - QDEL_NULL(old_comp) - if(COMPONENT_DUPE_UNIQUE_PASSARGS) - if(!new_comp) - var/list/arguments = args.Copy(2) - old_comp.InheritComponent(null, TRUE, arguments) - else - old_comp.InheritComponent(new_comp, TRUE) - else if(!new_comp) - new_comp = new nt(arglist(args)) // There's a valid dupe mode but there's no old component, act like normal - else if(!new_comp) - new_comp = new nt(arglist(args)) // Dupes are allowed, act like normal - - if(!old_comp && !QDELETED(new_comp)) // Nothing related to duplicate components happened and the new component is healthy - SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_comp) - return new_comp - return old_comp - -/datum/proc/LoadComponent(component_type, ...) - . = GetComponent(component_type) - if(!.) - return AddComponent(arglist(args)) - -/datum/component/proc/RemoveComponent() - if(!parent) - return - var/datum/old_parent = parent - PreTransfer() - _RemoveFromParent() - parent = null - SEND_SIGNAL(old_parent, COMSIG_COMPONENT_REMOVING, src) - -/datum/proc/TakeComponent(datum/component/target) - if(!target || target.parent == src) - return - if(target.parent) - target.RemoveComponent() - target.parent = src - var/result = target.PostTransfer() - switch(result) - if(COMPONENT_INCOMPATIBLE) - var/c_type = target.type - qdel(target) - CRASH("Incompatible [c_type] transfer attempt to a [type]!") - if(target == AddComponent(target)) - target._JoinParent() - -/datum/proc/TransferComponents(datum/target) - var/list/dc = datum_components - if(!dc) - return - var/comps = dc[/datum/component] - if(islist(comps)) - for(var/datum/component/I in comps) - if(I.can_transfer) - target.TakeComponent(I) - else - var/datum/component/C = comps - if(C.can_transfer) - target.TakeComponent(comps) - -/datum/component/ui_host() - return parent +/datum/component + var/dupe_mode = COMPONENT_DUPE_HIGHLANDER + var/dupe_type + var/datum/parent + //only set to true if you are able to properly transfer this component + //At a minimum RegisterWithParent and UnregisterFromParent should be used + //Make sure you also implement PostTransfer for any post transfer handling + var/can_transfer = FALSE + +/datum/component/New(datum/P, ...) + parent = P + var/list/arguments = args.Copy(2) + if(Initialize(arglist(arguments)) == COMPONENT_INCOMPATIBLE) + qdel(src, TRUE, TRUE) + CRASH("Incompatible [type] assigned to a [P.type]! args: [json_encode(arguments)]") + + _JoinParent(P) + +/datum/component/proc/_JoinParent() + var/datum/P = parent + //lazy init the parent's dc list + var/list/dc = P.datum_components + if(!dc) + P.datum_components = dc = list() + + //set up the typecache + var/our_type = type + for(var/I in _GetInverseTypeList(our_type)) + var/test = dc[I] + if(test) //already another component of this type here + var/list/components_of_type + if(!length(test)) + components_of_type = list(test) + dc[I] = components_of_type + else + components_of_type = test + if(I == our_type) //exact match, take priority + var/inserted = FALSE + for(var/J in 1 to components_of_type.len) + var/datum/component/C = components_of_type[J] + if(C.type != our_type) //but not over other exact matches + components_of_type.Insert(J, I) + inserted = TRUE + break + if(!inserted) + components_of_type += src + else //indirect match, back of the line with ya + components_of_type += src + else //only component of this type, no list + dc[I] = src + + RegisterWithParent() + +// If you want/expect to be moving the component around between parents, use this to register on the parent for signals +/datum/component/proc/RegisterWithParent() + return + +/datum/component/proc/Initialize(...) + return + +/datum/component/Destroy(force=FALSE, silent=FALSE) + if(!force && parent) + _RemoveFromParent() + if(!silent) + SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src) + parent = null + return ..() + +/datum/component/proc/_RemoveFromParent() + var/datum/P = parent + var/list/dc = P.datum_components + for(var/I in _GetInverseTypeList()) + var/list/components_of_type = dc[I] + if(length(components_of_type)) // + var/list/subtracted = components_of_type - src + if(subtracted.len == 1) //only 1 guy left + dc[I] = subtracted[1] //make him special + else + dc[I] = subtracted + else //just us + dc -= I + if(!dc.len) + P.datum_components = null + + UnregisterFromParent() + +/datum/component/proc/UnregisterFromParent() + return + +/datum/proc/RegisterSignal(datum/target, sig_type_or_types, proctype, override = FALSE) + if(QDELETED(src) || QDELETED(target)) + return + + var/list/procs = signal_procs + if(!procs) + signal_procs = procs = list() + if(!procs[target]) + procs[target] = list() + var/list/lookup = target.comp_lookup + if(!lookup) + target.comp_lookup = lookup = list() + + var/list/sig_types = islist(sig_type_or_types) ? sig_type_or_types : list(sig_type_or_types) + for(var/sig_type in sig_types) + if(!override && procs[target][sig_type]) + stack_trace("[sig_type] overridden. Use override = TRUE to suppress this warning") + + procs[target][sig_type] = proctype + + if(!lookup[sig_type]) // Nothing has registered here yet + lookup[sig_type] = src + else if(lookup[sig_type] == src) // We already registered here + continue + else if(!length(lookup[sig_type])) // One other thing registered here + lookup[sig_type] = list(lookup[sig_type]=TRUE) + lookup[sig_type][src] = TRUE + else // Many other things have registered here + lookup[sig_type][src] = TRUE + + signal_enabled = TRUE + +/datum/proc/UnregisterSignal(datum/target, sig_type_or_types) + if(!target) + CRASH("[src] tried to unregister a signal without having a target.") + var/list/lookup = target.comp_lookup + if(!signal_procs || !signal_procs[target] || !lookup) + return + if(!islist(sig_type_or_types)) + sig_type_or_types = list(sig_type_or_types) + for(var/sig in sig_type_or_types) + switch(length(lookup[sig])) + if(2) + lookup[sig] = (lookup[sig]-src)[1] + if(1) + stack_trace("[target] ([target.type]) somehow has single length list inside comp_lookup") + if(src in lookup[sig]) + lookup -= sig + if(!length(lookup)) + target.comp_lookup = null + break + if(0) + lookup -= sig + if(!length(lookup)) + target.comp_lookup = null + break + else + lookup[sig] -= src + + signal_procs[target] -= sig_type_or_types + if(!signal_procs[target].len) + signal_procs -= target + +/datum/component/proc/InheritComponent(datum/component/C, i_am_original) + return + +/datum/component/proc/PreTransfer() + return + +/datum/component/proc/PostTransfer() + return COMPONENT_INCOMPATIBLE //Do not support transfer by default as you must properly support it + +/datum/component/proc/_GetInverseTypeList(our_type = type) + //we can do this one simple trick + var/current_type = parent_type + . = list(our_type, current_type) + //and since most components are root level + 1, this won't even have to run + while (current_type != /datum/component) + current_type = type2parent(current_type) + . += current_type + +/datum/proc/_SendSignal(sigtype, list/arguments) + var/target = comp_lookup[sigtype] + if(!length(target)) + var/datum/C = target + if(!C.signal_enabled) + return NONE + var/proctype = C.signal_procs[src][sigtype] + return NONE | CallAsync(C, proctype, arguments) + . = NONE + for(var/I in target) + var/datum/C = I + if(!C.signal_enabled) + continue + var/proctype = C.signal_procs[src][sigtype] + . |= CallAsync(C, proctype, arguments) + +// The type arg is casted so initial works, you shouldn't be passing a real instance into this +/datum/proc/GetComponent(datum/component/c_type) + if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED) + stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]") + var/list/dc = datum_components + if(!dc) + return null + . = dc[c_type] + if(length(.)) + return .[1] + +/datum/proc/GetExactComponent(c_type) + var/list/dc = datum_components + if(!dc) + return null + var/datum/component/C = dc[c_type] + if(C) + if(length(C)) + C = C[1] + if(C.type == c_type) + return C + return null + +/datum/proc/GetComponents(c_type) + var/list/dc = datum_components + if(!dc) + return null + . = dc[c_type] + if(!length(.)) + return list(.) + +/datum/proc/AddComponent(new_type, ...) + var/datum/component/nt = new_type + var/dm = initial(nt.dupe_mode) + var/dt = initial(nt.dupe_type) + + var/datum/component/old_comp + var/datum/component/new_comp + + if(ispath(nt)) + if(nt == /datum/component) + CRASH("[nt] attempted instantiation!") + else + new_comp = nt + nt = new_comp.type + + args[1] = src + + if(dm != COMPONENT_DUPE_ALLOWED) + if(!dt) + old_comp = GetExactComponent(nt) + else + old_comp = GetComponent(dt) + if(old_comp) + switch(dm) + if(COMPONENT_DUPE_UNIQUE) + if(!new_comp) + new_comp = new nt(arglist(args)) + if(!QDELETED(new_comp)) + old_comp.InheritComponent(new_comp, TRUE) + QDEL_NULL(new_comp) + if(COMPONENT_DUPE_HIGHLANDER) + if(!new_comp) + new_comp = new nt(arglist(args)) + if(!QDELETED(new_comp)) + new_comp.InheritComponent(old_comp, FALSE) + QDEL_NULL(old_comp) + if(COMPONENT_DUPE_UNIQUE_PASSARGS) + if(!new_comp) + var/list/arguments = args.Copy(2) + old_comp.InheritComponent(null, TRUE, arguments) + else + old_comp.InheritComponent(new_comp, TRUE) + else if(!new_comp) + new_comp = new nt(arglist(args)) // There's a valid dupe mode but there's no old component, act like normal + else if(!new_comp) + new_comp = new nt(arglist(args)) // Dupes are allowed, act like normal + + if(!old_comp && !QDELETED(new_comp)) // Nothing related to duplicate components happened and the new component is healthy + SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_comp) + return new_comp + return old_comp + +/datum/proc/LoadComponent(component_type, ...) + . = GetComponent(component_type) + if(!.) + return AddComponent(arglist(args)) + +/datum/component/proc/RemoveComponent() + if(!parent) + return + var/datum/old_parent = parent + PreTransfer() + _RemoveFromParent() + parent = null + SEND_SIGNAL(old_parent, COMSIG_COMPONENT_REMOVING, src) + +/datum/proc/TakeComponent(datum/component/target) + if(!target || target.parent == src) + return + if(target.parent) + target.RemoveComponent() + target.parent = src + var/result = target.PostTransfer() + switch(result) + if(COMPONENT_INCOMPATIBLE) + var/c_type = target.type + qdel(target) + CRASH("Incompatible [c_type] transfer attempt to a [type]!") + + if(target == AddComponent(target)) + target._JoinParent() + +/datum/proc/TransferComponents(datum/target) + var/list/dc = datum_components + if(!dc) + return + var/comps = dc[/datum/component] + if(islist(comps)) + for(var/datum/component/I in comps) + if(I.can_transfer) + target.TakeComponent(I) + else + var/datum/component/C = comps + if(C.can_transfer) + target.TakeComponent(comps) + +/datum/component/ui_host() + return parent diff --git a/code/datums/components/earprotection.dm b/code/datums/components/earprotection.dm index 20849437..9256c431 100644 --- a/code/datums/components/earprotection.dm +++ b/code/datums/components/earprotection.dm @@ -1,11 +1,11 @@ /datum/component/wearertargeting/earprotection signals = list(COMSIG_CARBON_SOUNDBANG) mobtype = /mob/living/carbon + proctype = .proc/reducebang /datum/component/wearertargeting/earprotection/Initialize(_valid_slots) . = ..() valid_slots = _valid_slots - callback = CALLBACK(src, .proc/reducebang) /datum/component/wearertargeting/earprotection/proc/reducebang(datum/source, list/reflist) reflist[1]-- diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 43d13380..7297e8b7 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -261,8 +261,6 @@ if(the_event.timeout) addtimer(CALLBACK(src, .proc/clear_event, null, category), the_event.timeout, TIMER_UNIQUE|TIMER_OVERRIDE) - return the_event - /datum/component/mood/proc/clear_event(datum/source, category) var/datum/mood_event/event = mood_events[category] if(!event) diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm index a9d2c73b..b23fe362 100644 --- a/code/datums/components/orbiter.dm +++ b/code/datums/components/orbiter.dm @@ -1,8 +1,7 @@ /datum/component/orbiter + can_transfer = TRUE dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS var/list/orbiters - var/datum/callback/orbiter_spy - var/datum/callback/orbited_spy //radius: range to orbit at, radius of the circle formed by orbiting (in pixels) //clockwise: whether you orbit clockwise or anti clockwise @@ -14,8 +13,6 @@ return COMPONENT_INCOMPATIBLE orbiters = list() - orbiter_spy = CALLBACK(src, .proc/orbiter_move_react) - orbited_spy = CALLBACK(src, .proc/move_react) var/atom/master = parent master.orbiters = src @@ -25,7 +22,7 @@ /datum/component/orbiter/RegisterWithParent() var/atom/target = parent while(ismovableatom(target)) - RegisterSignal(target, COMSIG_MOVABLE_MOVED, orbited_spy) + RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react) target = target.loc RegisterSignal(parent, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, .proc/orbiter_glide_size_update) @@ -44,8 +41,6 @@ for(var/i in orbiters) end_orbit(i) orbiters = null - QDEL_NULL(orbiter_spy) - QDEL_NULL(orbited_spy) return ..() /datum/component/orbiter/InheritComponent(datum/component/orbiter/newcomp, original, list/arguments) @@ -69,7 +64,7 @@ orbiter.orbiting.end_orbit(orbiter) orbiters[orbiter] = TRUE orbiter.orbiting = src - RegisterSignal(orbiter, COMSIG_MOVABLE_MOVED, orbiter_spy) + RegisterSignal(orbiter, COMSIG_MOVABLE_MOVED, .proc/orbiter_move_react) var/matrix/initial_transform = matrix(orbiter.transform) orbiters[orbiter] = initial_transform @@ -137,7 +132,7 @@ if(orbited?.loc && orbited.loc != newturf) // We want to know when anything holding us moves too var/atom/target = orbited.loc while(ismovableatom(target)) - RegisterSignal(target, COMSIG_MOVABLE_MOVED, orbited_spy, TRUE) + RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react, TRUE) target = target.loc var/atom/curloc = master.loc diff --git a/code/datums/components/phantomthief.dm b/code/datums/components/phantomthief.dm new file mode 100644 index 00000000..ff1c4893 --- /dev/null +++ b/code/datums/components/phantomthief.dm @@ -0,0 +1,39 @@ +//This component applies a customizable drop_shadow filter to its wearer when they toggle combat mode on or off. This can stack. + +/datum/component/wearertargeting/phantomthief + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + signals = list(COMSIG_COMBAT_TOGGLED) + proctype = .proc/handlefilterstuff + var/filter_x + var/filter_y + var/filter_size + var/filter_border + var/filter_color + +/datum/component/wearertargeting/phantomthief/Initialize(_x = -2, _y = 0, _size = 0, _border = 0, _color = "#E62111", list/_valid_slots = list(SLOT_GLASSES)) + . = ..() + if(. == COMPONENT_INCOMPATIBLE) + return + filter_x = _x + filter_y = _y + filter_size = _size + filter_border = _border + filter_color = _color + valid_slots = _valid_slots + +/datum/component/wearertargeting/phantomthief/proc/handlefilterstuff(datum/source, mob/user, combatmodestate) + if(istype(user)) + var/thefilter = filter(type = "drop_shadow", x = filter_x, y = filter_y, size = filter_size, border = filter_border, color = filter_color) + if(!combatmodestate) + user.filters -= thefilter + else + user.filters += thefilter + +/datum/component/wearertargeting/phantomthief/proc/stripdesiredfilter(mob/user) + if(istype(user)) + var/thefilter = filter(type = "drop_shadow", x = filter_x, y = filter_y, size = filter_size, border = filter_border, color = filter_color) + user.filters -= thefilter + +/datum/component/wearertargeting/phantomthief/on_drop(datum/source, mob/user) + . = ..() + stripdesiredfilter(user) diff --git a/code/datums/components/signal_redirect.dm b/code/datums/components/signal_redirect.dm deleted file mode 100644 index db98d566..00000000 --- a/code/datums/components/signal_redirect.dm +++ /dev/null @@ -1,33 +0,0 @@ -// This should only be used by non components trying to listen to a signal -// If you use this inside a component I will replace your eyes with lemons ~ninjanomnom - -/datum/component/redirect - dupe_mode = COMPONENT_DUPE_ALLOWED - var/list/signals - var/datum/callback/turfchangeCB - -/datum/component/redirect/Initialize(list/_signals, flags=NONE) - //It's not our job to verify the right signals are registered here, just do it. - if(!LAZYLEN(_signals)) - return COMPONENT_INCOMPATIBLE - if(flags & REDIRECT_TRANSFER_WITH_TURF && isturf(parent)) - // If they also want to listen to the turf change then we need to set it up so both callbacks run - if(_signals[COMSIG_TURF_CHANGE]) - turfchangeCB = _signals[COMSIG_TURF_CHANGE] - if(!istype(turfchangeCB)) - . = COMPONENT_INCOMPATIBLE - CRASH("Redirect components must be given instanced callbacks, not proc paths.") - _signals[COMSIG_TURF_CHANGE] = CALLBACK(src, .proc/turf_change) - - signals = _signals - -/datum/component/redirect/RegisterWithParent() - for(var/signal in signals) - RegisterSignal(parent, signal, signals[signal]) - -/datum/component/redirect/UnregisterFromParent() - UnregisterSignal(parent, signals) - -/datum/component/redirect/proc/turf_change(datum/source, path, new_baseturfs, flags, list/transfers) - transfers += src - return turfchangeCB?.InvokeAsync(arglist(args)) diff --git a/code/datums/components/wearertargeting.dm b/code/datums/components/wearertargeting.dm index 0aa08311..feaa88f9 100644 --- a/code/datums/components/wearertargeting.dm +++ b/code/datums/components/wearertargeting.dm @@ -3,7 +3,7 @@ /datum/component/wearertargeting var/list/valid_slots = list() var/list/signals = list() - var/datum/callback/callback = CALLBACK(GLOBAL_PROC, .proc/pass) + var/proctype = .proc/pass var/mobtype = /mob/living /datum/component/wearertargeting/Initialize() @@ -14,13 +14,9 @@ /datum/component/wearertargeting/proc/on_equip(datum/source, mob/equipper, slot) if((slot in valid_slots) && istype(equipper, mobtype)) - RegisterSignal(equipper, signals, callback, TRUE) + RegisterSignal(equipper, signals, proctype, TRUE) else UnregisterSignal(equipper, signals) /datum/component/wearertargeting/proc/on_drop(datum/source, mob/user) - UnregisterSignal(user, signals) - -/datum/component/wearertargeting/Destroy() - QDEL_NULL(callback) //is likely to ourselves. - return ..() \ No newline at end of file + UnregisterSignal(user, signals) \ No newline at end of file diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm index 526d482e..84b03203 100644 --- a/code/datums/components/wet_floor.dm +++ b/code/datums/components/wet_floor.dm @@ -1,206 +1,206 @@ -/datum/component/wet_floor - dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS - can_transfer = TRUE - var/highest_strength = TURF_DRY - var/lube_flags = NONE //why do we have this? - var/list/time_left_list //In deciseconds. - var/static/mutable_appearance/permafrost_overlay = mutable_appearance('icons/effects/water.dmi', "ice_floor") - var/static/mutable_appearance/ice_overlay = mutable_appearance('icons/turf/overlays.dmi', "snowfloor") - var/static/mutable_appearance/water_overlay = mutable_appearance('icons/effects/water.dmi', "wet_floor_static") - var/static/mutable_appearance/generic_turf_overlay = mutable_appearance('icons/effects/water.dmi', "wet_static") - var/current_overlay - var/permanent = FALSE - var/last_process = 0 - -/datum/component/wet_floor/InheritComponent(datum/newcomp, orig, argslist) - if(!newcomp) //We are getting passed the arguments of a would-be new component, but not a new component - add_wet(arglist(argslist)) - else //We are being passed in a full blown component - var/datum/component/wet_floor/WF = newcomp //Lets make an assumption - if(WF.gc()) //See if it's even valid, still. Also does LAZYLEN and stuff for us. - CRASH("Wet floor component tried to inherit another, but the other was able to garbage collect while being inherited! What a waste of time!") - return - for(var/i in WF.time_left_list) - add_wet(text2num(i), WF.time_left_list[i]) - -/datum/component/wet_floor/Initialize(strength, duration_minimum, duration_add, duration_maximum, _permanent = FALSE) - if(!isopenturf(parent)) - return COMPONENT_INCOMPATIBLE - add_wet(strength, duration_minimum, duration_add, duration_maximum) - permanent = _permanent - if(!permanent) - START_PROCESSING(SSwet_floors, src) - addtimer(CALLBACK(src, .proc/gc, TRUE), 1) //GC after initialization. - last_process = world.time - -/datum/component/wet_floor/RegisterWithParent() - RegisterSignal(parent, COMSIG_TURF_IS_WET, .proc/is_wet) - RegisterSignal(parent, COMSIG_TURF_MAKE_DRY, .proc/dry) - -/datum/component/wet_floor/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_TURF_IS_WET, COMSIG_TURF_MAKE_DRY)) - -/datum/component/wet_floor/Destroy() - STOP_PROCESSING(SSwet_floors, src) - var/turf/T = parent - qdel(T.GetComponent(/datum/component/slippery)) - if(istype(T)) //If this is false there is so many things wrong with it. - T.cut_overlay(current_overlay) - else - stack_trace("Warning: Wet floor component wasn't on a turf when being destroyed! This is really bad!") - return ..() - -/datum/component/wet_floor/proc/update_overlay() - var/intended - if(!istype(parent, /turf/open/floor)) - intended = generic_turf_overlay - else - switch(highest_strength) - if(TURF_WET_PERMAFROST) - intended = permafrost_overlay - if(TURF_WET_ICE) - intended = ice_overlay - else - intended = water_overlay - if(current_overlay != intended) - var/turf/T = parent - T.cut_overlay(current_overlay) - T.add_overlay(intended) - current_overlay = intended - -/datum/component/wet_floor/proc/AfterSlip(mob/living/L) - if(highest_strength == TURF_WET_LUBE) - L.confused = max(L.confused, 8) - -/datum/component/wet_floor/proc/update_flags() - var/intensity - lube_flags = NONE - switch(highest_strength) - if(TURF_WET_WATER) - intensity = 60 - lube_flags = NO_SLIP_WHEN_WALKING - if(TURF_WET_LUBE) - intensity = 80 - lube_flags = SLIDE | GALOSHES_DONT_HELP - if(TURF_WET_ICE) - intensity = 120 - lube_flags = SLIDE | GALOSHES_DONT_HELP - if(TURF_WET_PERMAFROST) - intensity = 120 - lube_flags = SLIDE_ICE | GALOSHES_DONT_HELP - else - qdel(parent.GetComponent(/datum/component/slippery)) - return - - var/datum/component/slippery/S = parent.LoadComponent(/datum/component/slippery, NONE, CALLBACK(src, .proc/AfterSlip)) - S.intensity = intensity - S.lube_flags = lube_flags - -/datum/component/wet_floor/proc/dry(datum/source, strength = TURF_WET_WATER, immediate = FALSE, duration_decrease = INFINITY) - for(var/i in time_left_list) - if(text2num(i) <= strength) - time_left_list[i] = max(0, time_left_list[i] - duration_decrease) - if(immediate) - check() - -/datum/component/wet_floor/proc/max_time_left() - . = 0 - for(var/i in time_left_list) - . = max(., time_left_list[i]) - -/datum/component/wet_floor/process() - var/turf/open/T = parent - var/diff = world.time - last_process - var/decrease = 0 - var/t = T.GetTemperature() - switch(t) - if(-INFINITY to T0C) - add_wet(TURF_WET_ICE, max_time_left()) //Water freezes into ice! - if(T0C to T0C + 100) - decrease = ((T.air.temperature - T0C) / SSwet_floors.temperature_coeff) * (diff / SSwet_floors.time_ratio) - if(T0C + 100 to INFINITY) - decrease = INFINITY - decrease = max(0, decrease) - if((is_wet() & TURF_WET_ICE) && t > T0C) //Ice melts into water! - for(var/obj/O in T.contents) - if(O.obj_flags & FROZEN) - O.make_unfrozen() - add_wet(TURF_WET_WATER, max_time_left()) - dry(null, TURF_WET_ICE) - dry(null, ALL, FALSE, decrease) - check() - last_process = world.time - -/datum/component/wet_floor/proc/update_strength() - highest_strength = 0 //Not bitflag. - for(var/i in time_left_list) - highest_strength = max(highest_strength, text2num(i)) - -/datum/component/wet_floor/proc/is_wet() - . = 0 - for(var/i in time_left_list) - . |= text2num(i) - -/datum/component/wet_floor/PreTransfer() - var/turf/O = parent - O.cut_overlay(current_overlay) - //That turf is no longer slippery, we're out of here - //Slippery components don't transfer due to callbacks - qdel(O.GetComponent(/datum/component/slippery)) - -/datum/component/wet_floor/PostTransfer() - if(!isopenturf(parent)) - return COMPONENT_INCOMPATIBLE - var/turf/T = parent - T.add_overlay(current_overlay) - //Make sure to add/update any slippery component on the new turf (update_flags calls LoadComponent) - update_flags() - - //NB it's possible we get deleted after this, due to inherit - -/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE) - var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST) - if(duration_minimum <= 0 || !type) - return FALSE - if(type in allowed_types) - return _do_add_wet(type, duration_minimum, duration_add, duration_maximum) - else - . = NONE - for(var/i in allowed_types) - if(!(type & i)) - continue - . |= _do_add_wet(i, duration_minimum, duration_add, duration_maximum) - if(_permanent) - permanent = TRUE - STOP_PROCESSING(SSwet_floors, src) - -/datum/component/wet_floor/proc/_do_add_wet(type, duration_minimum, duration_add, duration_maximum) - var/time = 0 - if(LAZYACCESS(time_left_list, "[type]")) - time = CLAMP(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum) - else - time = min(duration_minimum, duration_maximum) - LAZYSET(time_left_list, "[type]", time) - check(TRUE) - return TRUE - -/datum/component/wet_floor/proc/gc(on_init = FALSE) - if(!LAZYLEN(time_left_list)) - if(on_init) - var/turf/T = parent - stack_trace("Warning: Wet floor component gc'd right after initialization! What a waste of time and CPU! Type = [T? T.type : "ERROR - NO PARENT"], Location = [istype(T)? AREACOORD(T) : "ERROR - INVALID PARENT"].") - qdel(src) - return TRUE - return FALSE - -/datum/component/wet_floor/proc/check(force_update = FALSE) - var/changed = FALSE - for(var/i in time_left_list) - if(time_left_list[i] <= 0) - time_left_list -= i - changed = TRUE - if(changed || force_update) - update_strength() - update_overlay() - update_flags() - gc() +/datum/component/wet_floor + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + can_transfer = TRUE + var/highest_strength = TURF_DRY + var/lube_flags = NONE //why do we have this? + var/list/time_left_list //In deciseconds. + var/static/mutable_appearance/permafrost_overlay = mutable_appearance('icons/effects/water.dmi', "ice_floor") + var/static/mutable_appearance/ice_overlay = mutable_appearance('icons/turf/overlays.dmi', "snowfloor") + var/static/mutable_appearance/water_overlay = mutable_appearance('icons/effects/water.dmi', "wet_floor_static") + var/static/mutable_appearance/generic_turf_overlay = mutable_appearance('icons/effects/water.dmi', "wet_static") + var/current_overlay + var/permanent = FALSE + var/last_process = 0 + +/datum/component/wet_floor/InheritComponent(datum/newcomp, orig, argslist) + if(!newcomp) //We are getting passed the arguments of a would-be new component, but not a new component + add_wet(arglist(argslist)) + else //We are being passed in a full blown component + var/datum/component/wet_floor/WF = newcomp //Lets make an assumption + if(WF.gc()) //See if it's even valid, still. Also does LAZYLEN and stuff for us. + CRASH("Wet floor component tried to inherit another, but the other was able to garbage collect while being inherited! What a waste of time!") + return + for(var/i in WF.time_left_list) + add_wet(text2num(i), WF.time_left_list[i]) + +/datum/component/wet_floor/Initialize(strength, duration_minimum, duration_add, duration_maximum, _permanent = FALSE) + if(!isopenturf(parent)) + return COMPONENT_INCOMPATIBLE + add_wet(strength, duration_minimum, duration_add, duration_maximum) + permanent = _permanent + if(!permanent) + START_PROCESSING(SSwet_floors, src) + addtimer(CALLBACK(src, .proc/gc, TRUE), 1) //GC after initialization. + last_process = world.time + +/datum/component/wet_floor/RegisterWithParent() + RegisterSignal(parent, COMSIG_TURF_IS_WET, .proc/is_wet) + RegisterSignal(parent, COMSIG_TURF_MAKE_DRY, .proc/dry) + +/datum/component/wet_floor/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_TURF_IS_WET, COMSIG_TURF_MAKE_DRY)) + +/datum/component/wet_floor/Destroy() + STOP_PROCESSING(SSwet_floors, src) + var/turf/T = parent + qdel(T.GetComponent(/datum/component/slippery)) + if(istype(T)) //If this is false there is so many things wrong with it. + T.cut_overlay(current_overlay) + else + stack_trace("Warning: Wet floor component wasn't on a turf when being destroyed! This is really bad!") + return ..() + +/datum/component/wet_floor/proc/update_overlay() + var/intended + if(!istype(parent, /turf/open/floor)) + intended = generic_turf_overlay + else + switch(highest_strength) + if(TURF_WET_PERMAFROST) + intended = permafrost_overlay + if(TURF_WET_ICE) + intended = ice_overlay + else + intended = water_overlay + if(current_overlay != intended) + var/turf/T = parent + T.cut_overlay(current_overlay) + T.add_overlay(intended) + current_overlay = intended + +/datum/component/wet_floor/proc/AfterSlip(mob/living/L) + if(highest_strength == TURF_WET_LUBE) + L.confused = max(L.confused, 8) + +/datum/component/wet_floor/proc/update_flags() + var/intensity + lube_flags = NONE + switch(highest_strength) + if(TURF_WET_WATER) + intensity = 60 + lube_flags = NO_SLIP_WHEN_WALKING + if(TURF_WET_LUBE) + intensity = 80 + lube_flags = SLIDE | GALOSHES_DONT_HELP + if(TURF_WET_ICE) + intensity = 120 + lube_flags = SLIDE | GALOSHES_DONT_HELP + if(TURF_WET_PERMAFROST) + intensity = 120 + lube_flags = SLIDE_ICE | GALOSHES_DONT_HELP + else + qdel(parent.GetComponent(/datum/component/slippery)) + return + + var/datum/component/slippery/S = parent.LoadComponent(/datum/component/slippery, NONE, CALLBACK(src, .proc/AfterSlip)) + S.intensity = intensity + S.lube_flags = lube_flags + +/datum/component/wet_floor/proc/dry(datum/source, strength = TURF_WET_WATER, immediate = FALSE, duration_decrease = INFINITY) + for(var/i in time_left_list) + if(text2num(i) <= strength) + time_left_list[i] = max(0, time_left_list[i] - duration_decrease) + if(immediate) + check() + +/datum/component/wet_floor/proc/max_time_left() + . = 0 + for(var/i in time_left_list) + . = max(., time_left_list[i]) + +/datum/component/wet_floor/process() + var/turf/open/T = parent + var/diff = world.time - last_process + var/decrease = 0 + var/t = T.GetTemperature() + switch(t) + if(-INFINITY to T0C) + add_wet(TURF_WET_ICE, max_time_left()) //Water freezes into ice! + if(T0C to T0C + 100) + decrease = ((T.air.temperature - T0C) / SSwet_floors.temperature_coeff) * (diff / SSwet_floors.time_ratio) + if(T0C + 100 to INFINITY) + decrease = INFINITY + decrease = max(0, decrease) + if((is_wet() & TURF_WET_ICE) && t > T0C) //Ice melts into water! + for(var/obj/O in T.contents) + if(O.obj_flags & FROZEN) + O.make_unfrozen() + add_wet(TURF_WET_WATER, max_time_left()) + dry(null, TURF_WET_ICE) + dry(null, ALL, FALSE, decrease) + check() + last_process = world.time + +/datum/component/wet_floor/proc/update_strength() + highest_strength = 0 //Not bitflag. + for(var/i in time_left_list) + highest_strength = max(highest_strength, text2num(i)) + +/datum/component/wet_floor/proc/is_wet() + . = 0 + for(var/i in time_left_list) + . |= text2num(i) + +/datum/component/wet_floor/PreTransfer() + var/turf/O = parent + O.cut_overlay(current_overlay) + //That turf is no longer slippery, we're out of here + //Slippery components don't transfer due to callbacks + qdel(O.GetComponent(/datum/component/slippery)) + +/datum/component/wet_floor/PostTransfer() + if(!isopenturf(parent)) + return COMPONENT_INCOMPATIBLE + var/turf/T = parent + T.add_overlay(current_overlay) + //Make sure to add/update any slippery component on the new turf (update_flags calls LoadComponent) + update_flags() + + //NB it's possible we get deleted after this, due to inherit + +/datum/component/wet_floor/proc/add_wet(type, duration_minimum = 0, duration_add = 0, duration_maximum = MAXIMUM_WET_TIME, _permanent = FALSE) + var/static/list/allowed_types = list(TURF_WET_WATER, TURF_WET_LUBE, TURF_WET_ICE, TURF_WET_PERMAFROST) + if(duration_minimum <= 0 || !type) + return FALSE + if(type in allowed_types) + return _do_add_wet(type, duration_minimum, duration_add, duration_maximum) + else + . = NONE + for(var/i in allowed_types) + if(!(type & i)) + continue + . |= _do_add_wet(i, duration_minimum, duration_add, duration_maximum) + if(_permanent) + permanent = TRUE + STOP_PROCESSING(SSwet_floors, src) + +/datum/component/wet_floor/proc/_do_add_wet(type, duration_minimum, duration_add, duration_maximum) + var/time = 0 + if(LAZYACCESS(time_left_list, "[type]")) + time = CLAMP(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum) + else + time = min(duration_minimum, duration_maximum) + LAZYSET(time_left_list, "[type]", time) + check(TRUE) + return TRUE + +/datum/component/wet_floor/proc/gc(on_init = FALSE) + if(!LAZYLEN(time_left_list)) + if(on_init) + var/turf/T = parent + stack_trace("Warning: Wet floor component gc'd right after initialization! What a waste of time and CPU! Type = [T? T.type : "ERROR - NO PARENT"], Location = [istype(T)? AREACOORD(T) : "ERROR - INVALID PARENT"].") + qdel(src) + return TRUE + return FALSE + +/datum/component/wet_floor/proc/check(force_update = FALSE) + var/changed = FALSE + for(var/i in time_left_list) + if(time_left_list[i] <= 0) + time_left_list -= i + changed = TRUE + if(changed || force_update) + update_strength() + update_overlay() + update_flags() + gc() diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index dfe0a1d9..00417993 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -5,7 +5,6 @@ alert_type = /obj/screen/alert/status_effect/freon var/icon/cube var/can_melt = TRUE - var/datum/weakref/redirect_component /obj/screen/alert/status_effect/freon name = "Frozen Solid" @@ -13,7 +12,7 @@ icon_state = "frozen" /datum/status_effect/freon/on_apply() - redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) + RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/owner_resist) if(!owner.stat) to_chat(owner, "You become frozen in a cube!") cube = icon('icons/effects/freeze.dmi', "ice_cube") @@ -40,8 +39,7 @@ owner.cut_overlay(cube) owner.adjust_bodytemperature(100) owner.update_canmove() - qdel(redirect_component.resolve()) - redirect_component = null + UnregisterSignal(owner, COMSIG_LIVING_RESIST) /datum/status_effect/freon/watcher duration = 8 diff --git a/code/game/objects/effects/proximity.dm b/code/game/objects/effects/proximity.dm index 23977746..34d6497d 100644 --- a/code/game/objects/effects/proximity.dm +++ b/code/game/objects/effects/proximity.dm @@ -1,112 +1,112 @@ -/datum/proximity_monitor - var/atom/host //the atom we are tracking - var/atom/hasprox_receiver //the atom that will receive HasProximity calls. - var/atom/last_host_loc - var/list/checkers //list of /obj/effect/abstract/proximity_checkers - var/current_range - var/ignore_if_not_on_turf //don't check turfs in range if the host's loc isn't a turf - var/datum/component/movement_tracker - -/datum/proximity_monitor/New(atom/_host, range, _ignore_if_not_on_turf = TRUE) - checkers = list() - last_host_loc = _host.loc - ignore_if_not_on_turf = _ignore_if_not_on_turf - current_range = range - SetHost(_host) - -/datum/proximity_monitor/proc/SetHost(atom/H,atom/R) - if(R) - hasprox_receiver = R - else if(hasprox_receiver == host) //Default case - hasprox_receiver = H - host = H - last_host_loc = host.loc - if(movement_tracker) - QDEL_NULL(movement_tracker) - movement_tracker = host.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/HandleMove))) - SetRange(current_range,TRUE) - -/datum/proximity_monitor/Destroy() - host = null - last_host_loc = null - hasprox_receiver = null - QDEL_LIST(checkers) - QDEL_NULL(movement_tracker) - return ..() - -/datum/proximity_monitor/proc/HandleMove() - var/atom/_host = host - var/atom/new_host_loc = _host.loc - if(last_host_loc != new_host_loc) - last_host_loc = new_host_loc //hopefully this won't cause GC issues with containers - var/curr_range = current_range - SetRange(curr_range, TRUE) - if(curr_range) - testing("HasProx: [host] -> [host]") - hasprox_receiver.HasProximity(host) //if we are processing, we're guaranteed to be a movable - -/datum/proximity_monitor/proc/SetRange(range, force_rebuild = FALSE) - if(!force_rebuild && range == current_range) - return FALSE - . = TRUE - - current_range = range - - var/list/checkers_local = checkers - var/old_checkers_len = checkers_local.len - - var/atom/_host = host - - var/atom/loc_to_use = ignore_if_not_on_turf ? _host.loc : get_turf(_host) - if(!isturf(loc_to_use)) //only check the host's loc - if(range) - var/obj/effect/abstract/proximity_checker/pc - if(old_checkers_len) - pc = checkers_local[old_checkers_len] - --checkers_local.len - QDEL_LIST(checkers_local) - else - pc = new(loc_to_use, src) - - checkers_local += pc //only check the host's loc - return - - var/list/turfs = RANGE_TURFS(range, loc_to_use) - var/turfs_len = turfs.len - var/old_checkers_used = min(turfs_len, old_checkers_len) - - //reuse what we can - for(var/I in 1 to old_checkers_len) - if(I <= old_checkers_used) - var/obj/effect/abstract/proximity_checker/pc = checkers_local[I] - pc.forceMove(turfs[I]) - else - qdel(checkers_local[I]) //delete the leftovers - - if(old_checkers_len < turfs_len) - //create what we lack - for(var/I in (old_checkers_used + 1) to turfs_len) - checkers_local += new /obj/effect/abstract/proximity_checker(turfs[I], src) - else - checkers_local.Cut(old_checkers_used + 1, old_checkers_len) - -/obj/effect/abstract/proximity_checker - invisibility = INVISIBILITY_ABSTRACT - anchored = TRUE - var/datum/proximity_monitor/monitor - -/obj/effect/abstract/proximity_checker/Initialize(mapload, datum/proximity_monitor/_monitor) - . = ..() - if(_monitor) - monitor = _monitor - else - stack_trace("proximity_checker created without host") - return INITIALIZE_HINT_QDEL - -/obj/effect/abstract/proximity_checker/Destroy() - monitor = null - return ..() - -/obj/effect/abstract/proximity_checker/Crossed(atom/movable/AM) - set waitfor = FALSE - monitor?.hasprox_receiver.HasProximity(AM) +/datum/proximity_monitor + var/atom/host //the atom we are tracking + var/atom/hasprox_receiver //the atom that will receive HasProximity calls. + var/atom/last_host_loc + var/list/checkers //list of /obj/effect/abstract/proximity_checkers + var/current_range + var/ignore_if_not_on_turf //don't check turfs in range if the host's loc isn't a turf + +/datum/proximity_monitor/New(atom/_host, range, _ignore_if_not_on_turf = TRUE) + checkers = list() + last_host_loc = _host.loc + ignore_if_not_on_turf = _ignore_if_not_on_turf + current_range = range + SetHost(_host) + +/datum/proximity_monitor/proc/SetHost(atom/H,atom/R) + if(H == host) + return + if(host) + UnregisterSignal(host, COMSIG_MOVABLE_MOVED) + if(R) + hasprox_receiver = R + else if(hasprox_receiver == host) //Default case + hasprox_receiver = H + host = H + RegisterSignal(host, COMSIG_MOVABLE_MOVED, .proc/HandleMove) + last_host_loc = host.loc + SetRange(current_range,TRUE) + +/datum/proximity_monitor/Destroy() + host = null + last_host_loc = null + hasprox_receiver = null + QDEL_LIST(checkers) + return ..() + +/datum/proximity_monitor/proc/HandleMove() + var/atom/_host = host + var/atom/new_host_loc = _host.loc + if(last_host_loc != new_host_loc) + last_host_loc = new_host_loc //hopefully this won't cause GC issues with containers + var/curr_range = current_range + SetRange(curr_range, TRUE) + if(curr_range) + testing("HasProx: [host] -> [host]") + hasprox_receiver.HasProximity(host) //if we are processing, we're guaranteed to be a movable + +/datum/proximity_monitor/proc/SetRange(range, force_rebuild = FALSE) + if(!force_rebuild && range == current_range) + return FALSE + . = TRUE + + current_range = range + + var/list/checkers_local = checkers + var/old_checkers_len = checkers_local.len + + var/atom/_host = host + + var/atom/loc_to_use = ignore_if_not_on_turf ? _host.loc : get_turf(_host) + if(!isturf(loc_to_use)) //only check the host's loc + if(range) + var/obj/effect/abstract/proximity_checker/pc + if(old_checkers_len) + pc = checkers_local[old_checkers_len] + --checkers_local.len + QDEL_LIST(checkers_local) + else + pc = new(loc_to_use, src) + + checkers_local += pc //only check the host's loc + return + + var/list/turfs = RANGE_TURFS(range, loc_to_use) + var/turfs_len = turfs.len + var/old_checkers_used = min(turfs_len, old_checkers_len) + + //reuse what we can + for(var/I in 1 to old_checkers_len) + if(I <= old_checkers_used) + var/obj/effect/abstract/proximity_checker/pc = checkers_local[I] + pc.forceMove(turfs[I]) + else + qdel(checkers_local[I]) //delete the leftovers + + if(old_checkers_len < turfs_len) + //create what we lack + for(var/I in (old_checkers_used + 1) to turfs_len) + checkers_local += new /obj/effect/abstract/proximity_checker(turfs[I], src) + else + checkers_local.Cut(old_checkers_used + 1, old_checkers_len) + +/obj/effect/abstract/proximity_checker + invisibility = INVISIBILITY_ABSTRACT + anchored = TRUE + var/datum/proximity_monitor/monitor + +/obj/effect/abstract/proximity_checker/Initialize(mapload, datum/proximity_monitor/_monitor) + . = ..() + if(_monitor) + monitor = _monitor + else + stack_trace("proximity_checker created without host") + return INITIALIZE_HINT_QDEL + +/obj/effect/abstract/proximity_checker/Destroy() + monitor = null + return ..() + +/obj/effect/abstract/proximity_checker/Crossed(atom/movable/AM) + set waitfor = FALSE + monitor?.hasprox_receiver.HasProximity(AM) diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 16104f0b..0eb97a8d 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -20,8 +20,8 @@ var/ghetto = FALSE lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - var/datum/component/mobhook var/datum/radial_menu/persistent/wiring_gui_menu + var/mob/listeningTo /obj/item/twohanded/rcl/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/stack/cable_coil)) @@ -86,7 +86,7 @@ /obj/item/twohanded/rcl/Destroy() QDEL_NULL(loaded) last = null - QDEL_NULL(mobhook) + listeningTo = null QDEL_NULL(wiring_gui_menu) return ..() @@ -141,9 +141,8 @@ /obj/item/twohanded/rcl/dropped(mob/wearer) ..() - if(mobhook) - active = FALSE - QDEL_NULL(mobhook) + UnregisterSignal(wearer, COMSIG_MOVABLE_MOVED) + listeningTo = null last = null /obj/item/twohanded/rcl/attack_self(mob/user) @@ -158,13 +157,12 @@ break obj/item/twohanded/rcl/proc/getMobhook(mob/to_hook) - if(to_hook) - if(mobhook && mobhook.parent != to_hook) - QDEL_NULL(mobhook) - if (!mobhook) - mobhook = to_hook.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/trigger))) - else - QDEL_NULL(mobhook) + if(listeningTo == to_hook) + return + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + RegisterSignal(to_hook, COMSIG_MOVABLE_MOVED, .proc/trigger) + listeningTo = to_hook /obj/item/twohanded/rcl/proc/trigger(mob/user) if(active) diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index e3752ab4..f3efb52d 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -39,7 +39,6 @@ /obj/item/defibrillator/loaded/Initialize() //starts with hicap . = ..() - paddles = make_paddles() cell = new(src) update_icon() return @@ -204,8 +203,8 @@ var/M = get(paddles, /mob) remove_paddles(M) QDEL_NULL(paddles) - . = ..() - update_icon() + QDEL_NULL(cell) + return ..() /obj/item/defibrillator/proc/deductcharge(chrgdeductamt) if(cell) @@ -246,7 +245,6 @@ /obj/item/defibrillator/compact/loaded/Initialize() . = ..() - paddles = make_paddles() cell = new(src) update_icon() @@ -258,7 +256,6 @@ /obj/item/defibrillator/compact/combat/loaded/Initialize() . = ..() - paddles = make_paddles() cell = new /obj/item/stock_parts/cell/infinite(src) update_icon() @@ -293,31 +290,28 @@ var/grab_ghost = FALSE var/tlimit = DEFIB_TIME_LIMIT * 10 - var/datum/component/mobhook + var/mob/listeningTo /obj/item/twohanded/shockpaddles/equipped(mob/user, slot) . = ..() - if(req_defib) - if (mobhook && mobhook.parent != user) - QDEL_NULL(mobhook) - if (!mobhook) - mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/check_range))) + if(!req_defib) + return + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/check_range) /obj/item/twohanded/shockpaddles/Moved() . = ..() check_range() /obj/item/twohanded/shockpaddles/proc/check_range() - if(!req_defib) + if(!req_defib || !defib) return if(!in_range(src,defib)) var/mob/living/L = loc if(istype(L)) to_chat(L, "[defib]'s paddles overextend and come out of your hands!") - L.temporarilyRemoveItemFromInventory(src,TRUE) else visible_message("[src] snap back into [defib].") - snap_back() + snap_back() /obj/item/twohanded/shockpaddles/proc/recharge(var/time) if(req_defib || !time) @@ -358,14 +352,14 @@ /obj/item/twohanded/shockpaddles/dropped(mob/user) if(!req_defib) return ..() - if (mobhook) - QDEL_NULL(mobhook) if(user) + UnregisterSignal(user, COMSIG_MOVABLE_MOVED) var/obj/item/twohanded/offhand/O = user.get_inactive_held_item() if(istype(O)) O.unwield() - to_chat(user, "The paddles snap back into the main unit.") - snap_back() + if(user != loc) + to_chat(user, "The paddles snap back into the main unit.") + snap_back() return unwield(user) /obj/item/twohanded/shockpaddles/proc/snap_back() diff --git a/code/game/objects/items/devices/geiger_counter.dm b/code/game/objects/items/devices/geiger_counter.dm index 0dbede18..8d386842 100644 --- a/code/game/objects/items/devices/geiger_counter.dm +++ b/code/game/objects/items/devices/geiger_counter.dm @@ -205,21 +205,25 @@ obj_flags |= EMAGGED /obj/item/geiger_counter/cyborg - var/datum/component/mobhook + var/mob/listeningTo /obj/item/geiger_counter/cyborg/equipped(mob/user) . = ..() - if (mobhook && mobhook.parent != user) - QDEL_NULL(mobhook) - if (!mobhook) - mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_ATOM_RAD_ACT = CALLBACK(src, .proc/redirect_rad_act))) + if(listeningTo == user) + return + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_ATOM_RAD_ACT) + RegisterSignal(user, COMSIG_ATOM_RAD_ACT, .proc/redirect_rad_act) + listeningTo = user /obj/item/geiger_counter/cyborg/proc/redirect_rad_act(datum/source, amount) rad_act(amount) /obj/item/geiger_counter/cyborg/dropped() . = ..() - QDEL_NULL(mobhook) + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_ATOM_RAD_ACT) + listeningTo = null #undef RAD_LEVEL_NORMAL #undef RAD_LEVEL_MODERATE diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index b5c7af4b..ce5810f5 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -29,7 +29,7 @@ . = ..() START_PROCESSING(SSprocessing, src) GLOB.poi_list += src - AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_POST_THROW = CALLBACK(src, .proc/move_gracefully))) + RegisterSignal(src, COMSIG_MOVABLE_POST_THROW, .proc/move_gracefully) /obj/item/his_grace/Destroy() STOP_PROCESSING(SSprocessing, src) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 14a8d793..809e4bdb 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -1,439 +1,442 @@ -/* - * These absorb the functionality of the plant bag, ore satchel, etc - * They use the use_to_pickup, quick_gather, and quick_empty functions - * that were already defined in weapon/storage, but which had been - * re-implemented in other classes. - * - * Contains: - * Trash Bag - * Mining Satchel - * Plant Bag - * Sheet Snatcher - * Book Bag - * Biowaste Bag - * - * -Sayu - */ - -// Generic non-item -/obj/item/storage/bag - slot_flags = ITEM_SLOT_BELT - -/obj/item/storage/bag/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.allow_quick_gather = TRUE - STR.allow_quick_empty = TRUE - STR.display_numerical_stacking = TRUE - STR.click_gather = TRUE - -// ----------------------------- -// Trash bag -// ----------------------------- -/obj/item/storage/bag/trash - name = "trash bag" - desc = "It's the heavy-duty black polymer kind. Time to take out the trash!" - icon = 'icons/obj/janitor.dmi' - icon_state = "trashbag" - item_state = "trashbag" - lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' - - w_class = WEIGHT_CLASS_BULKY - var/insertable = TRUE - -/obj/item/storage/bag/trash/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.max_combined_w_class = 30 - STR.max_items = 30 - STR.cant_hold = typecacheof(list(/obj/item/disk/nuclear)) - -/obj/item/storage/bag/trash/suicide_act(mob/user) - user.visible_message("[user] puts [src] over [user.p_their()] head and starts chomping at the insides! Disgusting!") - playsound(loc, 'sound/items/eatfood.ogg', 50, 1, -1) - return (TOXLOSS) - -/obj/item/storage/bag/trash/update_icon() - if(contents.len == 0) - icon_state = "[initial(icon_state)]" - else if(contents.len < 12) - icon_state = "[initial(icon_state)]1" - else if(contents.len < 21) - icon_state = "[initial(icon_state)]2" - else icon_state = "[initial(icon_state)]3" - -/obj/item/storage/bag/trash/cyborg - insertable = FALSE - -/obj/item/storage/bag/trash/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) - if(insertable) - J.put_in_cart(src, user) - J.mybag=src - J.update_icon() - else - to_chat(user, "You are unable to fit your [name] into the [J.name].") - return - -/obj/item/storage/bag/trash/bluespace - name = "trash bag of holding" - desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." - icon_state = "bluetrashbag" - item_flags = NO_MAT_REDEMPTION - -/obj/item/storage/bag/trash/bluespace/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 60 - STR.max_items = 60 - -/obj/item/storage/bag/trash/bluespace/cyborg - insertable = FALSE - -// ----------------------------- -// Mining Satchel -// ----------------------------- - -/obj/item/storage/bag/ore - name = "mining satchel" - desc = "This little bugger can be used to store and transport ores." - icon = 'icons/obj/mining.dmi' - icon_state = "satchel" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET - w_class = WEIGHT_CLASS_NORMAL - component_type = /datum/component/storage/concrete/stack - var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it - var/datum/component/mobhook - -/obj/item/storage/bag/ore/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.allow_quick_empty = TRUE - STR.can_hold = typecacheof(list(/obj/item/stack/ore)) - STR.max_w_class = WEIGHT_CLASS_HUGE - STR.max_combined_stack_amount = 50 - -/obj/item/storage/bag/ore/equipped(mob/user) - . = ..() - if (mobhook && mobhook.parent != user) - QDEL_NULL(mobhook) - if (!mobhook) - mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/Pickup_ores))) - -/obj/item/storage/bag/ore/dropped() - . = ..() - if (mobhook) - QDEL_NULL(mobhook) - -/obj/item/storage/bag/ore/proc/Pickup_ores(mob/living/user) - var/show_message = FALSE - var/obj/structure/ore_box/box - var/turf/tile = user.loc - if (!isturf(tile)) - return - if (istype(user.pulling, /obj/structure/ore_box)) - box = user.pulling - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - if(STR) - for(var/A in tile) - if (!is_type_in_typecache(A, STR.can_hold)) - continue - if (box) - user.transferItemToLoc(A, box) - show_message = TRUE - else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE)) - show_message = TRUE - else - if(!spam_protection) - to_chat(user, "Your [name] is full and can't hold any more!") - spam_protection = TRUE - continue - if(show_message) - playsound(user, "rustle", 50, TRUE) - if (box) - user.visible_message("[user] offloads the ores beneath [user.p_them()] into [box].", \ - "You offload the ores beneath you into your [box].") - else - user.visible_message("[user] scoops up the ores beneath [user.p_them()].", \ - "You scoop up the ores beneath you with your [name].") - spam_protection = FALSE - -/obj/item/storage/bag/ore/cyborg - name = "cyborg mining satchel" - -/obj/item/storage/bag/ore/cyborg/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.allow_quick_empty = TRUE - STR.can_hold = typecacheof(list(/obj/item/stack/ore)) - STR.max_w_class = WEIGHT_CLASS_HUGE - STR.max_combined_stack_amount = 150 - -/obj/item/storage/bag/ore/large - name = "large mining satchel" - desc = "This bag can hold three times the ore in many small pockets. Shockingly foldable and compact for its volume." - -/obj/item/storage/bag/ore/large/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.allow_quick_empty = TRUE - STR.can_hold = typecacheof(list(/obj/item/stack/ore)) - STR.max_w_class = WEIGHT_CLASS_HUGE - STR.max_combined_stack_amount = 150 - -/obj/item/storage/bag/ore/holding //miners, your messiah has arrived - name = "mining satchel of holding" - desc = "A revolution in convenience, this satchel allows for huge amounts of ore storage. It's been outfitted with anti-malfunction safety measures." - icon_state = "satchel_bspace" - -/obj/item/storage/bag/ore/holding/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.max_items = INFINITY - STR.max_combined_w_class = INFINITY - STR.max_combined_stack_amount = INFINITY - -// ----------------------------- -// Plant bag -// ----------------------------- - -/obj/item/storage/bag/plants - name = "plant bag" - icon = 'icons/obj/hydroponics/equipment.dmi' - icon_state = "plantbag" - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/plants/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 100 - STR.max_items = 100 - STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/grown, /obj/item/seeds, /obj/item/grown, /obj/item/reagent_containers/honeycomb)) - -//////// - -/obj/item/storage/bag/plants/portaseeder - name = "portable seed extractor" - desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." - icon_state = "portaseeder" - -/obj/item/storage/bag/plants/portaseeder/verb/dissolve_contents() - set name = "Activate Seed Extraction" - set category = "Object" - set desc = "Activate to convert your plants into plantable seeds." - if(usr.stat || !usr.canmove || usr.restrained()) - return - for(var/obj/item/O in contents) - seedify(O, 1) - -// ----------------------------- -// Sheet Snatcher -// ----------------------------- -// Because it stacks stacks, this doesn't operate normally. -// However, making it a storage/bag allows us to reuse existing code in some places. -Sayu - -/obj/item/storage/bag/sheetsnatcher - name = "sheet snatcher" - desc = "A patented Kinaris storage system designed for any kind of mineral sheet." - icon = 'icons/obj/mining.dmi' - icon_state = "sheetsnatcher" - - var/capacity = 300; //the number of sheets it can carry. - w_class = WEIGHT_CLASS_NORMAL - component_type = /datum/component/storage/concrete/stack - -/obj/item/storage/bag/sheetsnatcher/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.allow_quick_empty = TRUE - STR.can_hold = typecacheof(list(/obj/item/stack/sheet)) - STR.cant_hold = typecacheof(list(/obj/item/stack/sheet/mineral/sandstone, /obj/item/stack/sheet/mineral/wood)) - STR.max_combined_stack_amount = 300 - -// ----------------------------- -// Sheet Snatcher (Cyborg) -// ----------------------------- - -/obj/item/storage/bag/sheetsnatcher/borg - name = "sheet snatcher 9000" - desc = "" - capacity = 500//Borgs get more because >specialization - -/obj/item/storage/bag/sheetsnatcher/borg/ComponentInitialize() - . = ..() - var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) - STR.max_combined_stack_amount = 500 - -// ----------------------------- -// Book bag -// ----------------------------- - -/obj/item/storage/bag/books - name = "book bag" - desc = "A bag for books." - icon = 'icons/obj/library.dmi' - icon_state = "bookbag" - w_class = WEIGHT_CLASS_BULKY //Bigger than a book because physics - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/books/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 21 - STR.max_items = 7 - STR.display_numerical_stacking = FALSE - STR.can_hold = typecacheof(list(/obj/item/book, /obj/item/storage/book, /obj/item/spellbook)) - -/* - * Trays - Agouri - */ -/obj/item/storage/bag/tray - name = "tray" - icon = 'icons/obj/food/containers.dmi' - icon_state = "tray" - desc = "A metal tray to lay food on." - force = 5 - throwforce = 10 - throw_speed = 3 - throw_range = 5 - w_class = WEIGHT_CLASS_BULKY - flags_1 = CONDUCT_1 - materials = list(MAT_METAL=3000) - -/obj/item/storage/bag/tray/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 15 //I want my sushi god damn it - STR.insert_preposition = "on" - STR.can_hold = typecacheof(list( - /obj/item/reagent_containers/food, - /obj/item/kitchen, - /obj/item/storage/box/donkpockets)) - -/obj/item/storage/bag/tray/pre_attack(atom/A, mob/living/user, params) - if(istype(A, /obj/structure/table) && user.a_intent == INTENT_HELP) //I want my tray god damn it - if(user.transferItemToLoc(src, get_turf(A))) - var/list/click_params = params2list(params) - if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) - return - pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) - return - ..() - -/obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user) - . = ..() - // Drop all the things. All of them. - var/list/obj/item/oldContents = contents.Copy() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.quick_empty() - // Make each item scatter a bit - for(var/obj/item/I in oldContents) - spawn() - for(var/i = 1, i <= rand(1,2), i++) - if(I) - step(I, pick(NORTH,SOUTH,EAST,WEST)) - sleep(rand(2,4)) - - if(prob(50)) - playsound(M, 'sound/items/trayhit1.ogg', 50, 1) - else - playsound(M, 'sound/items/trayhit2.ogg', 50, 1) - - if(ishuman(M) || ismonkey(M)) - if(prob(10)) - M.Knockdown(40) - update_icon() - -/obj/item/storage/bag/tray/update_icon() - cut_overlays() - for(var/obj/item/I in contents) - var/mutable_appearance/MA = new (I) //I want my icons god damn it - MA.pixel_x = rand(-6, 6) - MA.pixel_y = rand(-6, 6) - add_overlay(MA) - -/obj/item/storage/bag/tray/Entered() - . = ..() - update_icon() - -/obj/item/storage/bag/tray/Exited() - . = ..() - update_icon() - -/* - * Chemistry bag - */ - -/obj/item/storage/bag/chemistry - name = "chemistry bag" - icon = 'icons/obj/chemical.dmi' - icon_state = "bag" - desc = "A bag for storing pills, patches, and bottles." - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/chemistry/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 200 - STR.max_items = 50 - STR.insert_preposition = "in" - STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/syringe/dart, /obj/item/reagent_containers/chem_pack)) - -/* - * Biowaste bag (mostly for xenobiologists) - */ - -/obj/item/storage/bag/bio - name = "bio bag" - icon = 'icons/obj/chemical.dmi' - icon_state = "biobag" - desc = "A bag for the safe transportation and disposal of biowaste and other biological materials." - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/bio/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 200 - STR.max_items = 25 - STR.insert_preposition = "in" - STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube)) - -/obj/item/storage/bag/bio/holding - name = "bio bag of holding" - icon = 'icons/obj/chemical.dmi' - icon_state = "bspace_biobag" - desc = "A bag for the safe transportation and disposal of biowaste and other biological materials." - -/obj/item/storage/bag/bio/holding/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = INFINITY - STR.max_items = 100 - -/* - * Construction bag (for engineering, holds stock parts and electronics) - */ - -/obj/item/storage/bag/construction - name = "construction bag" - icon = 'icons/obj/tools.dmi' - icon_state = "construction_bag" - desc = "A bag for storing small construction components." - w_class = WEIGHT_CLASS_TINY - resistance_flags = FLAMMABLE - -/obj/item/storage/bag/construction/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_combined_w_class = 100 - STR.max_items = 50 - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.insert_preposition = "in" - STR.can_hold = typecacheof(list(/obj/item/stack/ore/bluespace_crystal, /obj/item/assembly, /obj/item/stock_parts, /obj/item/reagent_containers/glass/beaker, /obj/item/stack/cable_coil, /obj/item/circuitboard, /obj/item/electronics)) +/* + * These absorb the functionality of the plant bag, ore satchel, etc + * They use the use_to_pickup, quick_gather, and quick_empty functions + * that were already defined in weapon/storage, but which had been + * re-implemented in other classes. + * + * Contains: + * Trash Bag + * Mining Satchel + * Plant Bag + * Sheet Snatcher + * Book Bag + * Biowaste Bag + * + * -Sayu + */ + +// Generic non-item +/obj/item/storage/bag + slot_flags = ITEM_SLOT_BELT + +/obj/item/storage/bag/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.allow_quick_gather = TRUE + STR.allow_quick_empty = TRUE + STR.display_numerical_stacking = TRUE + STR.click_gather = TRUE + +// ----------------------------- +// Trash bag +// ----------------------------- +/obj/item/storage/bag/trash + name = "trash bag" + desc = "It's the heavy-duty black polymer kind. Time to take out the trash!" + icon = 'icons/obj/janitor.dmi' + icon_state = "trashbag" + item_state = "trashbag" + lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' + + w_class = WEIGHT_CLASS_BULKY + var/insertable = TRUE + +/obj/item/storage/bag/trash/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_w_class = WEIGHT_CLASS_SMALL + STR.max_combined_w_class = 30 + STR.max_items = 30 + STR.cant_hold = typecacheof(list(/obj/item/disk/nuclear)) + +/obj/item/storage/bag/trash/suicide_act(mob/user) + user.visible_message("[user] puts [src] over [user.p_their()] head and starts chomping at the insides! Disgusting!") + playsound(loc, 'sound/items/eatfood.ogg', 50, 1, -1) + return (TOXLOSS) + +/obj/item/storage/bag/trash/update_icon() + if(contents.len == 0) + icon_state = "[initial(icon_state)]" + else if(contents.len < 12) + icon_state = "[initial(icon_state)]1" + else if(contents.len < 21) + icon_state = "[initial(icon_state)]2" + else icon_state = "[initial(icon_state)]3" + +/obj/item/storage/bag/trash/cyborg + insertable = FALSE + +/obj/item/storage/bag/trash/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) + if(insertable) + J.put_in_cart(src, user) + J.mybag=src + J.update_icon() + else + to_chat(user, "You are unable to fit your [name] into the [J.name].") + return + +/obj/item/storage/bag/trash/bluespace + name = "trash bag of holding" + desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage." + icon_state = "bluetrashbag" + item_flags = NO_MAT_REDEMPTION + +/obj/item/storage/bag/trash/bluespace/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_combined_w_class = 60 + STR.max_items = 60 + +/obj/item/storage/bag/trash/bluespace/cyborg + insertable = FALSE + +// ----------------------------- +// Mining Satchel +// ----------------------------- + +/obj/item/storage/bag/ore + name = "mining satchel" + desc = "This little bugger can be used to store and transport ores." + icon = 'icons/obj/mining.dmi' + icon_state = "satchel" + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET + w_class = WEIGHT_CLASS_NORMAL + component_type = /datum/component/storage/concrete/stack + var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it + var/mob/listeningTo + rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE + +/obj/item/storage/bag/ore/ComponentInitialize() + . = ..() + var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) + STR.allow_quick_empty = TRUE + STR.can_hold = typecacheof(list(/obj/item/stack/ore)) + STR.max_w_class = WEIGHT_CLASS_HUGE + STR.max_combined_stack_amount = 50 + +/obj/item/storage/bag/ore/equipped(mob/user) + . = ..() + if(listeningTo == user) + return + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/Pickup_ores) + listeningTo = user + +/obj/item/storage/bag/ore/dropped() + . = ..() + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + listeningTo = null + +/obj/item/storage/bag/ore/proc/Pickup_ores(mob/living/user) + var/show_message = FALSE + var/obj/structure/ore_box/box + var/turf/tile = user.loc + if (!isturf(tile)) + return + if (istype(user.pulling, /obj/structure/ore_box)) + box = user.pulling + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + if(STR) + for(var/A in tile) + if (!is_type_in_typecache(A, STR.can_hold)) + continue + if (box) + user.transferItemToLoc(A, box) + show_message = TRUE + else if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, A, user, TRUE)) + show_message = TRUE + else + if(!spam_protection) + to_chat(user, "Your [name] is full and can't hold any more!") + spam_protection = TRUE + continue + if(show_message) + playsound(user, "rustle", 50, TRUE) + if (box) + user.visible_message("[user] offloads the ores beneath [user.p_them()] into [box].", \ + "You offload the ores beneath you into your [box].") + else + user.visible_message("[user] scoops up the ores beneath [user.p_them()].", \ + "You scoop up the ores beneath you with your [name].") + spam_protection = FALSE + +/obj/item/storage/bag/ore/cyborg + name = "cyborg mining satchel" + +/obj/item/storage/bag/ore/cyborg/ComponentInitialize() + . = ..() + var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) + STR.allow_quick_empty = TRUE + STR.can_hold = typecacheof(list(/obj/item/stack/ore)) + STR.max_w_class = WEIGHT_CLASS_HUGE + STR.max_combined_stack_amount = 150 + +/obj/item/storage/bag/ore/large + name = "large mining satchel" + desc = "This bag can hold three times the ore in many small pockets. Shockingly foldable and compact for its volume." + +/obj/item/storage/bag/ore/large/ComponentInitialize() + . = ..() + var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) + STR.allow_quick_empty = TRUE + STR.can_hold = typecacheof(list(/obj/item/stack/ore)) + STR.max_w_class = WEIGHT_CLASS_HUGE + STR.max_combined_stack_amount = 150 + +/obj/item/storage/bag/ore/holding //miners, your messiah has arrived + name = "mining satchel of holding" + desc = "A revolution in convenience, this satchel allows for huge amounts of ore storage. It's been outfitted with anti-malfunction safety measures." + icon_state = "satchel_bspace" + +/obj/item/storage/bag/ore/holding/ComponentInitialize() + . = ..() + var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) + STR.max_items = INFINITY + STR.max_combined_w_class = INFINITY + STR.max_combined_stack_amount = INFINITY + +// ----------------------------- +// Plant bag +// ----------------------------- + +/obj/item/storage/bag/plants + name = "plant bag" + icon = 'icons/obj/hydroponics/equipment.dmi' + icon_state = "plantbag" + w_class = WEIGHT_CLASS_TINY + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/plants/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_w_class = WEIGHT_CLASS_NORMAL + STR.max_combined_w_class = 100 + STR.max_items = 100 + STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/grown, /obj/item/seeds, /obj/item/grown, /obj/item/reagent_containers/honeycomb)) + +//////// + +/obj/item/storage/bag/plants/portaseeder + name = "portable seed extractor" + desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant." + icon_state = "portaseeder" + +/obj/item/storage/bag/plants/portaseeder/verb/dissolve_contents() + set name = "Activate Seed Extraction" + set category = "Object" + set desc = "Activate to convert your plants into plantable seeds." + if(usr.stat || !usr.canmove || usr.restrained()) + return + for(var/obj/item/O in contents) + seedify(O, 1) + +// ----------------------------- +// Sheet Snatcher +// ----------------------------- +// Because it stacks stacks, this doesn't operate normally. +// However, making it a storage/bag allows us to reuse existing code in some places. -Sayu + +/obj/item/storage/bag/sheetsnatcher + name = "sheet snatcher" + desc = "A patented Kinaris storage system designed for any kind of mineral sheet." + icon = 'icons/obj/mining.dmi' + icon_state = "sheetsnatcher" + + var/capacity = 300; //the number of sheets it can carry. + w_class = WEIGHT_CLASS_NORMAL + component_type = /datum/component/storage/concrete/stack + +/obj/item/storage/bag/sheetsnatcher/ComponentInitialize() + . = ..() + var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) + STR.allow_quick_empty = TRUE + STR.can_hold = typecacheof(list(/obj/item/stack/sheet)) + STR.cant_hold = typecacheof(list(/obj/item/stack/sheet/mineral/sandstone, /obj/item/stack/sheet/mineral/wood)) + STR.max_combined_stack_amount = 300 + +// ----------------------------- +// Sheet Snatcher (Cyborg) +// ----------------------------- + +/obj/item/storage/bag/sheetsnatcher/borg + name = "sheet snatcher 9000" + desc = "" + capacity = 500//Borgs get more because >specialization + +/obj/item/storage/bag/sheetsnatcher/borg/ComponentInitialize() + . = ..() + var/datum/component/storage/concrete/stack/STR = GetComponent(/datum/component/storage/concrete/stack) + STR.max_combined_stack_amount = 500 + +// ----------------------------- +// Book bag +// ----------------------------- + +/obj/item/storage/bag/books + name = "book bag" + desc = "A bag for books." + icon = 'icons/obj/library.dmi' + icon_state = "bookbag" + w_class = WEIGHT_CLASS_BULKY //Bigger than a book because physics + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/books/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_w_class = WEIGHT_CLASS_NORMAL + STR.max_combined_w_class = 21 + STR.max_items = 7 + STR.display_numerical_stacking = FALSE + STR.can_hold = typecacheof(list(/obj/item/book, /obj/item/storage/book, /obj/item/spellbook)) + +/* + * Trays - Agouri + */ +/obj/item/storage/bag/tray + name = "tray" + icon = 'icons/obj/food/containers.dmi' + icon_state = "tray" + desc = "A metal tray to lay food on." + force = 5 + throwforce = 10 + throw_speed = 3 + throw_range = 5 + w_class = WEIGHT_CLASS_BULKY + flags_1 = CONDUCT_1 + materials = list(MAT_METAL=3000) + +/obj/item/storage/bag/tray/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 15 //I want my sushi god damn it + STR.insert_preposition = "on" + STR.can_hold = typecacheof(list( + /obj/item/reagent_containers/food, + /obj/item/kitchen, + /obj/item/storage/box/donkpockets)) + +/obj/item/storage/bag/tray/pre_attack(atom/A, mob/living/user, params) + if(istype(A, /obj/structure/table) && user.a_intent == INTENT_HELP) //I want my tray god damn it + if(user.transferItemToLoc(src, get_turf(A))) + var/list/click_params = params2list(params) + if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) + return + pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + return + ..() + +/obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user) + . = ..() + // Drop all the things. All of them. + var/list/obj/item/oldContents = contents.Copy() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.quick_empty() + // Make each item scatter a bit + for(var/obj/item/I in oldContents) + spawn() + for(var/i = 1, i <= rand(1,2), i++) + if(I) + step(I, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) + + if(prob(50)) + playsound(M, 'sound/items/trayhit1.ogg', 50, 1) + else + playsound(M, 'sound/items/trayhit2.ogg', 50, 1) + + if(ishuman(M) || ismonkey(M)) + if(prob(10)) + M.Knockdown(40) + update_icon() + +/obj/item/storage/bag/tray/update_icon() + cut_overlays() + for(var/obj/item/I in contents) + var/mutable_appearance/MA = new (I) //I want my icons god damn it + MA.pixel_x = rand(-6, 6) + MA.pixel_y = rand(-6, 6) + add_overlay(MA) + +/obj/item/storage/bag/tray/Entered() + . = ..() + update_icon() + +/obj/item/storage/bag/tray/Exited() + . = ..() + update_icon() + +/* + * Chemistry bag + */ + +/obj/item/storage/bag/chemistry + name = "chemistry bag" + icon = 'icons/obj/chemical.dmi' + icon_state = "bag" + desc = "A bag for storing pills, patches, and bottles." + w_class = WEIGHT_CLASS_TINY + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/chemistry/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_combined_w_class = 200 + STR.max_items = 50 + STR.insert_preposition = "in" + STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/syringe/dart, /obj/item/reagent_containers/chem_pack)) + +/* + * Biowaste bag (mostly for xenobiologists) + */ + +/obj/item/storage/bag/bio + name = "bio bag" + icon = 'icons/obj/chemical.dmi' + icon_state = "biobag" + desc = "A bag for the safe transportation and disposal of biowaste and other biological materials." + w_class = WEIGHT_CLASS_TINY + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/bio/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_combined_w_class = 200 + STR.max_items = 25 + STR.insert_preposition = "in" + STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube)) + +/obj/item/storage/bag/bio/holding + name = "bio bag of holding" + icon = 'icons/obj/chemical.dmi' + icon_state = "bspace_biobag" + desc = "A bag for the safe transportation and disposal of biowaste and other biological materials." + +/obj/item/storage/bag/bio/holding/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_combined_w_class = INFINITY + STR.max_items = 100 + +/* + * Construction bag (for engineering, holds stock parts and electronics) + */ + +/obj/item/storage/bag/construction + name = "construction bag" + icon = 'icons/obj/tools.dmi' + icon_state = "construction_bag" + desc = "A bag for storing small construction components." + w_class = WEIGHT_CLASS_TINY + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/construction/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_combined_w_class = 100 + STR.max_items = 50 + STR.max_w_class = WEIGHT_CLASS_SMALL + STR.insert_preposition = "in" + STR.can_hold = typecacheof(list(/obj/item/stack/ore/bluespace_crystal, /obj/item/assembly, /obj/item/stock_parts, /obj/item/reagent_containers/glass/beaker, /obj/item/stack/cable_coil, /obj/item/circuitboard, /obj/item/electronics)) diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 0b6bc6af..bbfa5c29 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -849,18 +849,20 @@ righthand_file = 'icons/mob/inhands/items_righthand.dmi' slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL - var/datum/component/mobhook + var/mob/listeningTo var/zoom_out_amt = 6 var/zoom_amt = 10 +/obj/item/twohanded/binoculars/Destroy() + listeningTo = null + return ..() + /obj/item/twohanded/binoculars/wield(mob/user) . = ..() if(!wielded) return - if(QDELETED(mobhook)) - mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/unwield))) - else - user.TakeComponent(mobhook) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/unwield) + listeningTo = user user.visible_message("[user] holds [src] up to [user.p_their()] eyes.","You hold [src] up to your eyes.") item_state = "binoculars_wielded" user.regenerate_icons() @@ -884,7 +886,8 @@ /obj/item/twohanded/binoculars/unwield(mob/user) . = ..() - mobhook.RemoveComponent() + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + listeningTo = null user.visible_message("[user] lowers [src].","You lower [src].") item_state = "binoculars" user.regenerate_icons() diff --git a/code/modules/antagonists/disease/disease_mob.dm b/code/modules/antagonists/disease/disease_mob.dm index 9be21053..116c3736 100644 --- a/code/modules/antagonists/disease/disease_mob.dm +++ b/code/modules/antagonists/disease/disease_mob.dm @@ -31,7 +31,6 @@ the new instance inside the host to be updated to the template's stats. var/browser_open = FALSE var/mob/living/following_host - var/datum/component/redirect/move_listener var/list/disease_instances var/list/hosts //this list is associative, affected_mob -> disease_instance var/datum/disease/advance/sentient_disease/disease_template @@ -260,16 +259,10 @@ the new instance inside the host to be updated to the template's stats. refresh_adaptation_menu() /mob/camera/disease/proc/set_following(mob/living/L) + if(following_host) + UnregisterSignal(following_host, COMSIG_MOVABLE_MOVED) + RegisterSignal(L, COMSIG_MOVABLE_MOVED, .proc/follow_mob) following_host = L - if(!move_listener) - move_listener = L.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/follow_mob))) - else - if(L) - L.TakeComponent(move_listener) - if(QDELING(move_listener)) - move_listener = null - else - QDEL_NULL(move_listener) follow_mob() /mob/camera/disease/proc/follow_next(reverse = FALSE) diff --git a/code/modules/antagonists/revenant/revenant_blight.dm b/code/modules/antagonists/revenant/revenant_blight.dm index 89d8de28..3e05b8d9 100644 --- a/code/modules/antagonists/revenant/revenant_blight.dm +++ b/code/modules/antagonists/revenant/revenant_blight.dm @@ -12,8 +12,8 @@ disease_flags = CURABLE permeability_mod = 1 severity = DISEASE_SEVERITY_DANGEROUS - var/finalstage = 0 //Because we're spawning off the cure in the final stage, we need to check if we've done the final stage's effects. - var/datum/mood_event/revenant_blight/depression + var/finalstage = FALSE //Because we're spawning off the cure in the final stage, we need to check if we've done the final stage's effects. + var/depression = FALSE /datum/disease/revblight/cure() if(affected_mob) @@ -44,7 +44,8 @@ affected_mob.emote("pale") if(3) if(!depression) - depression = SEND_SIGNAL(affected_mob, COMSIG_ADD_MOOD_EVENT, "rev_blight", /datum/mood_event/revenant_blight) + SEND_SIGNAL(affected_mob, COMSIG_ADD_MOOD_EVENT, "rev_blight", /datum/mood_event/revenant_blight) + depression = TRUE SEND_SIGNAL(affected_mob, COMSIG_DECREASE_SANITY, 0.12, SANITY_CRAZY) if(prob(10)) affected_mob.emote(pick("pale","shiver")) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index a023e0e3..2fbb1095 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -1,235 +1,239 @@ -/obj/item/assembly/infra - name = "infrared emitter" - desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." - icon_state = "infrared" - materials = list(MAT_METAL=1000, MAT_GLASS=500) - is_position_sensitive = TRUE - - var/on = FALSE - var/visible = FALSE - var/maxlength = 8 - var/list/obj/effect/beam/i_beam/beams - var/olddir = 0 - var/datum/component/redirect/listener - var/hearing_range = 3 - -/obj/item/assembly/infra/Initialize() - . = ..() - beams = list() - START_PROCESSING(SSobj, src) - -/obj/item/assembly/infra/ComponentInitialize() - . = ..() - AddComponent( - /datum/component/simple_rotation, - ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_FLIP | ROTATION_VERBS, - null, - null, - CALLBACK(src,.proc/after_rotation) - ) - -/obj/item/assembly/infra/proc/after_rotation() - refreshBeam() - -/obj/item/assembly/infra/Destroy() - STOP_PROCESSING(SSobj, src) - QDEL_NULL(listener) - QDEL_LIST(beams) - . = ..() - -/obj/item/assembly/infra/examine(mob/user) - . = ..() - . += "The infrared trigger is [on?"on":"off"]." - -/obj/item/assembly/infra/activate() - if(!..()) - return FALSE//Cooldown check - on = !on - refreshBeam() - update_icon() - return TRUE - -/obj/item/assembly/infra/toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSobj, src) - refreshBeam() - else - QDEL_LIST(beams) - STOP_PROCESSING(SSobj, src) - update_icon() - return secured - -/obj/item/assembly/infra/update_icon() - cut_overlays() - attached_overlays = list() - if(on) - add_overlay("infrared_on") - attached_overlays += "infrared_on" - if(visible && secured) - add_overlay("infrared_visible") - attached_overlays += "infrared_visible" - - if(holder) - holder.update_icon() - return - -/obj/item/assembly/infra/dropped() - . = ..() - if(holder) - holder_movement() //sync the dir of the device as well if it's contained in a TTV or an assembly holder - else - refreshBeam() - -/obj/item/assembly/infra/process() - if(!on || !secured) - refreshBeam() - return - -/obj/item/assembly/infra/proc/refreshBeam() - QDEL_LIST(beams) - if(throwing || !on || !secured) - return - if(holder) - if(holder.master) //incase the sensor is part of an assembly that's contained in another item, such as a single tank bomb - if(!holder.master.IsSpecialAssembly() || !isturf(holder.master.loc)) - return - else if(!isturf(holder.loc)) //else just check where the holder is - return - else if(!isturf(loc)) //or just where the fuck we are in general - return - var/turf/T = get_turf(src) - var/_dir = dir - var/turf/_T = get_step(T, _dir) - if(_T) - for(var/i in 1 to maxlength) - var/obj/effect/beam/i_beam/I = new(T) - if(istype(holder, /obj/item/assembly_holder)) - var/obj/item/assembly_holder/assembly_holder = holder - I.icon_state = "[initial(I.icon_state)]_[(assembly_holder.a_left == src) ? "l":"r"]" //Sync the offset of the beam with the position of the sensor. - else if(istype(holder, /obj/item/transfer_valve)) - I.icon_state = "[initial(I.icon_state)]_ttv" - I.density = TRUE - if(!I.Move(_T)) - qdel(I) - switchListener(_T) - break - I.density = FALSE - beams += I - I.master = src - I.setDir(_dir) - I.invisibility = visible? 0 : INVISIBILITY_ABSTRACT - T = _T - _T = get_step(_T, _dir) - CHECK_TICK - -/obj/item/assembly/infra/on_detach() - . = ..() - if(!.) - return - refreshBeam() - -/obj/item/assembly/infra/attack_hand() - . = ..() - refreshBeam() - -/obj/item/assembly/infra/Moved() - var/t = dir - . = ..() - setDir(t) - -/obj/item/assembly/infra/throw_at() - . = ..() - olddir = dir - -/obj/item/assembly/infra/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(!olddir) - return - setDir(olddir) - olddir = null - -/obj/item/assembly/infra/proc/trigger_beam(atom/movable/AM, turf/location) - refreshBeam() - switchListener(location) - if(!secured || !on || next_activate > world.time) - return FALSE - pulse(FALSE) - audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*", null, hearing_range) - for(var/CHM in get_hearers_in_view(hearing_range, src)) - if(ismob(CHM)) - var/mob/LM = CHM - LM.playsound_local(get_turf(src), 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) - next_activate = world.time + 30 - -/obj/item/assembly/infra/proc/switchListener(turf/newloc) - QDEL_NULL(listener) - listener = newloc.AddComponent(/datum/component/redirect, list(COMSIG_ATOM_EXITED = CALLBACK(src, .proc/check_exit))) - -/obj/item/assembly/infra/proc/check_exit(datum/source, atom/movable/offender) - if(QDELETED(src)) - return - if(offender == src || istype(offender,/obj/effect/beam/i_beam)) - return - if (offender && isitem(offender)) - var/obj/item/I = offender - if (I.item_flags & ABSTRACT) - return - return refreshBeam() - -/obj/item/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel - . = ..() - if(is_secured(user)) - user.set_machine(src) - var/dat = "Infrared Laser" - dat += "
Status: [on ? "On" : "Off"]" - dat += "
Visibility: [visible ? "Visible" : "Invisible"]" - dat += "

Refresh" - dat += "

Close" - user << browse(dat, "window=infra") - onclose(user, "infra") - return - -/obj/item/assembly/infra/Topic(href, href_list) - ..() - if(usr.incapacitated() || !in_range(loc, usr)) - usr << browse(null, "window=infra") - onclose(usr, "infra") - return - if(href_list["state"]) - on = !(on) - update_icon() - refreshBeam() - if(href_list["visible"]) - visible = !(visible) - update_icon() - refreshBeam() - if(href_list["close"]) - usr << browse(null, "window=infra") - return - if(usr) - attack_self(usr) - -/obj/item/assembly/infra/setDir() - . = ..() - refreshBeam() - -/***************************IBeam*********************************/ - -/obj/effect/beam/i_beam - name = "infrared beam" - icon = 'icons/obj/projectiles.dmi' - icon_state = "ibeam" - var/obj/item/assembly/infra/master - anchored = TRUE - density = FALSE - pass_flags = PASSTABLE|PASSGLASS|PASSGRILLE|LETPASSTHROW - -/obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj) - if(istype(AM, /obj/effect/beam)) - return - if (isitem(AM)) - var/obj/item/I = AM - if (I.item_flags & ABSTRACT) - return - master.trigger_beam(AM, get_turf(src)) +/obj/item/assembly/infra + name = "infrared emitter" + desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." + icon_state = "infrared" + materials = list(MAT_METAL=1000, MAT_GLASS=500) + is_position_sensitive = TRUE + + var/on = FALSE + var/visible = FALSE + var/maxlength = 8 + var/list/obj/effect/beam/i_beam/beams + var/olddir = 0 + var/turf/listeningTo + var/hearing_range = 3 + +/obj/item/assembly/infra/Initialize() + . = ..() + beams = list() + START_PROCESSING(SSobj, src) + +/obj/item/assembly/infra/ComponentInitialize() + . = ..() + AddComponent( + /datum/component/simple_rotation, + ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_FLIP | ROTATION_VERBS, + null, + null, + CALLBACK(src,.proc/after_rotation) + ) + +/obj/item/assembly/infra/proc/after_rotation() + refreshBeam() + +/obj/item/assembly/infra/Destroy() + STOP_PROCESSING(SSobj, src) + listeningTo = null + QDEL_LIST(beams) + . = ..() + +/obj/item/assembly/infra/examine(mob/user) + . = ..() + . += "The infrared trigger is [on?"on":"off"]." + +/obj/item/assembly/infra/activate() + if(!..()) + return FALSE//Cooldown check + on = !on + refreshBeam() + update_icon() + return TRUE + +/obj/item/assembly/infra/toggle_secure() + secured = !secured + if(secured) + START_PROCESSING(SSobj, src) + refreshBeam() + else + QDEL_LIST(beams) + STOP_PROCESSING(SSobj, src) + update_icon() + return secured + +/obj/item/assembly/infra/update_icon() + cut_overlays() + attached_overlays = list() + if(on) + add_overlay("infrared_on") + attached_overlays += "infrared_on" + if(visible && secured) + add_overlay("infrared_visible") + attached_overlays += "infrared_visible" + + if(holder) + holder.update_icon() + return + +/obj/item/assembly/infra/dropped() + . = ..() + if(holder) + holder_movement() //sync the dir of the device as well if it's contained in a TTV or an assembly holder + else + refreshBeam() + +/obj/item/assembly/infra/process() + if(!on || !secured) + refreshBeam() + return + +/obj/item/assembly/infra/proc/refreshBeam() + QDEL_LIST(beams) + if(throwing || !on || !secured) + return + if(holder) + if(holder.master) //incase the sensor is part of an assembly that's contained in another item, such as a single tank bomb + if(!holder.master.IsSpecialAssembly() || !isturf(holder.master.loc)) + return + else if(!isturf(holder.loc)) //else just check where the holder is + return + else if(!isturf(loc)) //or just where the fuck we are in general + return + var/turf/T = get_turf(src) + var/_dir = dir + var/turf/_T = get_step(T, _dir) + if(_T) + for(var/i in 1 to maxlength) + var/obj/effect/beam/i_beam/I = new(T) + if(istype(holder, /obj/item/assembly_holder)) + var/obj/item/assembly_holder/assembly_holder = holder + I.icon_state = "[initial(I.icon_state)]_[(assembly_holder.a_left == src) ? "l":"r"]" //Sync the offset of the beam with the position of the sensor. + else if(istype(holder, /obj/item/transfer_valve)) + I.icon_state = "[initial(I.icon_state)]_ttv" + I.density = TRUE + if(!I.Move(_T)) + qdel(I) + switchListener(_T) + break + I.density = FALSE + beams += I + I.master = src + I.setDir(_dir) + I.invisibility = visible? 0 : INVISIBILITY_ABSTRACT + T = _T + _T = get_step(_T, _dir) + CHECK_TICK + +/obj/item/assembly/infra/on_detach() + . = ..() + if(!.) + return + refreshBeam() + +/obj/item/assembly/infra/attack_hand() + . = ..() + refreshBeam() + +/obj/item/assembly/infra/Moved() + var/t = dir + . = ..() + setDir(t) + +/obj/item/assembly/infra/throw_at() + . = ..() + olddir = dir + +/obj/item/assembly/infra/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + . = ..() + if(!olddir) + return + setDir(olddir) + olddir = null + +/obj/item/assembly/infra/proc/trigger_beam(atom/movable/AM, turf/location) + refreshBeam() + switchListener(location) + if(!secured || !on || next_activate > world.time) + return FALSE + pulse(FALSE) + audible_message("[icon2html(src, hearers(src))] *beep* *beep* *beep*", null, hearing_range) + for(var/CHM in get_hearers_in_view(hearing_range, src)) + if(ismob(CHM)) + var/mob/LM = CHM + LM.playsound_local(get_turf(src), 'sound/machines/triple_beep.ogg', ASSEMBLY_BEEP_VOLUME, TRUE) + next_activate = world.time + 30 + +/obj/item/assembly/infra/proc/switchListener(turf/newloc) + if(listeningTo == newloc) + return + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_ATOM_EXITED) + RegisterSignal(newloc, COMSIG_ATOM_EXITED, .proc/check_exit) + listeningTo = newloc + +/obj/item/assembly/infra/proc/check_exit(datum/source, atom/movable/offender) + if(QDELETED(src)) + return + if(offender == src || istype(offender,/obj/effect/beam/i_beam)) + return + if (offender && isitem(offender)) + var/obj/item/I = offender + if (I.item_flags & ABSTRACT) + return + return refreshBeam() + +/obj/item/assembly/infra/ui_interact(mob/user)//TODO: change this this to the wire control panel + . = ..() + if(is_secured(user)) + user.set_machine(src) + var/dat = "Infrared Laser" + dat += "
Status: [on ? "On" : "Off"]" + dat += "
Visibility: [visible ? "Visible" : "Invisible"]" + dat += "

Refresh" + dat += "

Close" + user << browse(dat, "window=infra") + onclose(user, "infra") + return + +/obj/item/assembly/infra/Topic(href, href_list) + ..() + if(usr.incapacitated() || !in_range(loc, usr)) + usr << browse(null, "window=infra") + onclose(usr, "infra") + return + if(href_list["state"]) + on = !(on) + update_icon() + refreshBeam() + if(href_list["visible"]) + visible = !(visible) + update_icon() + refreshBeam() + if(href_list["close"]) + usr << browse(null, "window=infra") + return + if(usr) + attack_self(usr) + +/obj/item/assembly/infra/setDir() + . = ..() + refreshBeam() + +/***************************IBeam*********************************/ + +/obj/effect/beam/i_beam + name = "infrared beam" + icon = 'icons/obj/projectiles.dmi' + icon_state = "ibeam" + var/obj/item/assembly/infra/master + anchored = TRUE + density = FALSE + pass_flags = PASSTABLE|PASSGLASS|PASSGRILLE|LETPASSTHROW + +/obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj) + if(istype(AM, /obj/effect/beam)) + return + if (isitem(AM)) + var/obj/item/I = AM + if (I.item_flags & ABSTRACT) + return + master.trigger_beam(AM, get_turf(src)) diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 00cb9b1e..c7067c64 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -1,43 +1,43 @@ -/obj/item/clothing/gloves - name = "gloves" - gender = PLURAL //Carn: for grammarically correct text-parsing - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/clothing/gloves.dmi' - siemens_coefficient = 0.5 - body_parts_covered = HANDS - slot_flags = ITEM_SLOT_GLOVES - attack_verb = list("challenged") - var/transfer_prints = FALSE - var/transfer_blood = 0 - strip_delay = 20 - equip_delay_other = 40 - -/obj/item/clothing/gloves/ComponentInitialize() - . = ..() - AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT = CALLBACK(src, /obj/item/clothing/gloves/clean_blood))) - -/obj/item/clothing/gloves/clean_blood(datum/source, strength) - . = ..() - transfer_blood = 0 - -/obj/item/clothing/gloves/suicide_act(mob/living/carbon/user) - user.visible_message("\the [src] are forcing [user]'s hands around [user.p_their()] neck! It looks like the gloves are possessed!") - return OXYLOSS - -/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") - if(blood_DNA) - . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands", color = blood_DNA_to_color()) - -/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_gloves() - -// Called just before an attack_hand(), in mob/UnarmedAttack() -/obj/item/clothing/gloves/proc/Touch(atom/A, proximity) - return FALSE // return TRUE to cancel attack_hand() +/obj/item/clothing/gloves + name = "gloves" + gender = PLURAL //Carn: for grammarically correct text-parsing + w_class = WEIGHT_CLASS_SMALL + icon = 'icons/obj/clothing/gloves.dmi' + siemens_coefficient = 0.5 + body_parts_covered = HANDS + slot_flags = ITEM_SLOT_GLOVES + attack_verb = list("challenged") + var/transfer_prints = FALSE + var/transfer_blood = 0 + strip_delay = 20 + equip_delay_other = 40 + +/obj/item/clothing/gloves/ComponentInitialize() + . = ..() + RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /obj/item/clothing/gloves/clean_blood) + +/obj/item/clothing/gloves/clean_blood(datum/source, strength) + . = ..() + transfer_blood = 0 + +/obj/item/clothing/gloves/suicide_act(mob/living/carbon/user) + user.visible_message("\the [src] are forcing [user]'s hands around [user.p_their()] neck! It looks like the gloves are possessed!") + return OXYLOSS + +/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") + if(blood_DNA) + . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands", color = blood_DNA_to_color()) + +/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_gloves() + +// Called just before an attack_hand(), in mob/UnarmedAttack() +/obj/item/clothing/gloves/proc/Touch(atom/A, proximity) + return FALSE // return TRUE to cancel attack_hand() diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index b420ee67..7eaf05f2 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -1,113 +1,113 @@ -/obj/item/clothing/shoes - name = "shoes" - icon = 'icons/obj/clothing/shoes.dmi' - desc = "Comfortable-looking shoes." - gender = PLURAL //Carn: for grammarically correct text-parsing - var/chained = 0 - - body_parts_covered = FEET - slot_flags = ITEM_SLOT_FEET - - permeability_coefficient = 0.5 - slowdown = SHOES_SLOWDOWN - var/blood_state = BLOOD_STATE_NOT_BLOODY - var/list/bloody_shoes = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) - var/offset = 0 - var/equipped_before_drop = FALSE - - //CITADEL EDIT Enables digitigrade shoe styles - var/adjusted = NORMAL_STYLE - mutantrace_variation = MUTANTRACE_VARIATION - var/last_bloodtype = "" //used to track the last bloodtype to have graced these shoes; makes for better performing footprint shenanigans - var/last_blood_DNA = "" //same as last one - -/obj/item/clothing/shoes/ComponentInitialize() - . = ..() - AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT = CALLBACK(src, /obj/item/clothing/shoes/clean_blood))) - -/obj/item/clothing/shoes/suicide_act(mob/living/carbon/user) - if(rand(2)>1) - user.visible_message("[user] begins tying \the [src] up waaay too tightly! It looks like [user.p_theyre()] trying to commit suicide!") - var/obj/item/bodypart/l_leg = user.get_bodypart(BODY_ZONE_L_LEG) - var/obj/item/bodypart/r_leg = user.get_bodypart(BODY_ZONE_R_LEG) - if(l_leg) - l_leg.dismember() - playsound(user,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1) - if(r_leg) - r_leg.dismember() - playsound(user,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1) - return BRUTELOSS - else//didnt realize this suicide act existed (was in miscellaneous.dm) and didnt want to remove it, so made it a 50/50 chance. Why not! - user.visible_message("[user] is bashing [user.p_their()] own head in with [src]! Ain't that a kick in the head?") - for(var/i = 0, i < 3, i++) - sleep(3) - playsound(user, 'sound/weapons/genhit2.ogg', 50, 1) - return(BRUTELOSS) - -/obj/item/clothing/shoes/transfer_blood_dna(list/blood_dna, diseases) - ..() - if(blood_dna.len) - last_bloodtype = blood_dna[blood_dna[blood_dna.len]]//trust me this works - last_blood_DNA = blood_dna[blood_dna.len] - -/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) - . = list() - if(!isinhands) - var/bloody = FALSE - if(blood_DNA) - bloody = TRUE - else - bloody = bloody_shoes[BLOOD_STATE_BLOOD] - - if(damaged_clothes) - . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") - if(bloody) - if(adjusted == NORMAL_STYLE) - . += mutable_appearance('icons/effects/blood.dmi', "shoeblood", color = blood_DNA_to_color()) - else - . += mutable_appearance('modular_citadel/icons/mob/digishoes.dmi', "shoeblood", color = blood_DNA_to_color()) - -/obj/item/clothing/shoes/equipped(mob/user, slot) - . = ..() - - if(mutantrace_variation && ishuman(user)) - var/mob/living/carbon/human/H = user - if(DIGITIGRADE in H.dna.species.species_traits) - adjusted = ALT_STYLE - H.update_inv_shoes() - else if(adjusted == ALT_STYLE) - adjusted = NORMAL_STYLE - H.update_inv_shoes() - - if(offset && slot_flags & slotdefine2slotbit(slot)) - user.pixel_y += offset - worn_y_dimension -= (offset * 2) - user.update_inv_shoes() - equipped_before_drop = TRUE - -/obj/item/clothing/shoes/proc/restore_offsets(mob/user) - equipped_before_drop = FALSE - user.pixel_y -= offset - worn_y_dimension = world.icon_size - -/obj/item/clothing/shoes/dropped(mob/user) - if(offset && equipped_before_drop) - restore_offsets(user) - . = ..() - -/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE) - ..() - if(ismob(loc)) - var/mob/M = loc - M.update_inv_shoes() - -/obj/item/clothing/shoes/clean_blood(datum/source, strength) - . = ..() - bloody_shoes = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) - blood_state = BLOOD_STATE_NOT_BLOODY - if(ismob(loc)) - var/mob/M = loc - M.update_inv_shoes() - -/obj/item/proc/negates_gravity() - return FALSE +/obj/item/clothing/shoes + name = "shoes" + icon = 'icons/obj/clothing/shoes.dmi' + desc = "Comfortable-looking shoes." + gender = PLURAL //Carn: for grammarically correct text-parsing + var/chained = 0 + + body_parts_covered = FEET + slot_flags = ITEM_SLOT_FEET + + permeability_coefficient = 0.5 + slowdown = SHOES_SLOWDOWN + var/blood_state = BLOOD_STATE_NOT_BLOODY + var/list/bloody_shoes = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + var/offset = 0 + var/equipped_before_drop = FALSE + + //CITADEL EDIT Enables digitigrade shoe styles + var/adjusted = NORMAL_STYLE + mutantrace_variation = MUTANTRACE_VARIATION + var/last_bloodtype = "" //used to track the last bloodtype to have graced these shoes; makes for better performing footprint shenanigans + var/last_blood_DNA = "" //same as last one + +/obj/item/clothing/shoes/ComponentInitialize() + . = ..() + RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /obj/item/clothing/shoes/clean_blood) + +/obj/item/clothing/shoes/suicide_act(mob/living/carbon/user) + if(rand(2)>1) + user.visible_message("[user] begins tying \the [src] up waaay too tightly! It looks like [user.p_theyre()] trying to commit suicide!") + var/obj/item/bodypart/l_leg = user.get_bodypart(BODY_ZONE_L_LEG) + var/obj/item/bodypart/r_leg = user.get_bodypart(BODY_ZONE_R_LEG) + if(l_leg) + l_leg.dismember() + playsound(user,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1) + if(r_leg) + r_leg.dismember() + playsound(user,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1) + return BRUTELOSS + else//didnt realize this suicide act existed (was in miscellaneous.dm) and didnt want to remove it, so made it a 50/50 chance. Why not! + user.visible_message("[user] is bashing [user.p_their()] own head in with [src]! Ain't that a kick in the head?") + for(var/i = 0, i < 3, i++) + sleep(3) + playsound(user, 'sound/weapons/genhit2.ogg', 50, 1) + return(BRUTELOSS) + +/obj/item/clothing/shoes/transfer_blood_dna(list/blood_dna, diseases) + ..() + if(blood_dna.len) + last_bloodtype = blood_dna[blood_dna[blood_dna.len]]//trust me this works + last_blood_DNA = blood_dna[blood_dna.len] + +/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) + . = list() + if(!isinhands) + var/bloody = FALSE + if(blood_DNA) + bloody = TRUE + else + bloody = bloody_shoes[BLOOD_STATE_BLOOD] + + if(damaged_clothes) + . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") + if(bloody) + if(adjusted == NORMAL_STYLE) + . += mutable_appearance('icons/effects/blood.dmi', "shoeblood", color = blood_DNA_to_color()) + else + . += mutable_appearance('modular_citadel/icons/mob/digishoes.dmi', "shoeblood", color = blood_DNA_to_color()) + +/obj/item/clothing/shoes/equipped(mob/user, slot) + . = ..() + + if(mutantrace_variation && ishuman(user)) + var/mob/living/carbon/human/H = user + if(DIGITIGRADE in H.dna.species.species_traits) + adjusted = ALT_STYLE + H.update_inv_shoes() + else if(adjusted == ALT_STYLE) + adjusted = NORMAL_STYLE + H.update_inv_shoes() + + if(offset && slot_flags & slotdefine2slotbit(slot)) + user.pixel_y += offset + worn_y_dimension -= (offset * 2) + user.update_inv_shoes() + equipped_before_drop = TRUE + +/obj/item/clothing/shoes/proc/restore_offsets(mob/user) + equipped_before_drop = FALSE + user.pixel_y -= offset + worn_y_dimension = world.icon_size + +/obj/item/clothing/shoes/dropped(mob/user) + if(offset && equipped_before_drop) + restore_offsets(user) + . = ..() + +/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE) + ..() + if(ismob(loc)) + var/mob/M = loc + M.update_inv_shoes() + +/obj/item/clothing/shoes/clean_blood(datum/source, strength) + . = ..() + bloody_shoes = list(BLOOD_STATE_BLOOD = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + blood_state = BLOOD_STATE_NOT_BLOODY + if(ismob(loc)) + var/mob/M = loc + M.update_inv_shoes() + +/obj/item/proc/negates_gravity() + return FALSE diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 5893e970..83315a40 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -604,7 +604,6 @@ armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75) item_color = "ancient" resistance_flags = FIRE_PROOF - var/datum/component/mobhook /obj/item/clothing/suit/space/hardsuit/ancient name = "prototype RIG hardsuit" @@ -616,7 +615,7 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient resistance_flags = FIRE_PROOF var/footstep = 1 - var/datum/component/mobhook + var/mob/listeningTo /obj/item/clothing/suit/space/hardsuit/ancient/mason name = "M.A.S.O.N RIG" @@ -673,20 +672,24 @@ /obj/item/clothing/suit/space/hardsuit/ancient/equipped(mob/user, slot) . = ..() - if (slot == SLOT_WEAR_SUIT) - if (mobhook && mobhook.parent != user) - QDEL_NULL(mobhook) - if (!mobhook) - mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_mob_move))) - else - QDEL_NULL(mobhook) + if(slot != SLOT_WEAR_SUIT) + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + return + if(listeningTo == user) + return + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/on_mob_move) + listeningTo = user /obj/item/clothing/suit/space/hardsuit/ancient/dropped() . = ..() - QDEL_NULL(mobhook) + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) /obj/item/clothing/suit/space/hardsuit/ancient/Destroy() - QDEL_NULL(mobhook) // mobhook is not our component + listeningTo = null return ..() /////////////SHIELDED////////////////////////////////// diff --git a/code/modules/fields/fields.dm b/code/modules/fields/fields.dm index 5e34c934..5b0b4bc1 100644 --- a/code/modules/fields/fields.dm +++ b/code/modules/fields/fields.dm @@ -283,7 +283,7 @@ var/field_type = /datum/proximity_monitor/advanced/debug var/operating = FALSE var/datum/proximity_monitor/advanced/current = null - var/datum/component/mobhook + var/mob/listeningTo /obj/item/multitool/field_debug/Initialize() . = ..() @@ -292,7 +292,7 @@ /obj/item/multitool/field_debug/Destroy() STOP_PROCESSING(SSobj, src) QDEL_NULL(current) - QDEL_NULL(mobhook) + listeningTo = null return ..() /obj/item/multitool/field_debug/proc/setup_debug_field() @@ -303,16 +303,20 @@ /obj/item/multitool/field_debug/attack_self(mob/user) operating = !operating to_chat(user, "You turn [src] [operating? "on":"off"].") - QDEL_NULL(mobhook) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + listeningTo = null if(!istype(current) && operating) - mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_mob_move))) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/on_mob_move) + listeningTo = user setup_debug_field() else if(!operating) QDEL_NULL(current) /obj/item/multitool/field_debug/dropped() . = ..() - QDEL_NULL(mobhook) + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + listeningTo = null /obj/item/multitool/field_debug/proc/on_mob_move() check_turf(get_turf(src)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 60113b98..798a73f4 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -29,7 +29,7 @@ . = ..() - AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT = CALLBACK(src, /mob/living/carbon/human/clean_blood))) + RegisterSignal(src, COMSIG_COMPONENT_CLEAN_ACT, /mob/living/carbon/human/clean_blood) /mob/living/carbon/human/ComponentInitialize() diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index bcf44805..b6e6a01d 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -1,567 +1,570 @@ - -#define ZOOM_LOCK_AUTOZOOM_FREEMOVE 0 -#define ZOOM_LOCK_AUTOZOOM_ANGLELOCK 1 -#define ZOOM_LOCK_CENTER_VIEW 2 -#define ZOOM_LOCK_OFF 3 - -#define AUTOZOOM_PIXEL_STEP_FACTOR 48 - -#define AIMING_BEAM_ANGLE_CHANGE_THRESHOLD 0.1 - -/obj/item/gun/energy/beam_rifle - name = "particle acceleration rifle" - desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one. \ - Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or \ - changing where you're pointing at while aiming will delay the aiming process depending on how much you changed." - icon = 'icons/obj/guns/energy.dmi' - icon_state = "esniper" - item_state = "esniper" - fire_sound = 'sound/weapons/beam_sniper.ogg' - slot_flags = ITEM_SLOT_BACK - force = 15 - materials = list() - recoil = 4 - ammo_x_offset = 3 - ammo_y_offset = 3 - modifystate = FALSE - weapon_weight = WEAPON_HEAVY - w_class = WEIGHT_CLASS_BULKY - ammo_type = list(/obj/item/ammo_casing/energy/beam_rifle/hitscan) - cell_type = /obj/item/stock_parts/cell/beam_rifle - canMouseDown = TRUE - //Cit changes: beam rifle stats. - slowdown = 1 - item_flags = NO_MAT_REDEMPTION | SLOWS_WHILE_IN_HAND | NEEDS_PERMIT - pin = null - var/aiming = FALSE - var/aiming_time = 14 - var/aiming_time_fire_threshold = 5 - var/aiming_time_left = 14 - var/aiming_time_increase_user_movement = 7 - var/aiming_time_increase_angle_multiplier = 0.30 - var/last_process = 0 - - var/lastangle = 0 - var/aiming_lastangle = 0 - var/mob/current_user = null - var/list/obj/effect/projectile/tracer/current_tracers - - var/structure_piercing = 1 - var/structure_bleed_coeff = 0.7 - var/wall_pierce_amount = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 1 - var/aoe_structure_damage = 35 - var/aoe_fire_range = 1 - var/aoe_fire_chance = 100 - var/aoe_mob_range = 1 - var/aoe_mob_damage = 20 - var/impact_structure_damage = 75 - var/projectile_damage = 40 - var/projectile_stun = 0 - var/projectile_setting_pierce = TRUE - var/delay = 30 - var/lastfire = 0 - - //ZOOMING - var/zoom_current_view_increase = 0 - var/zoom_target_view_increase = 10 - var/zooming = FALSE - var/zoom_lock = ZOOM_LOCK_OFF - var/zooming_angle - var/current_zoom_x = 0 - var/current_zoom_y = 0 - - var/static/image/charged_overlay = image(icon = 'icons/obj/guns/energy.dmi', icon_state = "esniper_charged") - var/static/image/drained_overlay = image(icon = 'icons/obj/guns/energy.dmi', icon_state = "esniper_empty") - - var/datum/action/item_action/zoom_lock_action/zoom_lock_action - var/datum/component/mobhook - -/obj/item/gun/energy/beam_rifle/debug - delay = 0 - cell_type = /obj/item/stock_parts/cell/infinite - aiming_time = 0 - recoil = 0 - pin = /obj/item/firing_pin - -/obj/item/gun/energy/beam_rifle/equipped(mob/user) - set_user(user) - . = ..() - -/obj/item/gun/energy/beam_rifle/pickup(mob/user) - set_user(user) - . = ..() - -/obj/item/gun/energy/beam_rifle/dropped(mob/user) - set_user() - . = ..() - -/obj/item/gun/energy/beam_rifle/ui_action_click(owner, action) - if(istype(action, /datum/action/item_action/zoom_lock_action)) - zoom_lock++ - if(zoom_lock > 3) - zoom_lock = 0 - switch(zoom_lock) - if(ZOOM_LOCK_AUTOZOOM_FREEMOVE) - to_chat(owner, "You switch [src]'s zooming processor to free directional.") - if(ZOOM_LOCK_AUTOZOOM_ANGLELOCK) - to_chat(owner, "You switch [src]'s zooming processor to locked directional.") - if(ZOOM_LOCK_CENTER_VIEW) - to_chat(owner, "You switch [src]'s zooming processor to center mode.") - if(ZOOM_LOCK_OFF) - to_chat(owner, "You disable [src]'s zooming system.") - reset_zooming() - -/obj/item/gun/energy/beam_rifle/proc/set_autozoom_pixel_offsets_immediate(current_angle) - if(zoom_lock == ZOOM_LOCK_CENTER_VIEW || zoom_lock == ZOOM_LOCK_OFF) - return - current_zoom_x = sin(current_angle) + sin(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase - current_zoom_y = cos(current_angle) + cos(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase - -/obj/item/gun/energy/beam_rifle/proc/handle_zooming() - if(!zooming || !check_user()) - return - set_autozoom_pixel_offsets_immediate(zooming_angle) - -/obj/item/gun/energy/beam_rifle/proc/start_zooming() - if(zoom_lock == ZOOM_LOCK_OFF) - return - zooming = TRUE - current_user.client.change_view(world.view + zoom_target_view_increase) - zoom_current_view_increase = zoom_target_view_increase - -/obj/item/gun/energy/beam_rifle/proc/stop_zooming(mob/user) - if(zooming) - zooming = FALSE - reset_zooming(user) - -/obj/item/gun/energy/beam_rifle/proc/reset_zooming(mob/user) - if(!user) - user = current_user - if(!user || !user.client) - return FALSE - animate(user.client, pixel_x = 0, pixel_y = 0, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW) - zoom_current_view_increase = 0 - user.client.change_view(CONFIG_GET(string/default_view)) - zooming_angle = 0 - current_zoom_x = 0 - current_zoom_y = 0 - -/obj/item/gun/energy/beam_rifle/update_icon() - cut_overlays() - var/obj/item/ammo_casing/energy/primary_ammo = ammo_type[1] - if(!QDELETED(cell) && (cell.charge > primary_ammo.e_cost)) - add_overlay(charged_overlay) - else - add_overlay(drained_overlay) - -/obj/item/gun/energy/beam_rifle/attack_self(mob/user) - projectile_setting_pierce = !projectile_setting_pierce - to_chat(user, "You set \the [src] to [projectile_setting_pierce? "pierce":"impact"] mode.") - aiming_beam() - -/obj/item/gun/energy/beam_rifle/Initialize() - . = ..() - fire_delay = delay - current_tracers = list() - START_PROCESSING(SSfastprocess, src) - zoom_lock_action = new(src) - -/obj/item/gun/energy/beam_rifle/Destroy() - STOP_PROCESSING(SSfastprocess, src) - set_user(null) - QDEL_LIST(current_tracers) - QDEL_NULL(mobhook) - return ..() - -/obj/item/gun/energy/beam_rifle/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - chambered = null - recharge_newshot() - -/obj/item/gun/energy/beam_rifle/proc/aiming_beam(force_update = FALSE) - var/diff = abs(aiming_lastangle - lastangle) - check_user() - if(diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD && !force_update) - return - aiming_lastangle = lastangle - var/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/P = new - P.gun = src - P.wall_pierce_amount = wall_pierce_amount - P.structure_pierce_amount = structure_piercing - P.do_pierce = projectile_setting_pierce - if(aiming_time) - var/percent = ((100/aiming_time)*aiming_time_left) - P.color = rgb(255 * percent,255 * ((100 - percent) / 100),0) - else - P.color = rgb(0, 255, 0) - var/turf/curloc = get_turf(src) - var/turf/targloc = get_turf(current_user.client.mouseObject) - if(!istype(targloc)) - if(!istype(curloc)) - return - targloc = get_turf_in_angle(lastangle, curloc, 10) - P.preparePixelProjectile(targloc, current_user, current_user.client.mouseParams, 0) - P.fire(lastangle) - -/obj/item/gun/energy/beam_rifle/process() - if(!aiming) - last_process = world.time - return - check_user() - handle_zooming() - aiming_time_left = max(0, aiming_time_left - (world.time - last_process)) - aiming_beam(TRUE) - last_process = world.time - -/obj/item/gun/energy/beam_rifle/proc/check_user(automatic_cleanup = TRUE) - if(!istype(current_user) || !isturf(current_user.loc) || !(src in current_user.held_items) || current_user.incapacitated()) //Doesn't work if you're not holding it! - if(automatic_cleanup) - stop_aiming() - set_user(null) - return FALSE - return TRUE - -/obj/item/gun/energy/beam_rifle/proc/process_aim() - if(istype(current_user) && current_user.client && current_user.client.mouseParams) - var/angle = mouse_angle_from_client(current_user.client) - current_user.setDir(angle2dir_cardinal(angle)) - var/difference = abs(closer_angle_difference(lastangle, angle)) - delay_penalty(difference * aiming_time_increase_angle_multiplier) - lastangle = angle - -/obj/item/gun/energy/beam_rifle/proc/on_mob_move() - check_user() - if(aiming) - delay_penalty(aiming_time_increase_user_movement) - process_aim() - aiming_beam(TRUE) - -/obj/item/gun/energy/beam_rifle/proc/start_aiming() - aiming_time_left = aiming_time - aiming = TRUE - process_aim() - aiming_beam(TRUE) - zooming_angle = lastangle - start_zooming() - -/obj/item/gun/energy/beam_rifle/proc/stop_aiming(mob/user) - set waitfor = FALSE - aiming_time_left = aiming_time - aiming = FALSE - QDEL_LIST(current_tracers) - stop_zooming(user) - -/obj/item/gun/energy/beam_rifle/proc/set_user(mob/user) - if(user == current_user) - return - stop_aiming(current_user) - QDEL_NULL(mobhook) - if(istype(current_user)) - LAZYREMOVE(current_user.mousemove_intercept_objects, src) - current_user = null - if(istype(user)) - current_user = user - LAZYOR(current_user.mousemove_intercept_objects, src) - mobhook = user.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_mob_move))) - -/obj/item/gun/energy/beam_rifle/onMouseDrag(src_object, over_object, src_location, over_location, params, mob) - if(aiming) - process_aim() - aiming_beam() - if(zoom_lock == ZOOM_LOCK_AUTOZOOM_FREEMOVE) - zooming_angle = lastangle - set_autozoom_pixel_offsets_immediate(zooming_angle) - return ..() - -/obj/item/gun/energy/beam_rifle/onMouseDown(object, location, params, mob/mob) - if(istype(mob)) - set_user(mob) - if(istype(object, /obj/screen) && !istype(object, /obj/screen/click_catcher)) - return - if((object in mob.contents) || (object == mob)) - return - start_aiming() - return ..() - -/obj/item/gun/energy/beam_rifle/onMouseUp(object, location, params, mob/M) - if(istype(object, /obj/screen) && !istype(object, /obj/screen/click_catcher)) - return - process_aim() - if(aiming_time_left <= aiming_time_fire_threshold && check_user()) - sync_ammo() - afterattack(M.client.mouseObject, M, FALSE, M.client.mouseParams, passthrough = TRUE) - stop_aiming() - QDEL_LIST(current_tracers) - return ..() - -/obj/item/gun/energy/beam_rifle/afterattack(atom/target, mob/living/user, flag, params, passthrough = FALSE) - if(flag) //It's adjacent, is the user, or is on the user's person - if(target in user.contents) //can't shoot stuff inside us. - return - if(!ismob(target) || user.a_intent == INTENT_HARM) //melee attack - return - if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected) - return - if(!passthrough && (aiming_time > aiming_time_fire_threshold)) - return - if(lastfire > world.time + delay) - return - lastfire = world.time - . = ..() - stop_aiming() - -/obj/item/gun/energy/beam_rifle/proc/sync_ammo() - for(var/obj/item/ammo_casing/energy/beam_rifle/AC in contents) - AC.sync_stats() - -/obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount) - aiming_time_left = CLAMP(aiming_time_left + amount, 0, aiming_time) - -/obj/item/ammo_casing/energy/beam_rifle - name = "particle acceleration lens" - desc = "Don't look into barrel!" - var/wall_pierce_amount = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 1 - var/aoe_structure_damage = 30 - var/aoe_fire_range = 2 - var/aoe_fire_chance = 66 - var/aoe_mob_range = 1 - var/aoe_mob_damage = 20 - var/impact_structure_damage = 50 - var/projectile_damage = 40 - var/projectile_stun = 0 - var/structure_piercing = 2 - var/structure_bleed_coeff = 0.7 - var/do_pierce = TRUE - var/obj/item/gun/energy/beam_rifle/host - -/obj/item/ammo_casing/energy/beam_rifle/proc/sync_stats() - var/obj/item/gun/energy/beam_rifle/BR = loc - if(!istype(BR)) - stack_trace("Beam rifle syncing error") - host = BR - do_pierce = BR.projectile_setting_pierce - wall_pierce_amount = BR.wall_pierce_amount - wall_devastate = BR.wall_devastate - aoe_structure_range = BR.aoe_structure_range - aoe_structure_damage = BR.aoe_structure_damage - aoe_fire_range = BR.aoe_fire_range - aoe_fire_chance = BR.aoe_fire_chance - aoe_mob_range = BR.aoe_mob_range - aoe_mob_damage = BR.aoe_mob_damage - impact_structure_damage = BR.impact_structure_damage - projectile_damage = BR.projectile_damage - projectile_stun = BR.projectile_stun - delay = BR.delay - structure_piercing = BR.structure_piercing - structure_bleed_coeff = BR.structure_bleed_coeff - -/obj/item/ammo_casing/energy/beam_rifle/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") - . = ..() - var/obj/item/projectile/beam/beam_rifle/hitscan/HS_BB = BB - if(!istype(HS_BB)) - return - HS_BB.impact_direct_damage = projectile_damage - HS_BB.stun = projectile_stun - HS_BB.impact_structure_damage = impact_structure_damage - HS_BB.aoe_mob_damage = aoe_mob_damage - HS_BB.aoe_mob_range = CLAMP(aoe_mob_range, 0, 15) //Badmin safety lock - HS_BB.aoe_fire_chance = aoe_fire_chance - HS_BB.aoe_fire_range = aoe_fire_range - HS_BB.aoe_structure_damage = aoe_structure_damage - HS_BB.aoe_structure_range = CLAMP(aoe_structure_range, 0, 15) //Badmin safety lock - HS_BB.wall_devastate = wall_devastate - HS_BB.wall_pierce_amount = wall_pierce_amount - HS_BB.structure_pierce_amount = structure_piercing - HS_BB.structure_bleed_coeff = structure_bleed_coeff - HS_BB.do_pierce = do_pierce - HS_BB.gun = host - -/obj/item/ammo_casing/energy/beam_rifle/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread) - var/turf/curloc = get_turf(user) - if(!istype(curloc) || !BB) - return FALSE - var/obj/item/gun/energy/beam_rifle/gun = loc - if(!targloc && gun) - targloc = get_turf_in_angle(gun.lastangle, curloc, 10) - else if(!targloc) - return FALSE - var/firing_dir - if(BB.firer) - firing_dir = BB.firer.dir - if(!BB.suppressed && firing_effect_type) - new firing_effect_type(get_turf(src), firing_dir) - BB.preparePixelProjectile(target, user, params, spread) - BB.fire(gun? gun.lastangle : null, null) - BB = null - return TRUE - -/obj/item/ammo_casing/energy/beam_rifle/hitscan - projectile_type = /obj/item/projectile/beam/beam_rifle/hitscan - select_name = "beam" - e_cost = 5000 - fire_sound = 'sound/weapons/beam_sniper.ogg' - -/obj/item/projectile/beam/beam_rifle - name = "particle beam" - icon = null - hitsound = 'sound/effects/explosion3.ogg' - damage = 0 //Handled manually. - damage_type = BURN - flag = "energy" - range = 150 - jitter = 10 - var/obj/item/gun/energy/beam_rifle/gun - var/structure_pierce_amount = 0 //All set to 0 so the gun can manually set them during firing. - var/structure_bleed_coeff = 0 - var/structure_pierce = 0 - var/do_pierce = TRUE - var/wall_pierce_amount = 0 - var/wall_pierce = 0 - var/wall_devastate = 0 - var/aoe_structure_range = 0 - var/aoe_structure_damage = 0 - var/aoe_fire_range = 0 - var/aoe_fire_chance = 0 - var/aoe_mob_range = 0 - var/aoe_mob_damage = 0 - var/impact_structure_damage = 0 - var/impact_direct_damage = 0 - var/turf/cached - var/list/pierced = list() - -/obj/item/projectile/beam/beam_rifle/proc/AOE(turf/epicenter) - set waitfor = FALSE - if(!epicenter) - return - new /obj/effect/temp_visual/explosion/fast(epicenter) - for(var/mob/living/L in range(aoe_mob_range, epicenter)) //handle aoe mob damage - L.adjustFireLoss(aoe_mob_damage) - to_chat(L, "\The [src] sears you!") - for(var/turf/T in range(aoe_fire_range, epicenter)) //handle aoe fire - if(prob(aoe_fire_chance)) - new /obj/effect/hotspot(T) - for(var/obj/O in range(aoe_structure_range, epicenter)) - if(!isitem(O)) - if(O.level == 1) //Please don't break underfloor items! - continue - O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, "laser", FALSE) - -/obj/item/projectile/beam/beam_rifle/proc/check_pierce(atom/target) - if(!do_pierce) - return FALSE - if(pierced[target]) //we already pierced them go away - return TRUE - if(isclosedturf(target)) - if(wall_pierce++ < wall_pierce_amount) - if(prob(wall_devastate)) - if(iswallturf(target)) - var/turf/closed/wall/W = target - W.dismantle_wall(TRUE, TRUE) - else - target.ex_act(EXPLODE_HEAVY) - return TRUE - if(ismovableatom(target)) - var/atom/movable/AM = target - if(AM.density && !AM.CanPass(src, get_turf(target)) && !ismob(AM)) - if(structure_pierce < structure_pierce_amount) - if(isobj(AM)) - var/obj/O = AM - O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(AM), BURN, "energy", FALSE) - pierced[AM] = TRUE - structure_pierce++ - return TRUE - return FALSE - -/obj/item/projectile/beam/beam_rifle/proc/get_damage_coeff(atom/target) - if(istype(target, /obj/machinery/door)) - return 0.4 - if(istype(target, /obj/structure/window)) - return 0.5 - if(istype(target, /obj/structure/blob)) - return 0.65 //CIT CHANGE. - return 1 - -/obj/item/projectile/beam/beam_rifle/proc/handle_impact(atom/target) - if(isobj(target)) - var/obj/O = target - O.take_damage(impact_structure_damage * get_damage_coeff(target), BURN, "laser", FALSE) - if(isliving(target)) - var/mob/living/L = target - L.adjustFireLoss(impact_direct_damage) - L.emote("scream") - -/obj/item/projectile/beam/beam_rifle/proc/handle_hit(atom/target) - set waitfor = FALSE - if(!cached && !QDELETED(target)) - cached = get_turf(target) - if(nodamage) - return FALSE - playsound(cached, 'sound/effects/explosion3.ogg', 100, 1) - AOE(cached) - if(!QDELETED(target)) - handle_impact(target) - -/obj/item/projectile/beam/beam_rifle/Bump(atom/target) - if(check_pierce(target)) - permutated += target - trajectory_ignore_forcemove = TRUE - forceMove(target.loc) - trajectory_ignore_forcemove = FALSE - return FALSE - if(!QDELETED(target)) - cached = get_turf(target) - . = ..() - -/obj/item/projectile/beam/beam_rifle/on_hit(atom/target, blocked = FALSE) - if(!QDELETED(target)) - cached = get_turf(target) - handle_hit(target) - . = ..() - -/obj/item/projectile/beam/beam_rifle/hitscan - icon_state = "" - hitscan = TRUE - tracer_type = /obj/effect/projectile/tracer/tracer/beam_rifle - var/constant_tracer = FALSE - -/obj/item/projectile/beam/beam_rifle/hitscan/generate_hitscan_tracers(cleanup = TRUE, duration = 5, impacting = TRUE, highlander) - set waitfor = FALSE - if(isnull(highlander)) - highlander = constant_tracer - if(highlander && istype(gun)) - QDEL_LIST(gun.current_tracers) - for(var/datum/point/p in beam_segments) - gun.current_tracers += generate_tracer_between_points(p, beam_segments[p], tracer_type, color, 0, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) - else - for(var/datum/point/p in beam_segments) - generate_tracer_between_points(p, beam_segments[p], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) - if(cleanup) - QDEL_LIST(beam_segments) - beam_segments = null - QDEL_NULL(beam_index) - -/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam - tracer_type = /obj/effect/projectile/tracer/tracer/aiming - name = "aiming beam" - hitsound = null - hitsound_wall = null - nodamage = TRUE - damage = 0 - constant_tracer = TRUE - hitscan_light_range = 0 - hitscan_light_intensity = 0 - hitscan_light_color_override = "#99ff99" - -/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit(atom/target) - qdel(src) - return FALSE - -/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit() - qdel(src) - return FALSE + +#define ZOOM_LOCK_AUTOZOOM_FREEMOVE 0 +#define ZOOM_LOCK_AUTOZOOM_ANGLELOCK 1 +#define ZOOM_LOCK_CENTER_VIEW 2 +#define ZOOM_LOCK_OFF 3 + +#define AUTOZOOM_PIXEL_STEP_FACTOR 48 + +#define AIMING_BEAM_ANGLE_CHANGE_THRESHOLD 0.1 + +/obj/item/gun/energy/beam_rifle + name = "particle acceleration rifle" + desc = "An energy-based anti material marksman rifle that uses highly charged particle beams moving at extreme velocities to decimate whatever is unfortunate enough to be targeted by one. \ + Hold down left click while scoped to aim, when weapon is fully aimed (Tracer goes from red to green as it charges), release to fire. Moving while aiming or \ + changing where you're pointing at while aiming will delay the aiming process depending on how much you changed." + icon = 'icons/obj/guns/energy.dmi' + icon_state = "esniper" + item_state = "esniper" + fire_sound = 'sound/weapons/beam_sniper.ogg' + slot_flags = ITEM_SLOT_BACK + force = 15 + materials = list() + recoil = 4 + ammo_x_offset = 3 + ammo_y_offset = 3 + modifystate = FALSE + weapon_weight = WEAPON_HEAVY + w_class = WEIGHT_CLASS_BULKY + ammo_type = list(/obj/item/ammo_casing/energy/beam_rifle/hitscan) + cell_type = /obj/item/stock_parts/cell/beam_rifle + canMouseDown = TRUE + //Cit changes: beam rifle stats. + slowdown = 1 + item_flags = NO_MAT_REDEMPTION | SLOWS_WHILE_IN_HAND | NEEDS_PERMIT + pin = null + var/aiming = FALSE + var/aiming_time = 14 + var/aiming_time_fire_threshold = 5 + var/aiming_time_left = 14 + var/aiming_time_increase_user_movement = 7 + var/aiming_time_increase_angle_multiplier = 0.30 + var/last_process = 0 + + var/lastangle = 0 + var/aiming_lastangle = 0 + var/mob/current_user = null + var/list/obj/effect/projectile/tracer/current_tracers + + var/structure_piercing = 1 + var/structure_bleed_coeff = 0.7 + var/wall_pierce_amount = 0 + var/wall_devastate = 0 + var/aoe_structure_range = 1 + var/aoe_structure_damage = 35 + var/aoe_fire_range = 1 + var/aoe_fire_chance = 100 + var/aoe_mob_range = 1 + var/aoe_mob_damage = 20 + var/impact_structure_damage = 75 + var/projectile_damage = 40 + var/projectile_stun = 0 + var/projectile_setting_pierce = TRUE + var/delay = 30 + var/lastfire = 0 + + //ZOOMING + var/zoom_current_view_increase = 0 + var/zoom_target_view_increase = 10 + var/zooming = FALSE + var/zoom_lock = ZOOM_LOCK_OFF + var/zooming_angle + var/current_zoom_x = 0 + var/current_zoom_y = 0 + + var/static/image/charged_overlay = image(icon = 'icons/obj/guns/energy.dmi', icon_state = "esniper_charged") + var/static/image/drained_overlay = image(icon = 'icons/obj/guns/energy.dmi', icon_state = "esniper_empty") + + var/datum/action/item_action/zoom_lock_action/zoom_lock_action + var/mob/listeningTo + +/obj/item/gun/energy/beam_rifle/debug + delay = 0 + cell_type = /obj/item/stock_parts/cell/infinite + aiming_time = 0 + recoil = 0 + pin = /obj/item/firing_pin + +/obj/item/gun/energy/beam_rifle/equipped(mob/user) + set_user(user) + . = ..() + +/obj/item/gun/energy/beam_rifle/pickup(mob/user) + set_user(user) + . = ..() + +/obj/item/gun/energy/beam_rifle/dropped(mob/user) + set_user() + . = ..() + +/obj/item/gun/energy/beam_rifle/ui_action_click(owner, action) + if(istype(action, /datum/action/item_action/zoom_lock_action)) + zoom_lock++ + if(zoom_lock > 3) + zoom_lock = 0 + switch(zoom_lock) + if(ZOOM_LOCK_AUTOZOOM_FREEMOVE) + to_chat(owner, "You switch [src]'s zooming processor to free directional.") + if(ZOOM_LOCK_AUTOZOOM_ANGLELOCK) + to_chat(owner, "You switch [src]'s zooming processor to locked directional.") + if(ZOOM_LOCK_CENTER_VIEW) + to_chat(owner, "You switch [src]'s zooming processor to center mode.") + if(ZOOM_LOCK_OFF) + to_chat(owner, "You disable [src]'s zooming system.") + reset_zooming() + +/obj/item/gun/energy/beam_rifle/proc/set_autozoom_pixel_offsets_immediate(current_angle) + if(zoom_lock == ZOOM_LOCK_CENTER_VIEW || zoom_lock == ZOOM_LOCK_OFF) + return + current_zoom_x = sin(current_angle) + sin(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase + current_zoom_y = cos(current_angle) + cos(current_angle) * AUTOZOOM_PIXEL_STEP_FACTOR * zoom_current_view_increase + +/obj/item/gun/energy/beam_rifle/proc/handle_zooming() + if(!zooming || !check_user()) + return + set_autozoom_pixel_offsets_immediate(zooming_angle) + +/obj/item/gun/energy/beam_rifle/proc/start_zooming() + if(zoom_lock == ZOOM_LOCK_OFF) + return + zooming = TRUE + current_user.client.change_view(world.view + zoom_target_view_increase) + zoom_current_view_increase = zoom_target_view_increase + +/obj/item/gun/energy/beam_rifle/proc/stop_zooming(mob/user) + if(zooming) + zooming = FALSE + reset_zooming(user) + +/obj/item/gun/energy/beam_rifle/proc/reset_zooming(mob/user) + if(!user) + user = current_user + if(!user || !user.client) + return FALSE + animate(user.client, pixel_x = 0, pixel_y = 0, 0, FALSE, LINEAR_EASING, ANIMATION_END_NOW) + zoom_current_view_increase = 0 + user.client.change_view(CONFIG_GET(string/default_view)) + zooming_angle = 0 + current_zoom_x = 0 + current_zoom_y = 0 + +/obj/item/gun/energy/beam_rifle/update_icon() + cut_overlays() + var/obj/item/ammo_casing/energy/primary_ammo = ammo_type[1] + if(!QDELETED(cell) && (cell.charge > primary_ammo.e_cost)) + add_overlay(charged_overlay) + else + add_overlay(drained_overlay) + +/obj/item/gun/energy/beam_rifle/attack_self(mob/user) + projectile_setting_pierce = !projectile_setting_pierce + to_chat(user, "You set \the [src] to [projectile_setting_pierce? "pierce":"impact"] mode.") + aiming_beam() + +/obj/item/gun/energy/beam_rifle/Initialize() + . = ..() + fire_delay = delay + current_tracers = list() + START_PROCESSING(SSfastprocess, src) + zoom_lock_action = new(src) + +/obj/item/gun/energy/beam_rifle/Destroy() + STOP_PROCESSING(SSfastprocess, src) + set_user(null) + QDEL_LIST(current_tracers) + listeningTo = null + return ..() + +/obj/item/gun/energy/beam_rifle/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + chambered = null + recharge_newshot() + +/obj/item/gun/energy/beam_rifle/proc/aiming_beam(force_update = FALSE) + var/diff = abs(aiming_lastangle - lastangle) + check_user() + if(diff < AIMING_BEAM_ANGLE_CHANGE_THRESHOLD && !force_update) + return + aiming_lastangle = lastangle + var/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/P = new + P.gun = src + P.wall_pierce_amount = wall_pierce_amount + P.structure_pierce_amount = structure_piercing + P.do_pierce = projectile_setting_pierce + if(aiming_time) + var/percent = ((100/aiming_time)*aiming_time_left) + P.color = rgb(255 * percent,255 * ((100 - percent) / 100),0) + else + P.color = rgb(0, 255, 0) + var/turf/curloc = get_turf(src) + var/turf/targloc = get_turf(current_user.client.mouseObject) + if(!istype(targloc)) + if(!istype(curloc)) + return + targloc = get_turf_in_angle(lastangle, curloc, 10) + P.preparePixelProjectile(targloc, current_user, current_user.client.mouseParams, 0) + P.fire(lastangle) + +/obj/item/gun/energy/beam_rifle/process() + if(!aiming) + last_process = world.time + return + check_user() + handle_zooming() + aiming_time_left = max(0, aiming_time_left - (world.time - last_process)) + aiming_beam(TRUE) + last_process = world.time + +/obj/item/gun/energy/beam_rifle/proc/check_user(automatic_cleanup = TRUE) + if(!istype(current_user) || !isturf(current_user.loc) || !(src in current_user.held_items) || current_user.incapacitated()) //Doesn't work if you're not holding it! + if(automatic_cleanup) + stop_aiming() + set_user(null) + return FALSE + return TRUE + +/obj/item/gun/energy/beam_rifle/proc/process_aim() + if(istype(current_user) && current_user.client && current_user.client.mouseParams) + var/angle = mouse_angle_from_client(current_user.client) + current_user.setDir(angle2dir_cardinal(angle)) + var/difference = abs(closer_angle_difference(lastangle, angle)) + delay_penalty(difference * aiming_time_increase_angle_multiplier) + lastangle = angle + +/obj/item/gun/energy/beam_rifle/proc/on_mob_move() + check_user() + if(aiming) + delay_penalty(aiming_time_increase_user_movement) + process_aim() + aiming_beam(TRUE) + +/obj/item/gun/energy/beam_rifle/proc/start_aiming() + aiming_time_left = aiming_time + aiming = TRUE + process_aim() + aiming_beam(TRUE) + zooming_angle = lastangle + start_zooming() + +/obj/item/gun/energy/beam_rifle/proc/stop_aiming(mob/user) + set waitfor = FALSE + aiming_time_left = aiming_time + aiming = FALSE + QDEL_LIST(current_tracers) + stop_zooming(user) + +/obj/item/gun/energy/beam_rifle/proc/set_user(mob/user) + if(user == current_user) + return + stop_aiming(current_user) + if(listeningTo) + UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED) + listeningTo = null + if(istype(current_user)) + LAZYREMOVE(current_user.mousemove_intercept_objects, src) + current_user = null + if(istype(user)) + current_user = user + LAZYOR(current_user.mousemove_intercept_objects, src) + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/on_mob_move) + listeningTo = user + +/obj/item/gun/energy/beam_rifle/onMouseDrag(src_object, over_object, src_location, over_location, params, mob) + if(aiming) + process_aim() + aiming_beam() + if(zoom_lock == ZOOM_LOCK_AUTOZOOM_FREEMOVE) + zooming_angle = lastangle + set_autozoom_pixel_offsets_immediate(zooming_angle) + return ..() + +/obj/item/gun/energy/beam_rifle/onMouseDown(object, location, params, mob/mob) + if(istype(mob)) + set_user(mob) + if(istype(object, /obj/screen) && !istype(object, /obj/screen/click_catcher)) + return + if((object in mob.contents) || (object == mob)) + return + start_aiming() + return ..() + +/obj/item/gun/energy/beam_rifle/onMouseUp(object, location, params, mob/M) + if(istype(object, /obj/screen) && !istype(object, /obj/screen/click_catcher)) + return + process_aim() + if(aiming_time_left <= aiming_time_fire_threshold && check_user()) + sync_ammo() + afterattack(M.client.mouseObject, M, FALSE, M.client.mouseParams, passthrough = TRUE) + stop_aiming() + QDEL_LIST(current_tracers) + return ..() + +/obj/item/gun/energy/beam_rifle/afterattack(atom/target, mob/living/user, flag, params, passthrough = FALSE) + if(flag) //It's adjacent, is the user, or is on the user's person + if(target in user.contents) //can't shoot stuff inside us. + return + if(!ismob(target) || user.a_intent == INTENT_HARM) //melee attack + return + if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected) + return + if(!passthrough && (aiming_time > aiming_time_fire_threshold)) + return + if(lastfire > world.time + delay) + return + lastfire = world.time + . = ..() + stop_aiming() + +/obj/item/gun/energy/beam_rifle/proc/sync_ammo() + for(var/obj/item/ammo_casing/energy/beam_rifle/AC in contents) + AC.sync_stats() + +/obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount) + aiming_time_left = CLAMP(aiming_time_left + amount, 0, aiming_time) + +/obj/item/ammo_casing/energy/beam_rifle + name = "particle acceleration lens" + desc = "Don't look into barrel!" + var/wall_pierce_amount = 0 + var/wall_devastate = 0 + var/aoe_structure_range = 1 + var/aoe_structure_damage = 30 + var/aoe_fire_range = 2 + var/aoe_fire_chance = 66 + var/aoe_mob_range = 1 + var/aoe_mob_damage = 20 + var/impact_structure_damage = 50 + var/projectile_damage = 40 + var/projectile_stun = 0 + var/structure_piercing = 2 + var/structure_bleed_coeff = 0.7 + var/do_pierce = TRUE + var/obj/item/gun/energy/beam_rifle/host + +/obj/item/ammo_casing/energy/beam_rifle/proc/sync_stats() + var/obj/item/gun/energy/beam_rifle/BR = loc + if(!istype(BR)) + stack_trace("Beam rifle syncing error") + host = BR + do_pierce = BR.projectile_setting_pierce + wall_pierce_amount = BR.wall_pierce_amount + wall_devastate = BR.wall_devastate + aoe_structure_range = BR.aoe_structure_range + aoe_structure_damage = BR.aoe_structure_damage + aoe_fire_range = BR.aoe_fire_range + aoe_fire_chance = BR.aoe_fire_chance + aoe_mob_range = BR.aoe_mob_range + aoe_mob_damage = BR.aoe_mob_damage + impact_structure_damage = BR.impact_structure_damage + projectile_damage = BR.projectile_damage + projectile_stun = BR.projectile_stun + delay = BR.delay + structure_piercing = BR.structure_piercing + structure_bleed_coeff = BR.structure_bleed_coeff + +/obj/item/ammo_casing/energy/beam_rifle/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") + . = ..() + var/obj/item/projectile/beam/beam_rifle/hitscan/HS_BB = BB + if(!istype(HS_BB)) + return + HS_BB.impact_direct_damage = projectile_damage + HS_BB.stun = projectile_stun + HS_BB.impact_structure_damage = impact_structure_damage + HS_BB.aoe_mob_damage = aoe_mob_damage + HS_BB.aoe_mob_range = CLAMP(aoe_mob_range, 0, 15) //Badmin safety lock + HS_BB.aoe_fire_chance = aoe_fire_chance + HS_BB.aoe_fire_range = aoe_fire_range + HS_BB.aoe_structure_damage = aoe_structure_damage + HS_BB.aoe_structure_range = CLAMP(aoe_structure_range, 0, 15) //Badmin safety lock + HS_BB.wall_devastate = wall_devastate + HS_BB.wall_pierce_amount = wall_pierce_amount + HS_BB.structure_pierce_amount = structure_piercing + HS_BB.structure_bleed_coeff = structure_bleed_coeff + HS_BB.do_pierce = do_pierce + HS_BB.gun = host + +/obj/item/ammo_casing/energy/beam_rifle/throw_proj(atom/target, turf/targloc, mob/living/user, params, spread) + var/turf/curloc = get_turf(user) + if(!istype(curloc) || !BB) + return FALSE + var/obj/item/gun/energy/beam_rifle/gun = loc + if(!targloc && gun) + targloc = get_turf_in_angle(gun.lastangle, curloc, 10) + else if(!targloc) + return FALSE + var/firing_dir + if(BB.firer) + firing_dir = BB.firer.dir + if(!BB.suppressed && firing_effect_type) + new firing_effect_type(get_turf(src), firing_dir) + BB.preparePixelProjectile(target, user, params, spread) + BB.fire(gun? gun.lastangle : null, null) + BB = null + return TRUE + +/obj/item/ammo_casing/energy/beam_rifle/hitscan + projectile_type = /obj/item/projectile/beam/beam_rifle/hitscan + select_name = "beam" + e_cost = 5000 + fire_sound = 'sound/weapons/beam_sniper.ogg' + +/obj/item/projectile/beam/beam_rifle + name = "particle beam" + icon = null + hitsound = 'sound/effects/explosion3.ogg' + damage = 0 //Handled manually. + damage_type = BURN + flag = "energy" + range = 150 + jitter = 10 + var/obj/item/gun/energy/beam_rifle/gun + var/structure_pierce_amount = 0 //All set to 0 so the gun can manually set them during firing. + var/structure_bleed_coeff = 0 + var/structure_pierce = 0 + var/do_pierce = TRUE + var/wall_pierce_amount = 0 + var/wall_pierce = 0 + var/wall_devastate = 0 + var/aoe_structure_range = 0 + var/aoe_structure_damage = 0 + var/aoe_fire_range = 0 + var/aoe_fire_chance = 0 + var/aoe_mob_range = 0 + var/aoe_mob_damage = 0 + var/impact_structure_damage = 0 + var/impact_direct_damage = 0 + var/turf/cached + var/list/pierced = list() + +/obj/item/projectile/beam/beam_rifle/proc/AOE(turf/epicenter) + set waitfor = FALSE + if(!epicenter) + return + new /obj/effect/temp_visual/explosion/fast(epicenter) + for(var/mob/living/L in range(aoe_mob_range, epicenter)) //handle aoe mob damage + L.adjustFireLoss(aoe_mob_damage) + to_chat(L, "\The [src] sears you!") + for(var/turf/T in range(aoe_fire_range, epicenter)) //handle aoe fire + if(prob(aoe_fire_chance)) + new /obj/effect/hotspot(T) + for(var/obj/O in range(aoe_structure_range, epicenter)) + if(!isitem(O)) + if(O.level == 1) //Please don't break underfloor items! + continue + O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, "laser", FALSE) + +/obj/item/projectile/beam/beam_rifle/proc/check_pierce(atom/target) + if(!do_pierce) + return FALSE + if(pierced[target]) //we already pierced them go away + return TRUE + if(isclosedturf(target)) + if(wall_pierce++ < wall_pierce_amount) + if(prob(wall_devastate)) + if(iswallturf(target)) + var/turf/closed/wall/W = target + W.dismantle_wall(TRUE, TRUE) + else + target.ex_act(EXPLODE_HEAVY) + return TRUE + if(ismovableatom(target)) + var/atom/movable/AM = target + if(AM.density && !AM.CanPass(src, get_turf(target)) && !ismob(AM)) + if(structure_pierce < structure_pierce_amount) + if(isobj(AM)) + var/obj/O = AM + O.take_damage((impact_structure_damage + aoe_structure_damage) * structure_bleed_coeff * get_damage_coeff(AM), BURN, "energy", FALSE) + pierced[AM] = TRUE + structure_pierce++ + return TRUE + return FALSE + +/obj/item/projectile/beam/beam_rifle/proc/get_damage_coeff(atom/target) + if(istype(target, /obj/machinery/door)) + return 0.4 + if(istype(target, /obj/structure/window)) + return 0.5 + if(istype(target, /obj/structure/blob)) + return 0.65 //CIT CHANGE. + return 1 + +/obj/item/projectile/beam/beam_rifle/proc/handle_impact(atom/target) + if(isobj(target)) + var/obj/O = target + O.take_damage(impact_structure_damage * get_damage_coeff(target), BURN, "laser", FALSE) + if(isliving(target)) + var/mob/living/L = target + L.adjustFireLoss(impact_direct_damage) + L.emote("scream") + +/obj/item/projectile/beam/beam_rifle/proc/handle_hit(atom/target) + set waitfor = FALSE + if(!cached && !QDELETED(target)) + cached = get_turf(target) + if(nodamage) + return FALSE + playsound(cached, 'sound/effects/explosion3.ogg', 100, 1) + AOE(cached) + if(!QDELETED(target)) + handle_impact(target) + +/obj/item/projectile/beam/beam_rifle/Bump(atom/target) + if(check_pierce(target)) + permutated += target + trajectory_ignore_forcemove = TRUE + forceMove(target.loc) + trajectory_ignore_forcemove = FALSE + return FALSE + if(!QDELETED(target)) + cached = get_turf(target) + . = ..() + +/obj/item/projectile/beam/beam_rifle/on_hit(atom/target, blocked = FALSE) + if(!QDELETED(target)) + cached = get_turf(target) + handle_hit(target) + . = ..() + +/obj/item/projectile/beam/beam_rifle/hitscan + icon_state = "" + hitscan = TRUE + tracer_type = /obj/effect/projectile/tracer/tracer/beam_rifle + var/constant_tracer = FALSE + +/obj/item/projectile/beam/beam_rifle/hitscan/generate_hitscan_tracers(cleanup = TRUE, duration = 5, impacting = TRUE, highlander) + set waitfor = FALSE + if(isnull(highlander)) + highlander = constant_tracer + if(highlander && istype(gun)) + QDEL_LIST(gun.current_tracers) + for(var/datum/point/p in beam_segments) + gun.current_tracers += generate_tracer_between_points(p, beam_segments[p], tracer_type, color, 0, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) + else + for(var/datum/point/p in beam_segments) + generate_tracer_between_points(p, beam_segments[p], tracer_type, color, duration, hitscan_light_range, hitscan_light_color_override, hitscan_light_intensity) + if(cleanup) + QDEL_LIST(beam_segments) + beam_segments = null + QDEL_NULL(beam_index) + +/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam + tracer_type = /obj/effect/projectile/tracer/tracer/aiming + name = "aiming beam" + hitsound = null + hitsound_wall = null + nodamage = TRUE + damage = 0 + constant_tracer = TRUE + hitscan_light_range = 0 + hitscan_light_intensity = 0 + hitscan_light_color_override = "#99ff99" + +/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/prehit(atom/target) + qdel(src) + return FALSE + +/obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit() + qdel(src) + return FALSE diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index eba26ad2..8b8cd096 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -64,10 +64,9 @@ var/interrupted = FALSE var/mob/target var/icon/bluespace - var/datum/weakref/redirect_component /datum/status_effect/slimerecall/on_apply() - redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/resistField)))) + RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/resistField) to_chat(owner, "You feel a sudden tug from an unknown force, and feel a pull to bluespace!") to_chat(owner, "Resist if you wish avoid the force!") bluespace = icon('icons/effects/effects.dmi',"chronofield") @@ -77,9 +76,9 @@ /datum/status_effect/slimerecall/proc/resistField() interrupted = TRUE owner.remove_status_effect(src) + /datum/status_effect/slimerecall/on_remove() - qdel(redirect_component.resolve()) - redirect_component = null + UnregisterSignal(owner, COMSIG_LIVING_RESIST) owner.cut_overlay(bluespace) if(interrupted || !ismob(target)) to_chat(owner, "The bluespace tug fades away, and you feel that the force has passed you by.") @@ -98,10 +97,9 @@ duration = -1 //Will remove self when block breaks. alert_type = /obj/screen/alert/status_effect/freon/stasis var/obj/structure/ice_stasis/cube - var/datum/weakref/redirect_component /datum/status_effect/frozenstasis/on_apply() - redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/breakCube)))) + RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/breakCube) cube = new /obj/structure/ice_stasis(get_turf(owner)) owner.forceMove(cube) owner.status_flags |= GODMODE @@ -118,8 +116,7 @@ if(cube) qdel(cube) owner.status_flags &= ~GODMODE - qdel(redirect_component.resolve()) - redirect_component = null + UnregisterSignal(owner, COMSIG_LIVING_RESIST) /datum/status_effect/slime_clone id = "slime_cloned" diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 04cf006e..6d8d5013 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -24,8 +24,6 @@ circuit = /obj/item/circuitboard/computer/xenobiology var/datum/action/innate/hotkey_help/hotkey_help - var/datum/component/redirect/listener - var/obj/machinery/monkey_recycler/connected_recycler var/list/stored_slimes var/obj/item/slimepotion/slime/current_potion @@ -41,7 +39,7 @@ . = ..() hotkey_help = new stored_slimes = list() - listener = AddComponent(/datum/component/redirect, list(COMSIG_ATOM_CONTENTS_DEL = CALLBACK(src, .proc/on_contents_del))) + RegisterSignal(src, COMSIG_ATOM_CONTENTS_DEL, .proc/on_contents_del) for(var/obj/machinery/monkey_recycler/recycler in GLOB.monkey_recyclers) if(get_area(src) == get_area(recycler)) connected_recycler = recycler diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index c739d426..aae422bc 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -1,13 +1,13 @@ -//include unit test files in this module in this ifdef -//Keep this sorted alphabetically - -#ifdef UNIT_TESTS -#include "anchored_mobs.dm" -#include "component_tests.dm" -#include "reagent_id_typos.dm" -#include "reagent_recipe_collisions.dm" -#include "spawn_humans.dm" -#include "subsystem_init.dm" -#include "timer_sanity.dm" -#include "unit_test.dm" -#endif +//include unit test files in this module in this ifdef +//Keep this sorted alphabetically + +#ifdef UNIT_TESTS +#include "anchored_mobs.dm" +#include "component_tests.dm" +#include "reagent_id_typos.dm" +#include "reagent_recipe_collisions.dm" +#include "spawn_humans.dm" +#include "subsystem_init.dm" +#include "timer_sanity.dm" +#include "unit_test.dm" +#endif diff --git a/code/modules/unit_tests/component_tests.dm b/code/modules/unit_tests/component_tests.dm new file mode 100644 index 00000000..409d7f43 --- /dev/null +++ b/code/modules/unit_tests/component_tests.dm @@ -0,0 +1,12 @@ +/datum/unit_test/component_duping/Run() + var/list/bad_dms = list() + var/list/bad_dts = list() + for(var/t in typesof(/datum/component)) + var/datum/component/comp = t + if(!isnum(initial(comp.dupe_mode))) + bad_dms += t + var/dupe_type = initial(comp.dupe_type) + if(dupe_type && !ispath(dupe_type)) + bad_dts += t + if(length(bad_dms) || length(bad_dts)) + Fail("Components with invalid dupe modes: ([bad_dms.Join(",")]) ||| Components with invalid dupe types: ([bad_dts.Join(",")])") \ No newline at end of file diff --git a/modular_citadel/code/datums/components/phantomthief.dm b/modular_citadel/code/datums/components/phantomthief.dm deleted file mode 100644 index d34e16f6..00000000 --- a/modular_citadel/code/datums/components/phantomthief.dm +++ /dev/null @@ -1,49 +0,0 @@ -//This component applies a customizable drop_shadow filter to its wearer when they toggle combat mode on or off. This can stack. - -/datum/component/phantomthief - dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS - - var/filter_x - var/filter_y - var/filter_size - var/filter_border - var/filter_color - - var/datum/component/redirect/combattoggle_redir - -/datum/component/phantomthief/Initialize(_x = -2, _y = 0, _size = 0, _border = 0, _color = "#E62111") - filter_x = _x - filter_y = _y - filter_size = _size - filter_border = _border - filter_color = _color - - RegisterSignal(parent, COMSIG_COMBAT_TOGGLED, .proc/handlefilterstuff) - RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/OnEquipped) - RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/OnDropped) - -/datum/component/phantomthief/proc/handlefilterstuff(mob/user, combatmodestate) - if(istype(user)) - var/thefilter = filter(type = "drop_shadow", x = filter_x, y = filter_y, size = filter_size, border = filter_border, color = filter_color) - if(!combatmodestate) - user.filters -= thefilter - else - user.filters += thefilter - -/datum/component/phantomthief/proc/stripdesiredfilter(mob/user) - if(istype(user)) - var/thefilter = filter(type = "drop_shadow", x = filter_x, y = filter_y, size = filter_size, border = filter_border, color = filter_color) - user.filters -= thefilter - -/datum/component/phantomthief/proc/OnEquipped(mob/user, slot) - if(!istype(user)) - return - if(!combattoggle_redir) - combattoggle_redir = user.AddComponent(/datum/component/redirect, list(COMSIG_COMBAT_TOGGLED = CALLBACK(src, .proc/handlefilterstuff))) - -/datum/component/phantomthief/proc/OnDropped(mob/user) - if(!istype(user)) - return - if(combattoggle_redir) - QDEL_NULL(combattoggle_redir) - stripdesiredfilter(user) diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index ef45e07b..a35a5f50 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -201,7 +201,6 @@ var/enthrallGender //Use master or mistress var/mental_capacity //Higher it is, lower the cooldown on commands, capacity reduces with resistance. - var/datum/weakref/redirect_component //resistance var/distancelist = list(2,1.5,1,0.8,0.6,0.5,0.4,0.3,0.2) //Distance multipliers @@ -231,7 +230,7 @@ master = get_mob_by_key(enthrallID) //if(M.ckey == enthrallID) // owner.remove_status_effect(src)//At the moment, a user can enthrall themselves, toggle this back in if that should be removed. - redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) //Do resistance calc if resist is pressed# + RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/owner_resist) //Do resistance calc if resist is pressed# RegisterSignal(owner, COMSIG_MOVABLE_HEAR, .proc/owner_hear) //var/obj/item/organ/brain/B = M.getorganslot(ORGAN_SLOT_BRAIN) //removing this, may cause some issues unsure. mental_capacity = 500 - M.getOrganLoss(ORGAN_SLOT_BRAIN)//It's their brain! @@ -570,8 +569,7 @@ SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing2") SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing3") SEND_SIGNAL(M, COMSIG_CLEAR_MOOD_EVENT, "EnthMissing4") - qdel(redirect_component.resolve()) - redirect_component = null + UnregisterSignal(M, COMSIG_LIVING_RESIST) UnregisterSignal(owner, COMSIG_MOVABLE_HEAR) REMOVE_TRAIT(owner, TRAIT_PACIFISM, "MKUltra") to_chat(owner, "You're now free of [master]'s influence, and fully independent!'") diff --git a/modular_citadel/code/modules/clothing/glasses/phantomthief.dm b/modular_citadel/code/modules/clothing/glasses/phantomthief.dm index 716e33c7..669697c6 100644 --- a/modular_citadel/code/modules/clothing/glasses/phantomthief.dm +++ b/modular_citadel/code/modules/clothing/glasses/phantomthief.dm @@ -6,19 +6,18 @@ icon_state = "s-ninja" item_state = "s-ninja" -/obj/item/clothing/glasses/phantomthief/Initialize() +/obj/item/clothing/glasses/phantomthief/ComponentInitialize() . = ..() - AddComponent(/datum/component/phantomthief) + AddComponent(/datum/component/wearertargeting/phantomthief) /obj/item/clothing/glasses/phantomthief/syndicate name = "suspicious plastic mask" desc = "A cheap, bulky, Syndicate-branded plastic face mask. You have to break in to break out." var/nextadrenalinepop - var/datum/component/redirect/combattoggle_redir -/obj/item/clothing/glasses/phantomthief/syndicate/examine(user) +/obj/item/clothing/glasses/phantomthief/syndicate/examine(mob/user) . = ..() - if(combattoggle_redir) + if(user.get_item_by_slot(SLOT_GLASSES) == src) if(world.time >= nextadrenalinepop) . += "The built-in adrenaline injector is ready for use." else @@ -34,12 +33,12 @@ . = ..() if(!istype(user)) return - if(!combattoggle_redir) - combattoggle_redir = user.AddComponent(/datum/component/redirect, list(COMSIG_COMBAT_TOGGLED = CALLBACK(src, .proc/injectadrenaline))) + if(slot != SLOT_GLASSES) + return + RegisterSignal(user, COMSIG_COMBAT_TOGGLED, .proc/injectadrenaline) /obj/item/clothing/glasses/phantomthief/syndicate/dropped(mob/user) . = ..() if(!istype(user)) return - if(combattoggle_redir) - QDEL_NULL(combattoggle_redir) + UnregisterSignal(user, COMSIG_COMBAT_TOGGLED) diff --git a/tgstation.dme b/tgstation.dme index 4d4cd14c..68a05d31 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -380,12 +380,12 @@ #include "code\datums\components\ntnet_interface.dm" #include "code\datums\components\orbiter.dm" #include "code\datums\components\paintable.dm" +#include "code\datums\components\phantomthief.dm" #include "code\datums\components\rad_insulation.dm" #include "code\datums\components\radioactive.dm" #include "code\datums\components\remote_materials.dm" #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" -#include "code\datums\components\signal_redirect.dm" #include "code\datums\components\sizzle.dm" #include "code\datums\components\slippery.dm" #include "code\datums\components\spawner.dm" @@ -3161,7 +3161,6 @@ #include "modular_citadel\code\controllers\configuration\entries\general.dm" #include "modular_citadel\code\controllers\subsystem\job.dm" #include "modular_citadel\code\datums\components\material_container.dm" -#include "modular_citadel\code\datums\components\phantomthief.dm" #include "modular_citadel\code\datums\components\souldeath.dm" #include "modular_citadel\code\datums\mood_events\chem_events.dm" #include "modular_citadel\code\datums\mood_events\generic_negative_events.dm" From fcb95dd66f1a5458cf21f97a0f8176cc5263abfd Mon Sep 17 00:00:00 2001 From: Archie Date: Fri, 25 Jun 2021 21:06:49 -0300 Subject: [PATCH 02/21] Hopefully fixes leashes with signals --- hyperstation/code/obj/leash.dm | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/hyperstation/code/obj/leash.dm b/hyperstation/code/obj/leash.dm index cc057c92..8c4008f9 100644 --- a/hyperstation/code/obj/leash.dm +++ b/hyperstation/code/obj/leash.dm @@ -35,7 +35,7 @@ Icons, maybe? /datum/status_effect/leash_pet id = "leashed" status_type = STATUS_EFFECT_UNIQUE - var/datum/weakref/redirect_component + var/mob/redirect_component alert_type = /obj/screen/alert/status_effect/leash_pet /obj/screen/alert/status_effect/leash_pet @@ -45,7 +45,9 @@ Icons, maybe? /datum/status_effect/leash_pet/on_apply() - redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) + //redirect_component = WEAKREF(owner.AddComponent(/datum/component/redirect, list(COMSIG_LIVING_RESIST = CALLBACK(src, .proc/owner_resist)))) + RegisterSignal(owner, COMSIG_LIVING_RESIST, .proc/owner_resist) + redirect_component = owner if(!owner.stat) to_chat(owner, "You have been leashed!") return ..() @@ -80,9 +82,9 @@ Icons, maybe? var/leash_used = 0 //A flag to see if the leash has been used yet, because for some reason picking up an unused leash is weird var/mob/living/leash_pet = "null" //Variable to store our pet later var/mob/living/leash_master = "null" //And our master too - var/datum/component/mobhook_leash_pet - var/datum/component/mobhook_leash_master //Needed to watch for these entities to move - var/datum/component/mobhook_leash_freepet + var/mob/mobhook_leash_pet + var/mob/mobhook_leash_master //Needed to watch for these entities to move + var/mob/mobhook_leash_freepet var/leash_location[3] //Three digit list for us to store coordinates later //Called when someone is clicked with the leash @@ -101,8 +103,12 @@ Icons, maybe? user.apply_status_effect(/datum/status_effect/leash_dom) //Is the leasher leash_pet = C //Save pet reference for later leash_master = user //Save dom reference for later - mobhook_leash_pet = leash_pet.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_pet_move))) - mobhook_leash_master = leash_master.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_master_move))) + //mobhook_leash_pet = leash_pet.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_pet_move))) + RegisterSignal(leash_pet, COMSIG_MOVABLE_MOVED, .proc/on_pet_move) + mobhook_leash_pet = leash_pet + //mobhook_leash_master = leash_master.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_master_move))) + RegisterSignal(leash_master, COMSIG_MOVABLE_MOVED, .proc/on_master_move) + mobhook_leash_master = leash_master leash_used = 1 if(!leash_pet.has_status_effect(/datum/status_effect/leash_dom)) //Add slowdown if the pet didn't leash themselves leash_pet.add_movespeed_modifier(MOVESPEED_ID_LEASH, multiplicative_slowdown = 5) @@ -375,7 +381,9 @@ Icons, maybe? viewing.show_message("[leash_master] has dropped the leash.", 1) //DOM HAS DROPPED LEASH. PET IS FREE. SCP HAS BREACHED CONTAINMENT. leash_pet.remove_movespeed_modifier(MOVESPEED_ID_LEASH) - mobhook_leash_freepet = leash_pet.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_freepet_move))) + //mobhook_leash_freepet = leash_pet.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_freepet_move))) + RegisterSignal(leash_pet, COMSIG_MOVABLE_MOVED, .proc/on_freepet_move) + mobhook_leash_freepet = leash_pet leash_master.remove_status_effect(/datum/status_effect/leash_dom) //No dom with no leash. We will get a new dom if the leash is picked back up. leash_master = "null" QDEL_NULL(mobhook_leash_master) @@ -392,7 +400,9 @@ Icons, maybe? leash_master = "null" return leash_master.apply_status_effect(/datum/status_effect/leash_dom) - mobhook_leash_master = leash_master.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_master_move))) + //mobhook_leash_master = leash_master.AddComponent(/datum/component/redirect, list(COMSIG_MOVABLE_MOVED = CALLBACK(src, .proc/on_master_move))) + RegisterSignal(leash_master, COMSIG_MOVABLE_MOVED, .proc/on_master_move) + mobhook_leash_master = leash_master leash_pet.remove_status_effect(/datum/status_effect/leash_freepet) QDEL_NULL(mobhook_leash_freepet) leash_pet.add_movespeed_modifier(MOVESPEED_ID_LEASH, multiplicative_slowdown = 5) @@ -403,4 +413,4 @@ Icons, maybe? time = 40 reqs = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/sheet/cloth = 3) - category = CAT_MISC \ No newline at end of file + category = CAT_MISC From 8415a954dec07f759b4e026ebf2459b52daf1ca7 Mon Sep 17 00:00:00 2001 From: Archie Date: Fri, 25 Jun 2021 21:38:49 -0300 Subject: [PATCH 03/21] unregisters --- hyperstation/code/obj/leash.dm | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/hyperstation/code/obj/leash.dm b/hyperstation/code/obj/leash.dm index 8c4008f9..46dcc35c 100644 --- a/hyperstation/code/obj/leash.dm +++ b/hyperstation/code/obj/leash.dm @@ -132,9 +132,12 @@ Icons, maybe? leash_pet.remove_status_effect(/datum/status_effect/leash_pet) if(!leash_pet.has_status_effect(/datum/status_effect/leash_pet)) //If there is no pet, there is no dom. Loop breaks. - QDEL_NULL(mobhook_leash_master) - QDEL_NULL(mobhook_leash_pet) - QDEL_NULL(mobhook_leash_freepet) + //QDEL_NULL(mobhook_leash_master) + UnregisterSignal(mobhook_leash_master, COMSIG_MOVABLE_MOVED) + //QDEL_NULL(mobhook_leash_pet) + UnregisterSignal(mobhook_leash_pet, COMSIG_MOVABLE_MOVED) + //QDEL_NULL(mobhook_leash_freepet) + UnregisterSignal(mobhook_leash_freepet, COMSIG_MOVABLE_MOVED) if(leash_pet.has_status_effect(/datum/status_effect/leash_freepet)) leash_pet.remove_status_effect(/datum/status_effect/leash_freepet) if(leash_pet.has_movespeed_modifier(MOVESPEED_ID_LEASH)) @@ -189,7 +192,8 @@ Icons, maybe? if(leash_pet == leash_master) //Pet is the master return if(!leash_pet.has_status_effect(/datum/status_effect/leash_pet)) - QDEL_NULL(mobhook_leash_master) //Probably redundant, but it's nice to be safe + //QDEL_NULL(mobhook_leash_master) //Probably redundant, but it's nice to be safe + UnregisterSignal(mobhook_leash_master, COMSIG_MOVABLE_MOVED) leash_master.remove_status_effect(/datum/status_effect/leash_dom) return @@ -258,8 +262,10 @@ Icons, maybe? leash_pet.remove_status_effect(/datum/status_effect/leash_pet) leash_pet.remove_movespeed_modifier(MOVESPEED_ID_LEASH) leash_master.remove_status_effect(/datum/status_effect/leash_dom) - QDEL_NULL(mobhook_leash_master) - QDEL_NULL(mobhook_leash_pet) + //QDEL_NULL(mobhook_leash_master) + UnregisterSignal(mobhook_leash_master, COMSIG_MOVABLE_MOVED) + //QDEL_NULL(mobhook_leash_pet) + UnregisterSignal(mobhook_leash_pet, COMSIG_MOVABLE_MOVED) leash_pet = "null" leash_master = "null" leash_used = 0 @@ -273,7 +279,8 @@ Icons, maybe? return //Make sure the pet is still a pet if(!leash_pet.has_status_effect(/datum/status_effect/leash_pet)) - QDEL_NULL(mobhook_leash_pet) //Probably redundant, but it's nice to be safe + //QDEL_NULL(mobhook_leash_pet) //Probably redundant, but it's nice to be safe + UnregisterSignal(mobhook_leash_pet, COMSIG_MOVABLE_MOVED) return //The pet has escaped. There is no DOM. GO PET RUN. @@ -362,8 +369,10 @@ Icons, maybe? leash_pet.adjustOxyLoss(5) leash_pet.remove_status_effect(/datum/status_effect/leash_pet) leash_pet.remove_status_effect(/datum/status_effect/leash_freepet) - QDEL_NULL(mobhook_leash_pet) - QDEL_NULL(mobhook_leash_freepet) + //QDEL_NULL(mobhook_leash_pet) + UnregisterSignal(mobhook_leash_pet, COMSIG_MOVABLE_MOVED) + //QDEL_NULL(mobhook_leash_freepet) + UnregisterSignal(mobhook_leash_freepet, COMSIG_MOVABLE_MOVED) leash_pet = "null" leash_used = 0 @@ -386,7 +395,8 @@ Icons, maybe? mobhook_leash_freepet = leash_pet leash_master.remove_status_effect(/datum/status_effect/leash_dom) //No dom with no leash. We will get a new dom if the leash is picked back up. leash_master = "null" - QDEL_NULL(mobhook_leash_master) + //QDEL_NULL(mobhook_leash_master) + UnregisterSignal(mobhook_leash_master, COMSIG_MOVABLE_MOVED) /obj/item/leash/equipped(mob/user) . = ..() @@ -404,7 +414,8 @@ Icons, maybe? RegisterSignal(leash_master, COMSIG_MOVABLE_MOVED, .proc/on_master_move) mobhook_leash_master = leash_master leash_pet.remove_status_effect(/datum/status_effect/leash_freepet) - QDEL_NULL(mobhook_leash_freepet) + //QDEL_NULL(mobhook_leash_freepet) + UnregisterSignal(mobhook_leash_freepet, COMSIG_MOVABLE_MOVED) leash_pet.add_movespeed_modifier(MOVESPEED_ID_LEASH, multiplicative_slowdown = 5) /datum/crafting_recipe/leash From b30220c48fcd83c0b34c09492863ef1015192634 Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 29 Jun 2021 23:25:08 -0300 Subject: [PATCH 04/21] Fixes a runtime and mindbreaker --- code/modules/flufftext/Hallucination.dm | 2 +- code/modules/reagents/chemistry/reagents/toxin_reagents.dm | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index f229c0ce..e5aa0c3d 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( Show() /obj/effect/hallucination/simple/Destroy() - if(target.client) + if(target && target.client) target.client.images.Remove(current_image) active = FALSE return ..() diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 254b9d4a..0a57d5b7 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -200,7 +200,8 @@ pH = 11 /datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M) - M.hallucination += 5 + if(!M.has_quirk(/datum/quirk/insanity)) + M.hallucination += 5 return ..() /datum/reagent/toxin/plantbgone From daefbb71a786fd8233ad83569e380d9fab04294e Mon Sep 17 00:00:00 2001 From: Kabra_men <46802162+Kabramen@users.noreply.github.com> Date: Thu, 1 Jul 2021 16:07:36 -0300 Subject: [PATCH 05/21] Fixes, changes and new wall sprites --- _maps/RandomZLevels/away_mission/stargate.dmm | 466 +++++++++--------- code/game/turfs/simulated/floor/misc_floor.dm | 26 + icons/turf/walls/sandstone_wall.dmi | Bin 1387 -> 1954 bytes tgstation.dme | 2 +- 4 files changed, 271 insertions(+), 223 deletions(-) diff --git a/_maps/RandomZLevels/away_mission/stargate.dmm b/_maps/RandomZLevels/away_mission/stargate.dmm index a2dff503..2c3b91eb 100644 --- a/_maps/RandomZLevels/away_mission/stargate.dmm +++ b/_maps/RandomZLevels/away_mission/stargate.dmm @@ -23,7 +23,7 @@ "aw" = (/mob/living/simple_animal/hostile/netherworld/migo,/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building) "ax" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "ay" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"az" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9/wtic,/obj/item/ammo_box/magazine/wt550m9/wtic,/obj/item/ammo_box/magazine/wt550m9/wtic,/obj/item/ammo_box/magazine/wt550m9/wtic,/obj/item/ammo_box/magazine/wt550m9/wtic,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"az" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aA" = (/obj/item/clothing/mask/gas,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aB" = (/obj/item/clothing/shoes/sneakers/black,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aC" = (/obj/structure/closet/supplypod/centcompod,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) @@ -31,25 +31,112 @@ "aE" = (/obj/item/clothing/under/color/grey,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aF" = (/obj/item/twohanded/spear,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aG" = (/obj/item/gun/ballistic/shotgun/riot,/obj/item/gun/ballistic/shotgun/riot{pixel_x = 3; pixel_y = -3},/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"aH" = (/obj/effect/landmark/awaystart,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aH" = (/obj/structure/table/wood,/obj/machinery/microwave,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aI" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aJ" = (/obj/structure/table/wood,/obj/item/kitchen/knife,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aK" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aL" = (/obj/structure/sink{dir = 8; pixel_x = -12; pixel_y = 2},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aM" = (/obj/machinery/door/airlock/wood,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aN" = (/obj/structure/dresser,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aO" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/cloth/thirty,/obj/item/stack/sheet/cloth/thirty,/turf/open/floor/wood,/area/awaymission/stargate/building) +"aP" = (/obj/structure/closet/crate/wooden,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aQ" = (/obj/machinery/light{dir = 8},/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aR" = (/obj/structure/bed,/obj/item/bedsheet/brown,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aS" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aT" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 1},/area/awaymission/stargate) +"aU" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"aV" = (/turf/open/floor/cobble/corner,/area/awaymission/stargate) "aW" = (/obj/structure/flora/rock,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) +"aX" = (/turf/open/floor/cobble,/area/awaymission/stargate) +"aY" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) +"aZ" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"ba" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/cobble,/area/awaymission/stargate) +"bb" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 8},/area/awaymission/stargate) "bc" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas/clown_hat,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"bd" = (/turf/open/floor/cobble/side,/area/awaymission/stargate) +"be" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 4},/area/awaymission/stargate) +"bf" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"bg" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble,/area/awaymission/stargate) +"bh" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) "bi" = (/obj/structure/flora/grass/jungle,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) +"bj" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble,/area/awaymission/stargate) +"bk" = (/obj/effect/landmark/awaystart,/turf/open/floor/cobble,/area/awaymission/stargate) +"bl" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble/side,/area/awaymission/stargate) +"bm" = (/obj/item/lighter,/turf/open/floor/cobble,/area/awaymission/stargate) +"bn" = (/obj/item/grown/log/tree,/turf/open/floor/cobble,/area/awaymission/stargate) +"bo" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"bp" = (/obj/structure/bonfire,/turf/open/floor/cobble,/area/awaymission/stargate) +"bq" = (/obj/structure/barricade/sandbags,/obj/structure/barricade/sandbags,/turf/open/floor/cobble,/area/awaymission/stargate) +"br" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble,/area/awaymission/stargate) +"bs" = (/obj/structure/fence{dir = 4},/turf/open/floor/plating/dirt,/area/awaymission/stargate/building/mountain) +"bt" = (/obj/structure/fence/door,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) +"bu" = (/obj/structure/fence{dir = 4},/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) +"bv" = (/obj/structure/falsewall/abductor,/turf/open/space/basic,/area/awaymission/stargate/building) +"bw" = (/obj/machinery/door/airlock/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bx" = (/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"by" = (/turf/closed/wall/mineral/abductor,/area/awaymission/stargate/building) +"bz" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) "bA" = (/obj/effect/decal/cleanable/blood/gibs/human/body,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) +"bB" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) "bC" = (/obj/machinery/hydroponics/soil,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) +"bD" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"bE" = (/mob/living/simple_animal/hostile/netherworld,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bF" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"bG" = (/obj/structure/fence/door,/turf/open/floor/cobble,/area/awaymission/stargate) +"bH" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble,/area/awaymission/stargate) +"bI" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) +"bJ" = (/obj/machinery/light{dir = 8},/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bK" = (/obj/structure/table/abductor,/obj/item/surgical_drapes,/obj/item/scalpel/alien,/obj/item/cautery/alien,/obj/item/circular_saw/alien,/obj/item/hemostat/alien,/obj/item/retractor/alien,/obj/item/surgicaldrill/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "bL" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/chem_dispenser/drinks,/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) +"bM" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bN" = (/obj/structure/chair/stool/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bO" = (/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "bP" = (/obj/structure/chair/sofa{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "bQ" = (/obj/effect/decal/remains/robot,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "bR" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate) "bS" = (/obj/structure/flora/junglebush/large,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) +"bT" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bU" = (/obj/structure/door_assembly/door_assembly_abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bV" = (/obj/effect/decal/remains/xeno,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bW" = (/obj/effect/decal/cleanable/semen,/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bX" = (/obj/item/clothing/suit/space/hardsuit/lavaknight,/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh) +"bY" = (/obj/machinery/abductor/gland_dispenser,/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building) +"bZ" = (/obj/structure/reagent_dispensers/keg/semen,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"ca" = (/obj/machinery/abductor/experiment{team_number = 100},/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building) +"cb" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble,/area/awaymission/stargate) +"cc" = (/turf/open/floor/concrete,/area/awaymission/stargate) +"cd" = (/turf/open/floor/concrete/smooth,/area/awaymission/stargate) +"cf" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble,/area/awaymission/stargate) +"cg" = (/obj/effect/decal/cleanable/blood/gibs/human,/turf/open/floor/cobble,/area/awaymission/stargate) +"ch" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"ci" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) "cj" = (/obj/machinery/door/airlock/wood/glass,/obj/structure/barricade/wooden/crude,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"ck" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"cl" = (/obj/effect/decal/remains/human,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"cm" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"cn" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"co" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble/corner,/area/awaymission/stargate) "cp" = (/mob/living/simple_animal/hostile/hs13mimic,/turf/open/floor/grass,/area/awaymission/stargate) +"cq" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble,/area/awaymission/stargate) +"cr" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/floor/cobble,/area/awaymission/stargate) "cs" = (/turf/open/floor/wood,/area/awaymission/stargate/building) +"ct" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/cobble,/area/awaymission/stargate) +"cu" = (/obj/effect/decal/remains/human,/turf/open/floor/cobble,/area/awaymission/stargate) +"cv" = (/obj/structure/closet/crate,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building) +"cw" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/cobble,/area/awaymission/stargate) "cx" = (/obj/structure/table/reinforced,/obj/item/robot_module/clown,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"cy" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer,/turf/open/floor/cobble,/area/awaymission/stargate) +"cz" = (/mob/living/simple_animal/hostile/netherworld/migo,/turf/open/floor/cobble,/area/awaymission/stargate) +"cB" = (/obj/structure/statue/bananium/clown,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) +"cD" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side,/area/awaymission/stargate) +"cE" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side,/area/awaymission/stargate) +"cF" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble/side,/area/awaymission/stargate) +"cG" = (/obj/effect/decal/remains/human,/turf/open/floor/cobble/side,/area/awaymission/stargate) +"cH" = (/obj/effect/decal/remains/xeno,/turf/open/floor/cobble/side,/area/awaymission/stargate) "cI" = (/obj/structure/flora/tree/palm,/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) +"cJ" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/floor/cobble/side,/area/awaymission/stargate) +"cK" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble/side,/area/awaymission/stargate) "db" = (/obj/structure/table/wood,/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/wood,/area/awaymission/stargate/building) -"di" = (/obj/structure/barricade/wooden,/turf/open/indestructible/cobble/side{dir = 1},/area/awaymission/stargate) "dt" = (/turf/closed/wall/mineral/bananium,/area/awaymission/stargate/building) "dz" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/open/floor/wood,/area/awaymission/stargate/building) "dO" = (/obj/item/gun/ballistic/shotgun/riot,/obj/item/gun/ballistic/shotgun/riot,/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) @@ -59,7 +146,6 @@ "ee" = (/obj/structure/chair/wood{dir = 1},/turf/open/floor/wood,/area/awaymission/stargate/building) "el" = (/obj/structure/flora/rock/jungle,/turf/open/floor/grass,/area/awaymission/stargate) "et" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"eI" = (/obj/structure/barricade/sandbags,/turf/open/indestructible/cobble/side{dir = 4},/area/awaymission/stargate) "eJ" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/open/floor/wood,/area/awaymission/stargate/building) "eL" = (/obj/structure/kitchenspike,/turf/open/floor/wood,/area/awaymission/stargate/building) "eM" = (/obj/effect/decal/cleanable/blood/gibs/human,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) @@ -67,13 +153,9 @@ "eZ" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "fm" = (/obj/structure/table/plasmaglass,/obj/item/ashtray,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "fB" = (/obj/structure/table/wood,/obj/item/kitchen/rollingpin,/turf/open/floor/wood,/area/awaymission/stargate/building) -"fH" = (/obj/structure/fence{dir = 4},/turf/open/indestructible/cobble/side{dir = 4},/area/awaymission/stargate) -"fJ" = (/obj/effect/decal/cleanable/blood,/turf/open/indestructible/cobble/side{dir = 1},/area/awaymission/stargate) "fN" = (/obj/machinery/door/airlock/wood,/turf/open/floor/wood,/area/awaymission/stargate/building) "fO" = (/obj/structure/flora/junglebush/b,/turf/open/floor/grass,/area/awaymission/stargate) "fU" = (/obj/structure/table/wood,/obj/item/reagent_containers/glass/bottle/charcoal,/obj/item/reagent_containers/glass/bottle/charcoal,/turf/open/floor/wood,/area/awaymission/stargate/building) -"gc" = (/mob/living/simple_animal/butterfly,/turf/open/indestructible/cobble/side{dir = 8},/area/awaymission/stargate) -"gn" = (/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "gC" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "gI" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/wood,/area/awaymission/stargate/building) "hc" = (/obj/structure/chair/sofa/left{dir = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) @@ -97,7 +179,6 @@ "jX" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/glass/fifty,/turf/open/floor/wood,/area/awaymission/stargate/building) "jZ" = (/obj/structure/flora/grass/jungle,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "ke" = (/obj/structure/flora/tree/desertdead,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"kh" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/indestructible/cobble/corner,/area/awaymission/stargate) "ki" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "kp" = (/obj/machinery/light,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "kM" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) @@ -109,7 +190,6 @@ "mb" = (/obj/structure/rack/shelf,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "md" = (/obj/structure/table/wood,/obj/item/reagent_containers/food/drinks/bottle/wine,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "me" = (/obj/structure/table/wood,/obj/item/storage/fancy/candle_box,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"mk" = (/obj/effect/decal/remains/human,/turf/open/indestructible/cobble,/area/awaymission/stargate) "mt" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "mv" = (/obj/machinery/chem_dispenser,/turf/open/floor/wood,/area/awaymission/stargate/building) "mx" = (/obj/structure/table/wood,/obj/item/storage/box/drinkingglasses,/obj/item/storage/box/drinkingglasses,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) @@ -123,8 +203,6 @@ "nh" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "nm" = (/obj/structure/bonfire,/turf/open/floor/wood,/area/awaymission/stargate/building) "nn" = (/obj/structure/table/wood/fancy/blackred,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) -"np" = (/obj/effect/decal/cleanable/blood,/turf/open/indestructible/cobble,/area/awaymission/stargate) -"ny" = (/turf/open/indestructible/cobble/side{dir = 4},/area/awaymission/stargate) "nL" = (/obj/structure/table/reinforced,/obj/item/storage/backpack/duffelbag/med/surgery,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "nR" = (/obj/structure/table/wood/fancy/black,/obj/item/reagent_containers/food/drinks/trophy,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "nX" = (/obj/machinery/light{dir = 8; light_color = "#e8eaff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) @@ -133,42 +211,32 @@ "oh" = (/obj/machinery/smartfridge/chemistry,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) "ox" = (/obj/structure/chair/sofa/left{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "oz" = (/obj/structure/chair/sofa{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) -"oC" = (/obj/machinery/abductor/gland_dispenser,/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building) "oQ" = (/mob/living/simple_animal/chicken,/turf/open/floor/grass,/area/awaymission/stargate) "oS" = (/obj/machinery/gateway/centeraway,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "oX" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "pd" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "pm" = (/obj/structure/table/wood,/obj/item/lighter,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "pu" = (/turf/closed/wall/mineral/cult,/area/awaymission/stargate/building) -"pA" = (/mob/living/simple_animal/butterfly,/turf/open/indestructible/cobble,/area/awaymission/stargate) "pV" = (/obj/structure/flora/junglebush/large,/turf/open/floor/grass,/area/awaymission/stargate) "qf" = (/obj/structure/flora/rock/jungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "qw" = (/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain) "qC" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "qD" = (/obj/structure/flora/ausbushes/brflowers,/turf/open/floor/grass,/area/awaymission/stargate) "qK" = (/obj/structure/falsewall/sandstone,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"qP" = (/obj/structure/fence{dir = 4},/turf/open/indestructible/cobble/side{dir = 8},/area/awaymission/stargate) "qS" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "qU" = (/obj/structure/sink/puddle,/turf/open/floor/grass,/area/awaymission/stargate) -"rg" = (/obj/effect/decal/cleanable/blood,/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "rh" = (/obj/effect/decal/cleanable/blood,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "rt" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "ry" = (/obj/structure/flora/junglebush/large,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "rC" = (/obj/structure/flora/ausbushes/brflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) -"rD" = (/obj/effect/decal/cleanable/blood/gibs/human,/turf/open/indestructible/cobble,/area/awaymission/stargate) "rU" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/reagentgrinder,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) "rX" = (/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "sn" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) -"su" = (/obj/structure/barricade/wooden,/turf/open/indestructible/cobble/side{dir = 8},/area/awaymission/stargate) -"sy" = (/obj/structure/fence/door,/turf/open/indestructible/cobble,/area/awaymission/stargate) -"sC" = (/turf/open/indestructible/cobble/corner{dir = 4},/area/awaymission/stargate) "sE" = (/obj/structure/flora/ausbushes/palebush,/turf/open/floor/grass,/area/awaymission/stargate) "sL" = (/turf/closed/wall/mineral/wood/nonmetal,/area/awaymission/stargate/building) "sM" = (/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "sW" = (/obj/structure/flora/tree/palm,/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate) -"sY" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/indestructible/cobble,/area/awaymission/stargate) "tc" = (/obj/structure/flora/junglebush,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) -"th" = (/obj/structure/barricade/sandbags,/obj/structure/barricade/sandbags,/turf/open/indestructible/cobble,/area/awaymission/stargate) "tj" = (/obj/structure/falsewall/sandstone,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) "tz" = (/obj/structure/table/wood,/obj/item/twohanded/bonespear,/turf/open/floor/wood,/area/awaymission/stargate/building) "tC" = (/obj/structure/chair/sofa/right{dir = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) @@ -177,7 +245,6 @@ "ua" = (/obj/structure/barricade/wooden,/obj/effect/decal/cleanable/blood/tracks{dir = 8},/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "uA" = (/obj/structure/chair/wood{dir = 8},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "uB" = (/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate) -"uC" = (/obj/structure/barricade/wooden,/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "uI" = (/turf/open/indestructible/cobble/side{dir = 8},/area/awaymission/stargate) "uO" = (/mob/living/simple_animal/cow,/turf/open/floor/grass,/area/awaymission/stargate) "uR" = (/turf/open/indestructible/cobble/corner,/area/awaymission/stargate) @@ -189,13 +256,9 @@ "vz" = (/obj/structure/table/wood/fancy/black,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "vM" = (/obj/structure/closet/crate/wooden,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "vO" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) -"vS" = (/obj/machinery/light{dir = 8},/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"wl" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/indestructible/cobble/side{dir = 8},/area/awaymission/stargate) -"wv" = (/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "wF" = (/obj/structure/rack/shelf,/obj/item/melee/classic_baton/telescopic,/obj/item/melee/classic_baton/telescopic,/obj/item/melee/classic_baton/telescopic,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "wL" = (/obj/structure/flora/ausbushes/palebush,/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate) "wP" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"wY" = (/obj/effect/decal/remains/xeno,/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "wZ" = (/obj/machinery/door/airlock/wood,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "xm" = (/obj/structure/table/wood/fancy,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "xn" = (/turf/open/indestructible/cobble,/area/awaymission/stargate) @@ -214,26 +277,19 @@ "yZ" = (/turf/open/water/jungle,/area/awaymission/stargate) "zn" = (/obj/structure/chair/stool/bar,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "zD" = (/obj/structure/closet/crate/wooden,/obj/item/clothing/suit/armor/bone,/obj/item/clothing/head/helmet/skull,/obj/item/clothing/gloves/bracer,/obj/item/clothing/accessory/talisman,/turf/open/floor/wood,/area/awaymission/stargate/building) -"zF" = (/mob/living/simple_animal/hostile/netherworld/migo,/turf/open/indestructible/cobble,/area/awaymission/stargate) "zW" = (/obj/effect/rune/apocalypse,/obj/structure/spawner/nether,/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building) -"Al" = (/obj/item/lighter,/turf/open/indestructible/cobble,/area/awaymission/stargate) -"Av" = (/turf/open/indestructible/concrete,/area/awaymission/stargate) "Aw" = (/obj/structure/table/wood,/obj/item/storage/toolbox/mechanical/old,/turf/open/floor/wood,/area/awaymission/stargate/building) "Az" = (/obj/structure/dresser,/turf/open/floor/wood,/area/awaymission/stargate/building) "AA" = (/obj/structure/table/wood,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/turf/open/floor/wood,/area/awaymission/stargate/building) "AC" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "AO" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/wood,/area/awaymission/stargate/building) -"AW" = (/obj/structure/barricade/sandbags,/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "Be" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"BB" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/obj/structure/closet/crate/coffin/metalcoffin,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "BC" = (/obj/structure/flora/ausbushes/palebush,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "BI" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "BP" = (/obj/machinery/light,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "BR" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "BZ" = (/obj/structure/table/wood/fancy/black,/obj/item/export/bottle/champagne,/obj/item/reagent_containers/food/drinks/drinkingglass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) -"Cb" = (/turf/open/indestructible/concrete/smooth,/area/awaymission/stargate) "Cc" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/chem_dispenser/drinks/beer/fullupgrade,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) -"Cj" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "Cp" = (/obj/structure/chair/sofa/right{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "Cq" = (/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building) "Ct" = (/obj/machinery/smartfridge/drying_rack,/turf/open/floor/wood,/area/awaymission/stargate/building) @@ -249,27 +305,19 @@ "DE" = (/mob/living/simple_animal/hostile/retaliate/clown/fleshclown,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "DF" = (/obj/machinery/smartfridge/food,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) "DM" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) -"DQ" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/indestructible/cobble,/area/awaymission/stargate) "Ed" = (/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) "Eh" = (/obj/effect/decal/remains/robot,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"Ei" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer,/turf/open/indestructible/cobble,/area/awaymission/stargate) -"Ej" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/indestructible/cobble,/area/awaymission/stargate) "En" = (/obj/machinery/chem_master,/turf/open/floor/wood,/area/awaymission/stargate/building) "Ey" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "EI" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/mineral/titanium,/area/awaymission/stargate/building) -"EQ" = (/mob/living/simple_animal/hostile/netherworld,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "ER" = (/obj/machinery/light{dir = 1},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Fc" = (/obj/structure/table/wood,/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Fg" = (/obj/structure/flora/grass/jungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "Fr" = (/obj/machinery/gateway,/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"Fs" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/indestructible/cobble,/area/awaymission/stargate) -"Fw" = (/obj/structure/barricade/sandbags,/turf/open/indestructible/cobble/side{dir = 8},/area/awaymission/stargate) "FA" = (/obj/structure/ore_box,/turf/open/floor/wood,/area/awaymission/stargate/building) "FI" = (/obj/machinery/gateway{dir = 5},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "FM" = (/obj/structure/table/wood,/obj/item/storage/firstaid/regular,/turf/open/floor/wood,/area/awaymission/stargate/building) -"FO" = (/obj/structure/chair/stool/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "FQ" = (/obj/machinery/conveyor{id = "mining_internal"},/turf/open/floor/wood,/area/awaymission/stargate/building) -"Gb" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "Gg" = (/obj/machinery/mecha_part_fabricator,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "GT" = (/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "GV" = (/obj/machinery/light{dir = 8},/obj/structure/closet/crate/wooden,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) @@ -278,25 +326,20 @@ "Hp" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate) "HE" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "Ia" = (/obj/structure/table/wood,/obj/item/storage/box/beakers,/obj/item/storage/box/syringes,/turf/open/floor/wood,/area/awaymission/stargate/building) -"Ib" = (/mob/living/simple_animal/butterfly,/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "Ie" = (/obj/machinery/mineral/processing_unit{dir = 1},/turf/open/floor/wood,/area/awaymission/stargate/building) "Ik" = (/obj/structure/chair/sofa{dir = 8},/obj/machinery/light{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "Im" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"Ip" = (/turf/open/indestructible/cobble/corner{dir = 8},/area/awaymission/stargate) -"Iu" = (/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "Iv" = (/obj/machinery/gateway{dir = 8},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "IJ" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/metal/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/wood,/area/awaymission/stargate/building) "IP" = (/obj/structure/chair/wood,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "IQ" = (/obj/effect/decal/cleanable/semen,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "IU" = (/obj/machinery/door/airlock/bananium,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) -"IV" = (/obj/effect/decal/remains/human,/turf/open/indestructible/cobble/side{dir = 1},/area/awaymission/stargate) "IX" = (/obj/structure/flora/ausbushes/palebush,/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate) "Jb" = (/obj/effect/decal/remains/human,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Jc" = (/obj/effect/decal/remains/human,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Jh" = (/obj/structure/rack/shelf,/obj/item/gun/ballistic/automatic/wt550,/obj/item/gun/ballistic/automatic/wt550,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Jm" = (/obj/machinery/door/airlock/wood,/obj/structure/barricade/wooden/crude,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Jp" = (/obj/structure/flora/junglebush/c,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) -"Jw" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/indestructible/cobble/side{dir = 1},/area/awaymission/stargate) "JB" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/awaymission/stargate/building) "JX" = (/obj/machinery/sleeper{dir = 4; icon_state = "sleeper"},/turf/open/floor/wood,/area/awaymission/stargate/building) "Kc" = (/mob/living/simple_animal/hostile/retaliate/clown/mutant,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) @@ -304,7 +347,6 @@ "Kn" = (/turf/open/floor/mineral/titanium,/area/awaymission/stargate/building) "KE" = (/obj/structure/flora/junglebush/c,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "KG" = (/obj/structure/chair/wood{dir = 1},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"KO" = (/obj/structure/statue/bananium/clown,/turf/open/indestructible/cobble/side{dir = 4},/area/awaymission/stargate) "KQ" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/wood,/area/awaymission/stargate/building) "KY" = (/obj/structure/dresser,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "KZ" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) @@ -314,11 +356,9 @@ "Lp" = (/obj/machinery/gateway{dir = 4},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Lq" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/wood,/area/awaymission/stargate/building) "Ls" = (/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"Lv" = (/obj/effect/decal/remains/human,/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "Ly" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "Lz" = (/obj/machinery/shower{dir = 4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "LB" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"LC" = (/obj/effect/decal/remains/xeno,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "LI" = (/obj/structure/flora/rock/pile,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "LJ" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "LK" = (/obj/structure/flora/ausbushes/reedbush,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) @@ -333,20 +373,14 @@ "MC" = (/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "MD" = (/obj/structure/chair/sofa{dir = 4},/obj/machinery/light{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "MI" = (/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate) -"MZ" = (/obj/structure/reagent_dispensers/keg/semen,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"Ne" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/indestructible/cobble/side{dir = 1},/area/awaymission/stargate) "Nh" = (/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Nk" = (/obj/structure/frame/computer,/obj/effect/decal/cleanable/glass,/obj/item/shard,/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building) "Nr" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "Nv" = (/obj/machinery/light{dir = 4; light_color = "#c1caff"},/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) -"NA" = (/obj/structure/table/abductor,/obj/item/surgical_drapes,/obj/item/scalpel/alien,/obj/item/cautery/alien,/obj/item/circular_saw/alien,/obj/item/hemostat/alien,/obj/item/retractor/alien,/obj/item/surgicaldrill/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "ND" = (/obj/structure/mirror,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) "NN" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "NR" = (/obj/machinery/processor,/turf/open/floor/wood,/area/awaymission/stargate/building) -"NU" = (/obj/structure/barricade/wooden,/turf/open/indestructible/cobble,/area/awaymission/stargate) "Oi" = (/turf/closed/wall/mineral/titanium,/area/awaymission/stargate/building) -"Ol" = (/obj/structure/bonfire,/turf/open/indestructible/cobble,/area/awaymission/stargate) -"Om" = (/obj/machinery/door/airlock/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "On" = (/obj/structure/curtain,/turf/open/floor/wood,/area/awaymission/stargate/building) "Op" = (/obj/structure/closet/crate/wooden,/turf/open/floor/wood,/area/awaymission/stargate/building) "Ov" = (/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) @@ -355,10 +389,8 @@ "OE" = (/turf/open/floor/wood,/area/awaymission/stargate) "OK" = (/obj/structure/rack/shelf,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "OM" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"OZ" = (/obj/machinery/abductor/experiment{team_number = 100},/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building) "Ph" = (/obj/structure/barricade/sandbags,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "Pi" = (/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"Pw" = (/obj/structure/fence{dir = 4},/turf/open/indestructible/cobble,/area/awaymission/stargate) "Pz" = (/obj/structure/table/wood,/obj/item/pickaxe,/obj/item/pickaxe,/obj/item/shovel,/obj/item/shovel,/turf/open/floor/wood,/area/awaymission/stargate/building) "PA" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "PC" = (/obj/structure/table,/turf/open/floor/mineral/titanium/white,/area/awaymission/stargate/building) @@ -372,7 +404,6 @@ "Qv" = (/turf/open/floor/grass,/area/awaymission/stargate) "Qx" = (/obj/structure/chair/wood,/turf/open/floor/mineral/gold,/area/awaymission/stargate/building) "QA" = (/obj/structure/flora/junglebush,/turf/open/floor/grass,/area/awaymission/stargate) -"QM" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/indestructible/cobble,/area/awaymission/stargate) "QN" = (/obj/effect/decal/cleanable/blood/tracks{dir = 8},/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "QZ" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/wood,/area/awaymission/stargate/building) "Rb" = (/obj/machinery/rnd/destructive_analyzer,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) @@ -386,7 +417,6 @@ "RO" = (/obj/machinery/vending/kink{free = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "RT" = (/obj/structure/flora/grass/jungle/b,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "RX" = (/obj/structure/chair/sofa/corner{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) -"Sh" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/indestructible/cobble,/area/awaymission/stargate) "Su" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "SF" = (/obj/structure/table/wood,/obj/item/kitchen/knife/ritual,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "SI" = (/obj/item/storage/box/rubbershot{pixel_x = -3; pixel_y = 3},/obj/item/storage/box/rubbershot{pixel_x = -3; pixel_y = 3},/obj/item/storage/box/rubbershot,/obj/item/storage/box/rubbershot,/obj/item/storage/box/rubbershot{pixel_x = 3; pixel_y = -3},/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) @@ -397,7 +427,6 @@ "Tv" = (/obj/structure/flora/tree/palm,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "TD" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "TE" = (/obj/machinery/deepfryer,/turf/open/floor/wood,/area/awaymission/stargate/building) -"TG" = (/obj/item/grown/log/tree,/turf/open/indestructible/cobble,/area/awaymission/stargate) "TI" = (/obj/structure/flora/tree/palm,/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate) "TM" = (/obj/machinery/rnd/production/circuit_imprinter,/obj/item/reagent_containers/dropper,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "TR" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/carpet,/area/awaymission/stargate/building) @@ -418,27 +447,21 @@ "VG" = (/obj/structure/table/plasmaglass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "VJ" = (/obj/structure/table/wood,/obj/machinery/microwave,/turf/open/floor/wood,/area/awaymission/stargate/building) "VM" = (/obj/structure/table/reinforced,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) -"VU" = (/obj/structure/barricade/wooden,/turf/open/indestructible/cobble/side{dir = 4},/area/awaymission/stargate) "VY" = (/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "VZ" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/wood,/area/awaymission/stargate/building) "Wa" = (/obj/structure/bed,/obj/effect/decal/cleanable/semen,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "Wh" = (/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "WB" = (/obj/machinery/gibber,/turf/open/floor/wood,/area/awaymission/stargate/building) -"WJ" = (/obj/structure/closet/crate/coffin/metalcoffin,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "WL" = (/obj/machinery/mineral/unloading_machine{dir = 1; icon_state = "unloader-corner"; input_dir = 1; output_dir = 2},/turf/open/floor/wood,/area/awaymission/stargate/building) "WO" = (/obj/machinery/mineral/processing_unit_console,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) "WR" = (/obj/machinery/gateway{dir = 9},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"WU" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/indestructible/cobble/side,/area/awaymission/stargate) "WW" = (/obj/machinery/vending/boozeomat/all_access,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) "Xg" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain) -"Xh" = (/obj/effect/decal/cleanable/semen,/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "Xi" = (/obj/structure/mineral_door/wood,/turf/open/floor/wood,/area/awaymission/stargate/building) "Xp" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"Xr" = (/obj/structure/barricade/sandbags,/turf/open/indestructible/cobble,/area/awaymission/stargate) "XE" = (/obj/structure/flora/tree/palm,/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate) "XF" = (/obj/structure/bonfire,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "XH" = (/obj/structure/barricade/wooden,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"XI" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "XJ" = (/obj/machinery/gateway{dir = 10},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "XW" = (/obj/machinery/door/airlock/wood,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "Yg" = (/obj/structure/chair/comfy/shuttle{dir = 1},/obj/machinery/light,/turf/open/floor/mineral/titanium/blue,/area/awaymission/stargate/building) @@ -449,7 +472,6 @@ "YP" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/turf/open/floor/wood,/area/awaymission/stargate/building) "YQ" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/mineral/sandstone/twelve,/obj/item/stack/sheet/mineral/sandstone/twelve,/turf/open/floor/wood,/area/awaymission/stargate/building) "YS" = (/obj/structure/table/wood,/obj/item/mop,/obj/item/reagent_containers/glass/bucket,/obj/item/soap,/turf/open/floor/wood,/area/awaymission/stargate/building) -"Za" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/indestructible/cobble/side{dir = 1},/area/awaymission/stargate) "Zh" = (/obj/structure/table/wood,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Zl" = (/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate) "Zq" = (/obj/machinery/light,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) @@ -487,110 +509,110 @@ aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLskeLs aaaaabababababababababababababababababababababababababababLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLILsLsLsLILsLsLsaWLsLsLsLILsLsLsLsabababLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLILsLsLsLsLsLsOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvLsLsLsLskeLsLsLsLsLsLsabababLsLsLsLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsLsLsLsLsUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsOvKYUFTnOvKYUFTnOvkQcsOvKYUFTnOvKYUFTnOvLsLsLsLsLsLsLsLsabababababababLsLsLsLsLILsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsBRLsabababababababababLsababLsLsLsLsLsLsLsLsUCrXrXDDvzyOvzvzrXrXUCWJNhBBNhWJUCwPPiUCNhNhNhNhPWNhNhNhNhUCLsLsLsLILsBRLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsOvKYUFTnOvKYUFTnOvkQcsOvKYUFTnOvKYUFTnOvLsLsLsLsLsLsLsLsabababababababLsLsLsLsLILsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsBRLsabababababababababLsababLsLsLsLsLsLsLsLsUCrXrXDDvzyOvzvzrXrXUCazaHaIaJaKUCwPPiUCNhNhNhNhPWNhNhNhNhUCLsLsLsLILsBRLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababababLsLskeLsLsLsLsLsLsLsLskeLsLsLsOvGVUFWaOvGVUFWaOveQVZOvvMUFDzOvvMUFDzOvLsLsLILsLILsLsababababababababLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsLsLsLsLsLsBRLILsabababababababababababababLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLILsLsUCrXrXnRQxjFQxnRrXrXUCNhNhOMNhNhmtPiqCUCNhEhNhRtNhNhJbNhBeUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsOvUFUFUFOvUFUFUFOvaqcsOvUFUFUFOvUFUFUFOvLsLsLsLsLsLsababababababababababLsLsLsOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCMxrXrXrXrXrXrXrXNvUCWJNhWJNhWJUCPiQgUCNhNhPibQPiPiPiNhNhUCLsLsLsLsLsLsLsLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsOvUFUFUFOvUFUFUFOvaqcsOvUFUFUFOvUFUFUFOvLsLsLsLsLsLsababababababababababLsLsLsOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCMxrXrXrXrXrXrXrXNvUCaLZMvfuANhUCPiQgUCNhNhPibQPiPiPiNhNhUCLsLsLsLsLsLsLsLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababababLsLsLsLsLILsLBLsLsaWLsLsLsLsLsOvOvXWOvOvOvXWOvOvOvSPOvOvXWOvOvOvXWOvOvLsLsLsLsLsLsababababababababababLsLsLsOvRylgvcOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsUCrXNrrXPiPiPirXrXrXUCUCUCUCUCUCUCJcPiUCNhBeJcWRDfFIPiNhNhUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvDrWhvOWhWhWhACWhWhWhWhACWhWhWhWhWhWhOvLsLsLsLsababababababababababababLsLsLsOvcsQZcsOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLsabababababababababababababababababLsLsLsLsababababababababababababababLsLskeLsLsLsLsLsUCNhNhNhPiPiPiPiPiPiJmPiQgPiPibQPiPiqCUCoXNhPiIvoSLpPiRteZUCLsLsLsLsLsLsLsLsLsLsLsLskeLsababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsOvWhWhWhWhWhWhWhWhvOWhWhWhWhvOWhWhWhWhOvLsLsLsabababababababababababababLsLsLsOvcscscsOvLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsUCNhNhNhPiPiPiPiPiPiJmkpwPPiJcPiPiPiPiUCNhEhwPXJFrmBPiNhNhUCLsLsBRLsLsLskeLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsOvOvsnOvOvOvOvOvOvOvOvOvOvOvOvOvOvsnOvOvLsLsLsababababababababababababLsLsLsLsOvOvfNOvOvOvOvOvOvLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLsLsLILsLsabababababababababababababLsLsLsLsLsLILsLsUCNhNhNhPiPiPiNhOMNhUCUCUCOmUCUCUCwPbQUCNhNhetPiLJPiJcNhNhUCLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsOvROWhROnnrUCcbLWWKmKmWWbLCcrUnnROWhROOvLsLsLsabababababababababababLskeLsLsLsOvcscsIaUILqcsEnOvLsLsLsLsLsLsLsLsLsabababababababababababababababababababababLsLsLskeLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCgnEQgngngnUCPiPiUCRtJbNhPGPGPGNhBeNhUCLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsOvDrWhWhEdEdEdEdEdEdEdYvEdEdEdEdWhWhDjOvLsLsLsLsababababababababababLsLsLsLsLsOvJXcscscsltQZmvOvLsLsLsLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababLsLILsLsLsaWLsLsUCnXNhNhPiPiPiNhNhtIUCvSgnNAgnCjUCQgqCUCNhNhNhPikpPiNhNhRtUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsaWLsLsLsLskeLsLsLsLsaWLsLsOvWhWhznnnEdYvEdEdEdEdEdEdEdEdnnznWhWhOvLsHELsLsabababababababababababLsLsLsLsOvcsKQQZcscsKQcsOvLsLsLsLsLILsLsLsabababababababababababababababababababababLsLsLBLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCgnFOIugngnUCPiPiUCUCUCUCcjUCcjUCUCUCUCLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsLsLsLsOvywWhznyCnnnnnnnnnnnnnnnnnnnnyCznWhywOvLsLsLsLsabababababababababababLsLsLsLsOvJXcscscscscscsOvLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLILsLsLsababababababababababababababLsLsLsLsLsLsLsUCNhNhNhPiPiQgNhNhNhUCCjEQNAgnCjUCPiJckMPiPiPiwPERPiPiPiUmUCLsLsLsLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsLsLsOvoxWhWhznznznznznznznznznznznznvOWhCpOvLsLsLsLsLsLsababababababababLsLsLsLsLsOvOvOvAOOvOvAOohOvLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLskeLsLsLsUCKGKGKGPiPiPiKGKGKGUCXIFOIugngnUCPiPiPiQgPiJcPiPiPiPiPiQgUCLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsOvMDVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGIkOvLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLsvvapapcsmaapcscsOvLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsUCnXNhNhPiPiPiNhNhtIUCCjLCNAgnCjUCUCUCUCUCUCUCUCmtUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsOvbPVkWhvOWhEdRCEdWhvOEdRCEdWhWhWhfmozOvLsLsLILsLsLsLsLsabababababLsLsLsLsLsLsvvxGcscscsahtNQZOvLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLsLILsLsUCKGKGKGPiPiPiKGKGKGUCgnFOXhEQgnUCJhPWOKNhaxPWaiNhNhmbPWSIUCLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvbPVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGozOvLskeLsLsLsLsLsLsLsabababababLsLsLsLsLsOvxGQZcscsapcscsOvLskeLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsUCNhNhOMPiPiPiNhNhNhUCvSgngngnCjUCJhNhOMNhNhOMNhNhOMNhNhdOUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsOvTbDxWhWhWhWhWhWhWhWhWhWhWhWhWhWhxTRXOvLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsvvxGcsKQcsahtNcsOvLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababababababLsLsLsLsLsUCHiNhNhPiPSPiNhNhHiUCoCEQMZgnOZUCayNhazNhaiNhaiNhNhwFNhaGUCLsLsLsLILsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsOvOvsnOvOvOvOvOvOvOvOvOvOvOvOvOvOvsnOvOvLsLsLsababababababababababababLsLsLsLsOvOvfNOvOvOvOvOvOvLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLsLsLILsLsabababababababababababababLsLsLsLsLsLILsLsUCNhNhNhPiPiPiNhOMNhUCUCUCaMUCUCUCwPbQUCNhNhetPiLJPiJcNhNhUCLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsOvROWhROnnrUCcbLWWKmKmWWbLCcrUnnROWhROOvLsLsLsabababababababababababLskeLsLsLsOvcscsIaUILqcsEnOvLsLsLsLsLsLsLsLsLsabababababababababababababababababababababLsLsLskeLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCaNaPNhaPaNUCPiPiUCRtJbNhPGPGPGNhBeNhUCLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsOvDrWhWhEdEdEdEdEdEdEdYvEdEdEdEdWhWhDjOvLsLsLsLsababababababababababLsLsLsLsLsOvJXcscscsltQZmvOvLsLsLsLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababLsLILsLsLsaWLsLsUCnXNhNhPiPiPiNhNhtIUCoXNhOMNhNhUCQgqCUCNhNhNhPikpPiNhNhRtUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsaWLsLsLsLskeLsLsLsLsaWLsLsOvWhWhznnnEdYvEdEdEdEdEdEdEdEdnnznWhWhOvLsHELsLsabababababababababababLsLsLsLsOvcsKQQZcscsKQcsOvLsLsLsLsLILsLsLsabababababababababababababababababababababLsLsLBLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCNhNhNhNhNhUCPiPiUCUCUCUCcjUCcjUCUCUCUCLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsLsLsLsOvywWhznyCnnnnnnnnnnnnnnnnnnnnyCznWhywOvLsLsLsLsabababababababababababLsLsLsLsOvJXcscscscscscsOvLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLILsLsLsababababababababababababababLsLsLsLsLsLsLsUCNhNhNhPiPiQgNhNhNhUCNhvfNhvfNhUCPiJckMPiPiPiwPERPiPiPiUmUCLsLsLsLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsLsLsOvoxWhWhznznznznznznznznznznznznvOWhCpOvLsLsLsLsLsLsababababababababLsLsLsLsLsOvOvOvAOOvOvAOohOvLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLskeLsLsLsUCKGKGKGPiPiPiKGKGKGUCaQaRNhaRNhUCPiPiPiQgPiJcPiPiPiPiPiQgUCLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsOvMDVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGIkOvLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLsvvapapcsmaapcscsOvLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsUCnXNhNhPiPiPiNhNhtIUCNhvfNhvfOMUCUCUCUCUCUCUCUCmtUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsOvbPVkWhvOWhEdRCEdWhvOEdRCEdWhWhWhfmozOvLsLsLILsLsLsLsLsabababababLsLsLsLsLsLsvvxGcscscsahtNQZOvLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLsLILsLsUCKGKGKGPiPiPiKGKGKGUCNhaROMaRNhUCJhPWOKNhaxPWaiNhNhmbPWSIUCLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvbPVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGozOvLskeLsLsLsLsLsLsLsabababababLsLsLsLsLsOvxGQZcscsapcscsOvLskeLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsUCNhNhOMPiPiPiNhNhNhUCoXvfNhvfNhUCJhNhOMNhNhOMNhNhOMNhNhdOUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsOvTbDxWhWhWhWhWhWhWhWhWhWhWhWhWhWhxTRXOvLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsvvxGcsKQcsahtNcsOvLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababababababLsLsLsLsLsUCHiNhNhPiPSPiNhNhHiUCNhaRNhaRNhUCayNhaSNhaiNhaiNhNhwFNhaGUCLsLsLsLILsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababLsLsLILsLILsLsLsLsaWLsLsLsLsLsLsOvOvOvOvOvWhtChcBZWhWhBZtChcWhOvOvOvOvOvLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLskeLsOvxGcscsQZapcscsOvLsLsLsaWLsLsLsLsLsLsLsababababLsabLsLsabLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsababababababababababababababLsLsLsLsUCUCUCUCJmqKJmUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLsLsLsLsLsLsLsBRLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvWhWhWhWhWhvOWhWhWhWhOvLsLsLsLsLsLsaWLsLskeLsLsLsLsLsLsLsLsaWLsLsLsLsvvxGcscscsahtNcsOvLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsyvmTmTmTuRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLskeLsLsOvRxBPWhWhWhWhWhWhBPRxOvLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsvvapapcscsapcsKQOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsabababababababababababababababLsLsLskeLsLsuIxnxnxnnyLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvOvwZOvOvwZOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvSPSPOvvvvvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIxnxnxnnyLsLsLILsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsyvmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTuRLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsLsabababababababababababababababababLsBRLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsLsLsLsababLsLsLsLsLsLsLsuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsLsabababababababababababababababababLsLsLsLsLsuIxnxnsYnyLsLsLsaWLsLsLsLsLsLsLskeLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLskeLsuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsababababababababababababababababababLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababLsLsLsLILsLsLsLsLsLsBRLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsabababababababLsLsLsLsIpwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvxnxnxnxnnyLsLsLsabababababababababababababababababLsLsLsLILsuIxnxnxnnyLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsuIxnxnxnnyLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIxnxnxnnyLsLsBRLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsaWLsLsLsLsLsLsLsabababLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnnyLskeLsLsababababababababababababababLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLBLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsaWLsLsLILsLsLsLILsLsLILsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsabababababababLsLsuIxnxnxnnyLsLsLsLsabababababababababLsababababLsLsLsLskeLsLsuIxnxnxnnyLsLsLsLsLILsLsLsLsLsababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsabababababababababababLsuIxnxnxnnyLsLsLsababababababababLsLsLsababLsLsLsLILBLsLsLsLsuIsYxnxnnyLsLILsLsLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsabLsabLsLsLsLsLsLsLILsLsLsBRLsLsLsLsLsLsLsLsababababLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsuIxnxnxnnyLsLsLsLsLsababababababLsLsLsabLsLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsLsababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsabLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsuIxnxnxnnyLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsuIxnxnxnnyLsLskeLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsaWLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababLsLsLsLsLsBRLsLILsLskeLsLsLsLsabababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsaWLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsLsLsLsLsLsLILskeLsLsLsLsLILsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLILsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLILskeLsLsabababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLskeLsLsababababababLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnxnmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTxnxnxnxnnyLsLsLsLsLsLsLsLsacacababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababLsLskeLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsabababababababababLsLILsLsLsabababababLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsLsuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsLILsLsLsLsacacBIababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababLsLsLsLsababababababababababLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsLsLsLsLsabababacabababababababababababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababababababababababababababLsababababababababababababababababababababababababLsLsLsLILsLsLsLILsLsLsLsLsLsLsuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsLsLsLsLsabababacacacababababababababLsLsLsLsvuLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsaWLsLsLILsuIxnxnxnxnwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvsCLsLsLsLsLsabababacacacacabababababababLsLsLILsLsLsLsLsLsvuLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsabLsLsLsababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababacabababababababLsLsLsLsLsvuLsaELsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLILsLsLsLsLsLsLsLsLsababababababMrMrMrMrXHMrMrMrMrababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsababababacacabababababababLsLsLsLsLsLsLsLsLsLsLsLsaFLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsImLsLsLsLsabababLsLsLsLsLILsLskeLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLILsuIxnxnxnnyLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababacacababababababLsLsLsLsLsLsLsaCLBLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLskiLsLsXpLsLsLILsLsLsLsLsabLsLsLsLsImLsLsLsLsLskeLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLILsLsLsLsLsLsuIxnxnxnnyLsLsaWLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsababLsabababababacacabababababLsLsLsLsvuLsLsLsaWaDLsLsLsLsLsvuLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLBLsLskeLsLsUsLsLsLsLsLsTXLsLsLsLsLsLsXpkiLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsababababLsLsLsababLsLsLsLsLsLsLsLsababababababababababacacacacababababLsLsLsLsLsLILsLsLsLsLsLsvuLsLILsLsLsLsvuLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLILsLsLsLILsLsLsLsLsrhLsLsLILsLsLsLsaWLsLsLsLsLsLsLsLsababababababababLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsabababababababababababababLsLsLsLsLsabababababababababababacacabababababLsLsLsvuLsLsLsLsaBLsLsLsLsLsLsLsaALsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsImLsLsLshKLsLsLsLsLsLsLsLsLsXpLsLsLsLshKLsLsLsUsLsLsLsababababababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsaWLsLsLsLsuIxnxnxnnyLsLILsLsabababababababababababababababababLsLsLsababababababababababababacabababababLsLsLsLsLsvuLskeLsLsvuLsLsLsLsLsLILsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLBTXLsLsLsLBLskeLsLsLsLsLsLsLBLsLILsLsLsLsababababababLsLILsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsuIxnxnxnnyLsLsLsLsabababababababababababababababababababababababababababababababacacabababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsvuLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLskeLsXpLsLsLsXpLsLsLsLsLskebALsLsLsLsLsXFLsLskeLsLsLsLBLsLsLsabababababababLskeLsLsabLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsuIxnxnxnnyLsLsLsLsababababababababababababababababababababababababababababababacacababababababababLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsTXLsLsLBLskeLsLsIQLsLILsLsLsXpLsLsLsLsLsLsbALsLsLsLsXpLsLsLsLsababababababLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababLsLsLILsLsuIxnxnxnnyLsLsLsLsLsababababababababababababababababababababababababababababacacacabababababababababababababababLsLsLsLskeLsababLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLskiLsLsLsXFLsLsLsLsLsLILsTXLsXpLsLsLsTXLsLsLsLILsLsababababababLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsuIxnxnxnnyLsLsLsLsLsababababababababababababababababababababababababababababacacababababababababababababababababababLsLsLsLsabababababababababLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsaWLsLsXpLsLsLsLsLsLsLsLsLsImhKLskeLsLsLsLskeLsLsLsLsLsLsLsLsLsMrLsLsLsababLsLsLsLILsLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsuIxnxnxnnyLsLsLsLsLsabababababababababababababababababababababababababababababacacabababababababababababababababababababLsLsLsabLsLsababababLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsImLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLBLsLsLsLsLsImLsLsLsXFLsLsLsMrLskeLsLsLsLsLsLsLsLsLsabLsabababLsLsLsabLsabababababababababababababababababababababababababababababababababababXHXHXHXHXHsuNUNUNUVUXHXHXHXHababababababababababababababababababababababababababababababacacabababababababababababababababababababLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLILsLsImkiLsXpLsLBLsLsaWLsLsLsLILsLBLsLsLsLsLsLsLsLsQNQNuaQNQNQNLsLILsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsabababababababababababababababababababababababababacabacacacababacacababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsXpLsLsbALsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsUsLsLsLsLsLsMrLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLskeLsLsuIxnxnxnnyLsLsababababababababababababababababababababababababhmacacDMacacacacacacababababababababababababababababababababLsabababababLskeLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsUsLsLsLsLsLsLsLsLILsLskeLsbALsLsLskiLsLsXpLsLsLsLsLsLsLsImLsLsLsMrLsLsLsLsLsLsLsLsLsLsLsababLsLsLsLsLsLsLskeLsLIabababababababababababababababababababababababababababababababLsLsLILsLsLsLsuIxnxnxnnyLsLsabababababababababababababababababababababababacacBIacacacMkacacacacababababababababababababababababababababababababababLsLsLsLsaWLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLBLsLsLsLsXFLsLsUsLsLsLsLsHELskiLskeLsImLsLsLsXpLsLsLsLsLsabababLsLsLsLILsLsabLsLsLsabababLsLsLskeLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLILsLsuIxnxnxnnyLsLsababababababababababababababababababababababababacacacacZWhmacBIacababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsXpLsLsLskeLsLsLsTXLsLsLsXFLsLsLsLsLsLsaWLsLsLsLBLsLsLsabababababLsLsLsLsababLsLsLsababababLsLsLsLsLsLsLsLsLsLsabLsLsLsabababababLsLsabLsLsLsabababababababababababababababLsLsLsLsLsuIxnxnxnnyLsLILsabababababababababababababababababababababababacacMkacacacacacacababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsLsLskeLsLsLsLsababababLsLsLsLsabLsLsLsLILsabababLsLsLsLILsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsababababababababababababababababLsLsLsLsuIxnxnxnnyLsLsLsababababababababababababababababababababacacacacacBIachmDMacacacacababababababababababababababababababababLsLsLsLILsLsLsLsLskeLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababLsLsLsLsImLsLsLILsabLsLsLsLsXpLsLsLsLBLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsababLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsuIxnxnxnnykeLsLsabababababababababababababababababababacacacabacacacacacacacBIacababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababLsLsLsLsLsLsababababLsLsLsLskeLsLsLsLsLsImLsLsLsLsababababLsLskeLsLsLsabLskeLsLsababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsOvOvOvOvOvOvOvOvOvLsLsLsLsLsababababababababababLsLsLILsLsuIxnxnxnnyLsLsLsabababababababababababababababBIacacacacabababacacabababacacacacabababababababababababababababababababababLsLskeLsLsLsLsLILsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababLsLsLsLsLsabababababLsLsLsLsLsLsLsabababababababababababLsLILsLsLsQNQNQNLsLsLsLsLsLsLsLsabababLsLsLsLsababLsLsLsLsLsLsLsOvapcsOpOpOpAzdbOvLskeLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsuIxnxnxnnyLsLsababababababababababababababacacacacacacacababababababababacabababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababLsabababababababababababababLsLsLsLsabLsLsLILsLsLsLsababababLsLsLsLsLILsLsLsLsLsLsLsLILsOvancscscscscsaoOvLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsuIxnxnxnnyLsLsLsabababababababababababababacacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsabababababLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvdbcscscscscsapOvLsLsOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsababababababababababababababacacabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsababababababLsLsLsLsabLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsOvOvOvOvXiOvOvOvOvLsLsOvdbcscsRyOvLsLILsLsLsLsLsLsLskeLsLsuIxnxnxnnyLsLsLsababababababababababababacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsababababababLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsabababababababababacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsOvNhNhIPIPIPNhNhOvLsLsOvfUcscsapOvLsLsLsLsLsLsaWLsLsLsLsLsuIxnxnxnnyLsLILsLsLsLsabababLsLsababacacababababababababababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLIHEabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababLsLsLsLsLsLsLsLILsLsLsabababababLsLsLsOvNhZMmdadvfuANhOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLILsLsuIxnxnxnnyLsLsLsLsLsLsLsLsLsLsLsLsabacacabababLsababababababababababababababababababLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababOvOvOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsababLsLsLsLsOvNhNhKGKGKGNhNhOvLsLsOvfUcscsapOvLsLskeLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsabababLsLskeLsLILsLsabqSabLsLsLsLsLsababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacababababababababOvdbPDPzFAFAdbOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvdbcscsjeOvLsLsLsLsLsLsLskeLsLsLsLsuIxnxnxnnyLsLsLsabababLsLsLsLsLsLskeheLBLsLsLskeLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababacacacacacaeacacabOvcscscscscscsOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsOvOvofOvMuOvofOvOvLsLsOvOvXiOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsababLsLsLsLsLsLsheLsLsaWLsLsLsLILsababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabacacacacacvhcscscscsOvWLvvcsdbOvyvmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTxnxnxnxnnyLsLskeLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsabLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababacabababababababababababababababababacacacabOvcscscsmFvvFQvvcscsgIuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsLsLsLsLsLsabababLsLsLsLsLsabababLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababacacacacabababOvcscscscsWOIevvcscsOvuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsLsLsLsLsLsLsLsabababLsLIabababababababLsLsLsLILsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVZlQvLsLsLsababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababTDababacacacacababababOvdbcsOvvvvvFQvvcscsgIuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyLsLsLsLILsLsLsLsLsLsabababababLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsMIQAQvLsLsLsLsLsLILsLsLsQvQvuBQvQvZlLsLsababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacababacacabacacacacacacacacacabababababababOvcscsYPdzdziAvvcscsOvIpwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvxnxnxnxnnyLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsQvQvZlHpQvpVQvuBLsLsLsLsHpqDQvLfQvmJQvqDLfQvababababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababacacacacabababababababababOvcscsOvOvOvOvOvcscsOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsLsLsLsQvLfQvqDQvuBLfQvLfQvQvQvZlQvQvQvZluBZlQvQvuBababababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababababababababOvcscscscscscscscscsOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsLsLsLsLsaWLskeLsuIxnxnxnnyLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsQvpVQvZlsEMITIQvQvQvMIQvmJZlQvmJnYQvMIQAQvuBQAQvZlabababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabababababababababababOvdbcscscsdbcscscsdbOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsLILsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLILILsLsLsLsLsLsLsLsLsLsLsLsLsLsQvLOQvQvMIQvQvQvpVQAQvmJHpsEuBQvcIQvQvuBQvQvsEMIHpQvQvabababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababOvOvOvOvOvOvOvOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsLsLsLsLsLsLsLsLsuIxnxnxnnyOvOvOvOvvvvvOvOvvvvvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVQvQvHpQvuBfOQvmJLfQvQvQvuBZlQvQvqDfOQvsEHpQvqDmJQvQvQvsEuBHpLfQvababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababacacacababababababLsLsLsLsLsLsLsLsLsLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsLsOvOvOvOvOvOvOvuIxnxnxnnyOvNReJeJVJeJyMLqTEfBWBcseLOvLsLsLsLILsLsLsLsLsLsLsaWLsLsLsLsLfLsMIQvsEZlQvpVQvQvQvrCQvHpQvmJMIQvQvmJZlQvZlQvQvZlQvQvpVQvTIQvfOQvQvpVQvZlababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababacababacacacacacacacacacababababababLsLsLsLsLsLsLILsLsLsLsOvcscsOncsarOvLsOvcscsOncsasOvLsOvcscsOncsatOvLsOvcscsOncsauOvLsLsOvFcZhZhNhNhOvuIxnpAxnnyOvcscscscscscscscscscscseLOvLsLsLsLsLsLsLsLsLsLsLsLsLsZlQvQvQvQvQvqDQvQvQvQvsEQvQAQvQvmJQvQvsELfQvHpsEQvQvHpQvmJsEQvHpuBQvHpMIQvmJQvmJHpababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababLsLskeLsLsLsLsLsLsLskeLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsLstjNhNhNhNhNhOvuIxnxnxnnyOvnacsdbcscscscscscsdbcseLOvLsLsLsLsLsLsLsLsQvQvQvQvqDQvQvmJpVQvmJQvmJuBfOQvZlQvMIZlQvQvpVQvQvQvqDQvQvQvmJLfMIQvQvLfsELfilmJsEQvLfQvqDQvQAabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababacababacacacabababacacababababababababababababLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsOvLzNhikOvNhOvuIxnxnxnnyOvOvDFOvXiOvOvOvOvXiOvOvOvOvLsLsLsQvLfQvsEQvQvmJHpfOQvLfuBMIQvsEQvHpQvMIQvmJqDfOQvsEuBLfQvQvmJbiQvmJLfuBQvQvQvpVQvqDQvQvHpQvqDQvZlQvHpabMIabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababacacababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsOvLzNhikOvNhNhuIxnxnxnnyofFcaHaHNhNhRLFcNhNhaHaHFcOvLsQvQAZlQvqDQvLfQvMIuBQvQvQvQvQvQvbiQvQvmJLfQvsEQvHpQvMIHpQvHpqDQvLfQvQvQvmJZlQvmJQvsEQvmJZlQvQAQvpVQvmJababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababacacabacababababababababababababababababababLsLsLILsaWLsLsLsLsLsOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvLsHpOvLzNhikOvFcOvuIpAxnxnnyOvNhNhNhNhNhNhNhNhNhNhNhNhofLsqDQvQvQvmJQvQvQvZlQvZlQvmJQvnYQvQvQvQAQvQvQvQvZlQvQvmJQvmJQvmJfOuBQvpVQvQvQvQvQvpVQvMIZlQvQvMCJpQvuBMIababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvLsLsOvLbcscscscscsAwOvLsLsOvdbcsYQOvqDXEOvOvOvOvOvtjOvuIxnxnxnnyMuNhNhNhIPIPIPIPIPIPNhNhNhOvQvQvMIsEHpQvQvfOQvQvmJLfQvpVQvQvMIQvmJQvmJZlmJpVQvQAQvpVQvQvZlQvQvHpQvmJQvQAQvZlQAQvKZMCMCqfMCMCMCFgMCpVqDabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsOvmeNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvLsLsOvLbcscsdbcscsAwOvLsLsOvIJcsYQOvyvuROvLQOvLQtjdbOvuIxnxnxnnyOvvfNhZMxmxmxmxmxmxmuANhvfofHpqDLfQvuBLfQvZlQvwLQvQvQvQvsEQvfOQvqDQvqDQvHpQvsEuBQvQvsEHpQvpVQvQvQvqDQvQvsEQvQvMCMCJpMCVYVYhCMCMChCVYVYabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsRqLsLsLsLsLsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDadNhOvLsQvOvCtcscsyMcscsUtOvLsLfOveQcscsXiuInyOvXiNDXitjcscsuIxnxnxnnyOvvfNhZMxmxmxmxmxmxmuANhvfofQvmJQvIXQvQvilQvMIQvHpQvmJqDQvQvQvLfmJuBLfQvQvMIQvQvLfQvQvQvmJQvQvndQvLfFgMCMCdQVYMCtcFgVYryMCFgjHyZVYdQjZMCtcFgababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDSFNhOvLfqDOvCtcscsAAcscsUtOvuBQvOvYScscsOvuInyOvcscscstjcsOvuIxnxnxnnyMuNhNhNhKGKGKGKGKGKGNhNhNhOvQvqDQvpVQvQvqDmJLfQvfOQvQvpVQvmJQvRTQvQAQvQvmJLfQvmJQvMIZlmJQvZlQvQvMIMCMCryagVYyAjHMCyAgChQMCyZyZyZyZyZMCKZVYabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLILsLsLsLsLsLsLfLsLsOvpmNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvMIQAOvUtcscsdbcscsUtOvHpsEOvjXcsaOvvuInyOvnacscscscsOvuIxnxnxnnyOvNhNhNhNhNhNhNhNhNhNhNhNhofZlsEuBMIQvmJQvQvQvsEQvMIQAQvQvQvuBQvQvQvuBQvQvQvQvQvLfQvqDQvQvQvLfQvFgyAMCJpTuMCyZyZyZyZjHMCyZyZyZyZyZyZqfMChCabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababQvLfHpQvLsLsLsLsLsLsLsLsQvmJqDLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvHpQvOvUtcscscscscsUtOvMIqDOvdbcslnvvuInyOvdbcscscscsOvuIxnxnxnnyofFcaHaHNhNhmxFcNhNhaHaHFcOvQvQvQvfOQvQvnYQvQvHpZlQvQvQvsEQvTIQvLfsEQvLfZlHpQvTIQvmJQvQALfQvMCJpMCMCyZKZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCababababababababababMCFgqfababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababQvabababababababababababababababQvfOuBQvLsfOLsHpQvQAMIHpfOQvZlOvOvOvofofOvOvTROvOvTROvOvofofOvOvOvQvXEOvOvvvOvXiOvvvOvOvQAQvOvOvOvOvOvuInyOvOvOvOvOvOvOvuIxnxnxnnyOvOvOvOvXiOvOvOvOvXiOvOvOvOvHppVQvQvpVQvQvQvuBuBQvmJLfQvpVQvQvqDQvmJqDQvsEQvQvQvuBQvHpQvQvMCKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAUcFgMCabababababjHJpyAUcyZJpababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababQvQvZlQvabababababababababababQvMIpVQvoQQvoQQvZlrCQvsLsLsLsLsLsLyvmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTxnxnmTmTmTmTmTmTmTxnpAxnxnnyOvtztzcscscscscscscscstztzOvQvQvmJQvMIQvsELfQvfOQvQvQvQvQvQvMIfOQvQvHpQvMIUcFgMCMCJpMCUcMCdQVYyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHtcJpKZyAFgtcyZyZyZyZtcjHKZababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababQvHpQvQvsEQvabqDabQvababZlQvHpLfLfQvHpQvQvQvQvoQQvmJQvsLdbUNdTYosLuIxnxnxnxnxnpAxnxnxnxnxnxnpAxnxnxnxnxnxnxnxnxnxnpAxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyOvdbcscscscscscscscscscsdbOvMIQvQvLfQvZlQvQvMIQvQvuBqDmJHpsEQvQvLfQvMCJpVYgCtcMCFgyAMCqfMCVYVYMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAKZabyAKZqfjHababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababZlQvQvmJLfQvMIQvQvpVHpQvQvMIuBQvQvQvqDsEHpQvmJqDQvQvQvHpsLnacscscsXiuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyOvtztzzDxKdbjfjfdbxKzDtztzOvQvLfsEQvQvmJHpQvmJQvQAQvQvLfilQvMCtcMCKZyAMCdQLKyZyZyZKZMCMCFgyAFgKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJptcFgyZyZUcababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababHpQvMIQvqDilQvHpQvfOuBQvQvQAHpqDQvmJfOuBQvQvafQvQvQAQvpVsEuBsLapcscsapsLuIxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnpAxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnnyOvOvOvOvOvOvOvOvOvOvOvOvOvOvQvHpQvQvpVQvQvpVQvZlQvuBMCKZMChCVYUcMCMCMCjHFgyZyZyZyZyZyAjHyZyZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababuBQvQvLfsEQvQvMIZlQvQvQvBCMIQvQvsEQvpVQvQvQvmJQvQvmJQvQvqUQvQvsLsLsLXisLsLIpwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvIbwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvxnxnxnxnnyMIpVsEQvQvHpQvLfQvQvuBQvQvQvMIQvfOQvQvLfQvQvMCKZMCMCyAMCqfgCjZMCyAKZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababQvQvfOQvMIQvQvmJLfsEQvQvmJQvHpQvLfQvQvQvQvmJLfQvsEQvHpLfqDQvQvLfQvMIHpQvpVQvqDQvZlQvQvLfQvQvMIuOZlQvqDpVQvsEQvQvpVQvqDZlQvQvqDQvHpQvZlQvmJQvfOQvQvsEMIQvfOQvZlMIQvmJpVHpuIxnxnxnnysEQvQvZlmJQAQvZlsEqDHpmJZlQvXEQvQvBCMIQvMCJpVYhQMCyZyZjHMCJpMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa -aaaaababababababababababababababababababababababababababMIZlababababababababQvsEQvHpQvQvQvpVQvuBQvQvpVuBQvZlQvfOQvQvLfQvHpQvMIQvLfQvMIyTQvbCQvyTQvyTQvyTQvyTQvyTQvyTZlQvsEHpQvQvQvQvuOMIQvLfQvmJQvsEQvQvMIfOQvsEMIelQvuBQvLfQvqDsWQvpVQvQvsEQvLfqDQvsEuBuIxnxnxnnyQvqDQAQvqDQvHpQvQvQvQvQvLfQvQvQvyAMCMCjZVYVYVYMCUcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa -aaaaababababababababababababababababababababababababababQvLfQvHpabababababZlQvQvMIQvqDQvmJQvQvQvHpQAQvQvLfsEQvMIQvmJQvQAqDQvfOQvQvqUuBQvQvQvQvQvQvQvQvQvQvilQvQvQvQvQvuBQvqUQvnYQvQvZlQvuOQvelQvuByvmTmTmTuRpVQvQvQvHpQvmJMIsEHpuBQvQvMCtcQvqDmJuBQAQvZluIxnxnxnnyQvZlQvuBQvmJQvQvmJLfpVMIQvVYVYqDKZMCJpVYhtVYjZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHFgyZyZyZyZyZyZyZyZUcyZyZKZqfjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa -aaaaababababababababababababababababababababababababababqDHpsEQvpVQvababqDQvQAHpQvpVsEQvuBHpQvmJQvQvMIQvQvqDZlQvQvQvHpQvZlQvQvmJHpZlQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvQAQvQvQvQvuOuBQvLfQvQvQvQvHpuIAlTGxnnyQvQvmJpVQvKZyAMCtcMCKZZlMCJpMCyAQvHpQvsEHpQvuIxnxnxnnyQvmJQvLfsEMILfQvQvhCVYMCMChQVYyAMCMCyAVYVYVYVYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZKZjHMCMCyAMChQVYdQjHyZyZjHyZyAyZMCFgJpyAababKZtcFgyZyZyZjHFgtcJpyZyZyZyZyZyZyZyAababababaaaa -aaaaabababababababababababababababababababababababababZlQvMIQvQvQvMIfOQvQvZlQvQvQvQvQvLfQvQvLfQvHpfOQvmJHpQvQvQAQvpVQvQvFgMCJpQvsEQvuBQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvqDmJZlQvJpMCKZQvLfHpMImJQvgcTGOlTGnyLfQvQAQvJpMCVYryMCJpMCyAKZqfMCMCZlfOQvmJMIQAuIxnxnxnnyLfQvHpqDQvKZMCqfMCVYryMCJpMCgCjHFgMCyZyZyZjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAMCtcMCMCyAMCMCMCgCVYVYMCMCtcMCMCKZMCyAabababababababjHqfUcyAKZababKZqfUcyAyZyZyZqfJpababababaaaa -aaaaababababababababababababababababababababababababababQvmJpVQvmJHpQvQvHpQvHpLfQvHpQvQvyFQvqDMIQvQvuBLfQvfOQvqDLfQvMCKZMCqfMCMCKZJpQvyTQvyTQvyTQvyTQvyTQvyTQvbCQvyTQvLfQvMIQvMCMCMCtcMCUcQvqDQvmJuIxnTGxnnyQvZlQvQvUcMCqfMCFgMCyZjHFgyZMCUcMCuBHpqDpVQvuIxnxnxnnyuBQvfOQvVYdQMCFgMCtcMCyAyZyAjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCKZMCMCMCKZQvFgqDMCMCTuhtVYgCMCUcagMCJpMCabababababababababababababababababJpKZtcyAFgabababababaaaa -aaaaabababababababababababababababababababababababababababQvQvLfpVQvsEpVQvmJqDQvmJsEQvpVQvMIsEQvmJZlQvQvQvQvMIuBtcMCJptcFgMCUcyAiXMCUcQvQvHpQvpVQvQvHpQvZlQvfOQvuBQvHpMCMCtcKZMCagVYFgMCVYVYHpZlQvIpwvwvwvsCqDQvMCtcVYMCKZyZyZyAyZyZyZyZyAMCKZqfQvLfQvFguIxnxnxnnyQvsEUcKZVYLKyZyZKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHVYryagMCFgQvmJQvMIfOQvQvyAMCMCMCMCyAMCVYMCLfQvfOababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababfOZlQvQvQvsMQvQvQvQvuBQvfOMIQvsWQvQvqDQvQvmJpVQvsWQvHpMCKZjHyZyZyZyZyZjHtcMCMCKZqfMIQvqUQvMIQvmJqDHpQvLfQvMCFgyAMCMCUcVYVYKZtcMCyAKZJpQvLfQvMImJuBelQvMCFgLKyAyZyZyZyZyZyZyZyZyZyZyZjHKZJpLKUcuIxnxnxnnyKZJpjHMCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAjHMCJpyAVYVYVYKZQvqDQvLfHpuBQvmJQvLfMCUcMCMIsEfOQvelHpQvababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvWhWhWhWhWhvOWhWhWhWhOvLsLsLsLsLsLsaWLsLskeLsLsLsLsLsLsLsLsaWLsLsLsLsvvxGcscscsahtNcsOvLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsaTaUaUaUaVLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLskeLsLsOvRxBPWhWhWhWhWhWhBPRxOvLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsvvapapcscsapcsKQOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsabababababababababababababababLsLsLskeLsLsuIaXaXaXaYLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLsLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvOvwZOvOvwZOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvSPSPOvvvvvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsLILsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaVLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsabababababababababababababababababLsBRLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsLsLsLsababLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsabababababababababababababababababLsLsLsLsLsuIaXaXbaaYLsLsLsaWLsLsLsLsLsLsLskeLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLskeLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsababababababababababababababababababLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababLsLsLsLILsLsLsLsLsLsBRLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsabababababababLsLsLsLsbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdxnaXaXaXaYLsLsLsabababababababababababababababababLsLsLsLILsuIaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsaZaXaXaXaYLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsBRLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsaWLsLsLsLsLsLsLsabababLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLskeLsLsababababababababababababababLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLBLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsaWLsLsLILsLsLsLILsLsLILsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsabababababababLsLsaZaXaXaXaYLsLsLsLsabababababababababLsababababLsLsLsLskeLsLsuIaXaXaXaYLsLsLsLsLILsLsLsLsLsababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsabababababababababababLsaZaXaXaXaYLsLsLsababababababababLsLsLsababLsLsLsLILBLsLsLsLsuIbaaXaXaYLsLILsLsLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsabLsabLsLsLsLsLsLsLILsLsLsBRLsLsLsLsLsLsLsLsababababLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsaZaXaXaXaYLsLsLsLsLsababababababLsLsLsabLsLsLsLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsabLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsuIaXaXaXaYLsLskeLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsaWLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababLsLsLsLsLsBRLsLILsLskeLsLsLsLsabababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsaWLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLILskeLsLsLsLsLILsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLILsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLILskeLsLsabababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLskeLsLsababababababLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaXaXaXaXaYLsLsLsLsLsLsLsLsacacababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababLsLskeLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsabababababababababLsLILsLsLsabababababLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLILsLsLsLsacacBIababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababLsLsLsLsababababababababababLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsLsLsLsabababacabababababababababababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababababababababababababababLsababababababababababababababababababababababababLsLsLsLILsLsLsLILsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsLsLsLsabababacacacababababababababLsLsLsLsvuLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsaWLsLsLILsaZaXaXaXaXbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbeLsLsLsLsLsabababacacacacabababababababLsLsLILsLsLsLsLsLsvuLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababLsLsLsabLsLsLsababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababacabababababababLsLsLsLsLsvuLsaELsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababLsLILsLsLsLsLsLsLsLsLsababababababMrMrMrMrXHMrMrMrMrababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsababababacacabababababababLsLsLsLsLsLsLsLsLsLsLsLsaFLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsImLsLsLsLsabababLsLsLsLsLILsLskeLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLILsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababacacababababababLsLsLsLsLsLsLsaCLBLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLskiLsLsXpLsLsLILsLsLsLsLsabLsLsLsLsImLsLsLsLsLskeLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLILsLsLsLsLsLsaZaXaXaXaYLsLsaWLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsababLsabababababacacabababababLsLsLsLsvuLsLsLsaWaDLsLsLsLsLsvuLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsLBLsLskeLsLsUsLsLsLsLsLsTXLsLsLsLsLsLsXpkiLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsababababLsLsLsababLsLsLsLsLsLsLsLsababababababababababacacacacababababLsLsLsLsLsLILsLsLsLsLsLsvuLsLILsLsLsLsvuLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLILsLsLsLILsLsLsLsLsrhLsLsLILsLsLsLsaWLsLsLsLsLsLsLsLsababababababababLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsabababababababababababababLsLsLsLsLsabababababababababababacacabababababLsLsLsvuLsLsLsLsaBLsLsLsLsLsLsLsaALsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsLsImLsLsLshKLsLsLsLsLsLsLsLsLsXpLsLsLsLshKLsLsLsUsLsLsLsababababababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsaWLsLsLsLsaZaXaXaXaYLsLILsLsabababababababababababababababababLsLsLsababababababababababababacabababababLsLsLsLsLsvuLskeLsLsvuLsLsLsLsLsLILsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLBTXLsLsLsLBLskeLsLsLsLsLsLsLBLsLILsLsLsLsababababababLsLILsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLsLsLsabababababababababababababababababababababababababababababababacacabababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsvuLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLskeLsXpLsLsLsXpLsLsLsLsLskebALsLsLsLsLsXFLsLskeLsLsLsLBLsLsLsabababababababLskeLsLsabLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLsLsLsababababababababababababababababababababababababababababababacacababababababababLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsTXLsLsLBLskeLsLsIQLsLILsLsLsXpLsLsLsLsLsLsbALsLsLsLsXpLsLsLsLsababababababLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababLsLsLILsLsaZaXaXaXaYLsLsLsLsLsababababababababababababababababababababababababababababacacacabababababababababababababababLsLsLsLskeLsababLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLskiLsLsLsXFLsLsLsLsLsLILsTXLsXpLsLsLsTXLsLsLsLILsLsababababababLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsLsLsababababababababababababababababababababababababababababacacababababababababababababababababababLsLsLsLsabababababababababLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsaWLsLsXpLsLsLsLsLsLsLsLsLsImhKLskeLsLsLsLskeLsLsLsLsLsLsLsLsLsMrLsLsLsababLsLsLsLILsLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsLsLsabababababababababababababababababababababababababababababacacabababababababababababababababababababLsLsLsabLsLsababababLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLsLsImLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLBLsLsLsLsLsImLsLsLsXFLsLsLsMrLskeLsLsLsLsLsLsLsLsLsabLsabababLsLsLsabLsabababababababababababababababababababababababababababababababababababXHXHXHXHXHbfbgbgbgbhXHXHXHXHababababababababababababababababababababababababababababababacacabababababababababababababababababababLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsLILsLsImkiLsXpLsLBLsLsaWLsLsLsLILsLBLsLsLsLsLsLsLsLsQNQNuaQNQNQNLsLILsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsabababababababababababababababababababababababababacabacacacababacacababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLsXpLsLsbALsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsUsLsLsLsLsLsMrLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLskeLsLsaZaXaXaXaYLsLsababababababababababababababababababababababababhmacacDMacacacacacacababababababababababababababababababababLsabababababLskeLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsUsLsLsLsLsLsLsLsLILsLskeLsbALsLsLskiLsLsXpLsLsLsLsLsLsLsImLsLsLsMrLsLsLsLsLsLsLsLsLsLsLsababLsLsLsLsLsLsLskeLsLIabababababababababababababababababababababababababababababababLsLsLILsLsLsLsaZaXaXaXaYLsLsabababababababababababababababababababababababacacBIacacacMkacacacacababababababababababababababababababababababababababLsLsLsLsaWLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababLsLsLsLsLBLsLsLsLsXFLsLsUsLsLsLsLsHELskiLskeLsImLsLsLsXpLsLsLsLsLsabababLsLsLsLILsLsabLsLsLsabababLsLsLskeLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLILsLsaZaXaXaXaYLsLsababababababababababababababababababababababababacacacacZWhmacBIacababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababLsLsLsLsLsXpLsLsLskeLsLsLsTXLsLsLsXFLsLsLsLsLsLsaWLsLsLsLBLsLsLsabababababLsLsLsLsababLsLsLsababababLsLsLsLsLsLsLsLsLsLsabLsLsLsabababababLsLsabLsLsLsabababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLILsabababababababababababababababababababababababacacMkacacacacacacababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsLsLskeLsLsLsLsababababLsLsLsLsabLsLsLsLILsabababLsLsLsLILsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsababababababababababababababababababababacacacacacBIachmDMacacacacababababababababababababababababababababLsLsLsLILsLsLsLsLskeLsabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababLsLsLsLsImLsLsLILsabLsLsLsLsXpLsLsLsLBLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsababLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsaZaXaXaXaYkeLsLsabababababababababababababababababababacacacabacacacacacacacBIacababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababLsLsLsLsLsLsababababLsLsLsLskeLsLsLsLsLsImLsLsLsLsababababLsLskeLsLsLsabLskeLsLsababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsOvOvOvOvOvOvOvOvOvLsLsLsLsLsababababababababababLsLsLILsLsaZaXaXaXaYLsLsLsabababababababababababababababBIacacacacabababacacabababacacacacabababababababababababababababababababababLsLskeLsLsLsLsLILsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababLsLsLsLsLsabababababLsLsLsLsLsLsLsabababababababababababLsLILsLsLsQNQNQNLsLsLsLsLsLsLsLsabababLsLsLsLsababLsLsLsLsLsLsLsOvapcsOpOpOpAzdbOvLskeLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsaZaXaXaXaYLsLsababababababababababababababacacacacacacacababababababababacabababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababLsabababababababababababababLsLsLsLsabLsLsLILsLsLsLsababababLsLsLsLsLILsLsLsLsLsLsLsLILsOvancscscscscsaoOvLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsaZaXaXaXaYLsLsLsabababababababababababababacacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsabababababLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvdbcscscscscsapOvLsLsOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsababababababababababababababacacabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsababababababLsLsLsLsabLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsOvOvOvOvXiOvOvOvOvLsLsOvdbcscsRyOvLsLILsLsLsLsLsLsLskeLsLsaZaXaXaXaYLsLsLsababababababababababababacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsababababababLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsabababababababababacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsOvNhNhIPIPIPNhNhOvLsLsOvfUcscsapOvLsLsLsLsLsLsaWLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsabababLsLsababacacababababababababababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLIHEabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababLsLsLsLsLsLsLsLILsLsLsabababababLsLsLsOvNhZMmdadvfuANhOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLILsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsabacacabababLsababababababababababababababababababLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababOvOvOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsababLsLsLsLsOvNhNhKGKGKGNhNhOvLsLsOvfUcscsapOvLsLskeLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsabababLsLskeLsLILsLsabqSabLsLsLsLsLsababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacababababababababOvdbPDPzFAFAdbOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvdbcscsjeOvLsLsLsLsLsLsLskeLsLsLsLsaZaXaXaXaYLsLsLsabababLsLsLsLsLsLskeheLBLsLsLskeLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababacacacacacaeacacabOvcscscscscscsOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsOvOvofOvMuOvofOvOvLsLsOvOvXiOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsababLsLsLsLsLsLsheLsLsaWLsLsLsLILsababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabacacacacacvhcscscscsOvWLvvcsdbOvaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUxnaXaXaXaYLsLskeLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsabLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababacabababababababababababababababababacacacabOvcscscsmFvvFQvvcscsgIaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLsLsLsLsabababLsLsLsLsLsabababLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababacacacacabababOvcscscscsWOIevvcscsOvaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLsLsLsLsLsLsabababLsLIabababababababLsLsLsLILsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVZlQvLsLsLsababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababTDababacacacacababababOvdbcsOvvvvvFQvvcscsgIaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLILsLsLsLsLsLsabababababLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsMIQAQvLsLsLsLsLsLILsLsLsQvQvuBQvQvZlLsLsababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacababacacabacacacacacacacacacabababababababOvcscsYPdzdziAvvcscsOvbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdxnaXaXaXaYLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsQvQvZlHpQvpVQvuBLsLsLsLsHpqDQvLfQvmJQvqDLfQvababababababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababacacacacabababababababababOvcscsOvOvOvOvOvcscsOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsLsLsLsQvLfQvqDQvuBLfQvLfQvQvQvZlQvQvQvZluBZlQvQvuBababababababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababababababababOvcscscscscscscscscsOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsLsLsLsLsaWLskeLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsQvpVQvZlsEMITIQvQvQvMIQvmJZlQvmJnYQvMIQAQvuBQAQvZlabababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabababababababababababOvdbcscscsdbcscscsdbOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsLILsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLILILsLsLsLsLsLsLsLsLsLsLsLsLsLsQvLOQvQvMIQvQvQvpVQAQvmJHpsEuBQvcIQvQvuBQvQvsEMIHpQvQvabababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababOvOvOvOvOvOvOvOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsLsLsLsLsLsLsLsLsaZaXaXaXaYOvOvOvOvvvvvOvOvvvvvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVQvQvHpQvuBfOQvmJLfQvQvQvuBZlQvQvqDfOQvsEHpQvqDmJQvQvQvsEuBHpLfQvababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababacacacababababababLsLsLsLsLsLsLsLsLsLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsLsOvOvOvOvOvOvOvaZaXaXaXaYOvNReJeJVJeJyMLqTEfBWBcseLOvLsLsLsLILsLsLsLsLsLsLsaWLsLsLsLsLfLsMIQvsEZlQvpVQvQvQvrCQvHpQvmJMIQvQvmJZlQvZlQvQvZlQvQvpVQvTIQvfOQvQvpVQvZlababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababacababacacacacacacacacacababababababLsLsLsLsLsLsLILsLsLsLsOvcscsOncsarOvLsOvcscsOncsasOvLsOvcscsOncsatOvLsOvcscsOncsauOvLsLsOvFcZhZhNhNhOvaZaXbjaXaYOvcscscscscscscscscscscseLOvLsLsLsLsLsLsLsLsLsLsLsLsLsZlQvQvQvQvQvqDQvQvQvQvsEQvQAQvQvmJQvQvsELfQvHpsEQvQvHpQvmJsEQvHpuBQvHpMIQvmJQvmJHpababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababLsLskeLsLsLsLsLsLsLskeLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsLstjNhNhNhNhNhOvaZaXaXaXaYOvnacsdbcscscscscscsdbcseLOvLsLsLsLsLsLsLsLsQvQvQvQvqDQvQvmJpVQvmJQvmJuBfOQvZlQvMIZlQvQvpVQvQvQvqDQvQvQvmJLfMIQvQvLfsELfilmJsEQvLfQvqDQvQAabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababacababacacacabababacacababababababababababababLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsOvLzNhikOvNhOvaZaXaXaXaYOvOvDFOvXiOvOvOvOvXiOvOvOvOvLsLsLsQvLfQvsEQvQvmJHpfOQvLfuBMIQvsEQvHpQvMIQvmJqDfOQvsEuBLfQvQvmJbiQvmJLfuBQvQvQvpVQvqDQvQvHpQvqDQvZlQvHpabMIabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababacacababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsOvLzNhikOvNhNhaZaXaXaXaYofFcNhNhNhNhRLFcNhNhNhNhFcOvLsQvQAZlQvqDQvLfQvMIuBQvQvQvQvQvQvbiQvQvmJLfQvsEQvHpQvMIHpQvHpqDQvLfQvQvQvmJZlQvmJQvsEQvmJZlQvQAQvpVQvmJababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababacacabacababababababababababababababababababLsLsLILsaWLsLsLsLsLsOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvLsHpOvLzNhikOvFcOvaZbjaXaXaYOvNhNhNhNhNhNhNhNhNhNhNhNhofLsqDQvQvQvmJQvQvQvZlQvZlQvmJQvnYQvQvQvQAQvQvQvQvZlQvQvmJQvmJQvmJfOuBQvpVQvQvQvQvQvpVQvMIZlQvQvMCJpQvuBMIababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvLsLsOvLbcscscscscsAwOvLsLsOvdbcsYQOvqDXEOvOvOvOvOvtjOvaZaXaXaXaYMuNhNhNhIPIPIPIPIPIPNhNhNhOvQvQvMIsEHpQvQvfOQvQvmJLfQvpVQvQvMIQvmJQvmJZlmJpVQvQAQvpVQvQvZlQvQvHpQvmJQvQAQvZlQAQvKZMCMCqfMCMCMCFgMCpVqDabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsOvmeNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvLsLsOvLbcscsdbcscsAwOvLsLsOvIJcsYQOvyvuROvLQOvLQtjdbOvaZaXaXaXaYOvvfNhZMxmxmxmxmxmxmuANhvfofHpqDLfQvuBLfQvZlQvwLQvQvQvQvsEQvfOQvqDQvqDQvHpQvsEuBQvQvsEHpQvpVQvQvQvqDQvQvsEQvQvMCMCJpMCVYVYhCMCMChCVYVYabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsRqLsLsLsLsLsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDadNhOvLsQvOvCtcscsyMcscsUtOvLsLfOveQcscsXiaZaYOvXiNDXitjcscsaZaXaXaXaYOvvfNhZMxmxmxmxmxmxmuANhvfofQvmJQvIXQvQvilQvMIQvHpQvmJqDQvQvQvLfmJuBLfQvQvMIQvQvLfQvQvQvmJQvQvndQvLfFgMCMCdQVYMCtcFgVYryMCFgjHyZVYdQjZMCtcFgababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDSFNhOvLfqDOvCtcscsAAcscsUtOvuBQvOvYScscsOvaZaYOvcscscstjcsOvaZaXaXaXaYMuNhNhNhKGKGKGKGKGKGNhNhNhOvQvqDQvpVQvQvqDmJLfQvfOQvQvpVQvmJQvRTQvQAQvQvmJLfQvmJQvMIZlmJQvZlQvQvMIMCMCryagVYyAjHMCyAgChQMCyZyZyZyZyZMCKZVYabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLILsLsLsLsLsLsLfLsLsOvpmNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvMIQAOvUtcscsdbcscsUtOvHpsEOvjXcsaOvvaZaYOvnacscscscsOvaZaXaXaXaYOvNhNhNhNhNhNhNhNhNhNhNhNhofZlsEuBMIQvmJQvQvQvsEQvMIQAQvQvQvuBQvQvQvuBQvQvQvQvQvLfQvqDQvQvQvLfQvFgyAMCJpTuMCyZyZyZyZjHMCyZyZyZyZyZyZqfMChCabababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababQvLfHpQvLsLsLsLsLsLsLsLsQvmJqDLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvHpQvOvUtcscscscscsUtOvMIqDOvdbcslnvvaZaYOvdbcscscscsOvaZaXaXaXaYofFcNhNhNhNhmxFcNhNhNhNhFcOvQvQvQvfOQvQvnYQvQvHpZlQvQvQvsEQvTIQvLfsEQvLfZlHpQvTIQvmJQvQALfQvMCJpMCMCyZKZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCababababababababababMCFgqfababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababQvabababababababababababababababQvfOuBQvLsfOLsHpQvQAMIHpfOQvZlOvOvOvofofOvOvTROvOvTROvOvofofOvOvOvQvXEOvOvvvOvXiOvvvOvOvQAQvOvOvOvOvOvaZaYOvOvOvOvOvOvOvaZaXaXaXaYOvOvOvOvXiOvOvOvOvXiOvOvOvOvHppVQvQvpVQvQvQvuBuBQvmJLfQvpVQvQvqDQvmJqDQvsEQvQvQvuBQvHpQvQvMCKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAUcFgMCabababababjHJpyAUcyZJpababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababQvQvZlQvabababababababababababQvMIpVQvoQQvoQQvZlrCQvsLsLsLsLsLsLaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUxnxnaUaUaUaUaUaUaUaXbjaXaXaYOvtztzcscscscscscscscstztzOvQvQvmJQvMIQvsELfQvfOQvQvQvQvQvQvMIfOQvQvHpQvMIUcFgMCMCJpMCUcMCdQVYyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHtcJpKZyAFgtcyZyZyZyZtcjHKZababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababQvHpQvQvsEQvabqDabQvababZlQvHpLfLfQvHpQvQvQvQvoQQvmJQvsLdbUNdTYosLaZaXaXaXaXaXbjaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYOvdbcscscscscscscscscscsdbOvMIQvQvLfQvZlQvQvMIQvQvuBqDmJHpsEQvQvLfQvMCJpVYgCtcMCFgyAMCqfMCVYVYMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAKZabyAKZqfjHababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababZlQvQvmJLfQvMIQvQvpVHpQvQvMIuBQvQvQvqDsEHpQvmJqDQvQvQvHpsLnacscscsXiaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbkbkbkaYOvtztzzDxKdbjfjfdbxKzDtztzOvQvLfsEQvQvmJHpQvmJQvQAQvQvLfilQvMCtcMCKZyAMCdQLKyZyZyZKZMCMCFgyAFgKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJptcFgyZyZUcababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababHpQvMIQvqDilQvHpQvfOuBQvQvQAHpqDQvmJfOuBQvQvafQvQvQAQvpVsEuBsLapcscsapsLaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXaXaXbkbkbkaYOvOvOvOvOvOvOvOvOvOvOvOvOvOvQvHpQvQvpVQvQvpVQvZlQvuBMCKZMChCVYUcMCMCMCjHFgyZyZyZyZyZyAjHyZyZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababuBQvQvLfsEQvQvMIZlQvQvQvBCMIQvQvsEQvpVQvQvQvmJQvQvmJQvQvqUQvQvsLsLsLXisLsLbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdblbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdaXbkbkbkaYMIpVsEQvQvHpQvLfQvQvuBQvQvQvMIQvfOQvQvLfQvQvMCKZMCMCyAMCqfgCjZMCyAKZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababQvQvfOQvMIQvQvmJLfsEQvQvmJQvHpQvLfQvQvQvQvmJLfQvsEQvHpLfqDQvQvLfQvMIHpQvpVQvqDQvZlQvQvLfQvQvMIuOZlQvqDpVQvsEQvQvpVQvqDZlQvQvqDQvHpQvZlQvmJQvfOQvQvsEMIQvfOQvZlMIQvmJpVHpaZaXaXaXaYsEQvQvZlmJQAQvZlsEqDHpmJZlQvXEQvQvBCMIQvMCJpVYhQMCyZyZjHMCJpMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa +aaaaababababababababababababababababababababababababababMIZlababababababababQvsEQvHpQvQvQvpVQvuBQvQvpVuBQvZlQvfOQvQvLfQvHpQvMIQvLfQvMIyTQvbCQvyTQvyTQvyTQvyTQvyTQvyTZlQvsEHpQvQvQvQvuOMIQvLfQvmJQvsEQvQvMIfOQvsEMIelQvuBQvLfQvqDsWQvpVQvQvsEQvLfqDQvsEuBaZaXaXaXaYQvqDQAQvqDQvHpQvQvQvQvQvLfQvQvQvyAMCMCjZVYVYVYMCUcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa +aaaaababababababababababababababababababababababababababQvLfQvHpabababababZlQvQvMIQvqDQvmJQvQvQvHpQAQvQvLfsEQvMIQvmJQvQAqDQvfOQvQvqUuBQvQvQvQvQvQvQvQvQvQvilQvQvQvQvQvuBQvqUQvnYQvQvZlQvuOQvelQvuBaTmTmTmTaVpVQvQvQvHpQvmJMIsEHpuBQvQvMCtcQvqDmJuBQAQvZlaZaXaXaXaYQvZlQvuBQvmJQvQvmJLfpVMIQvVYVYqDKZMCJpVYhtVYjZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHFgyZyZyZyZyZyZyZyZUcyZyZKZqfjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa +aaaaababababababababababababababababababababababababababqDHpsEQvpVQvababqDQvQAHpQvpVsEQvuBHpQvmJQvQvMIQvQvqDZlQvQvQvHpQvZlQvQvmJHpZlQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvQAQvQvQvQvuOuBQvLfQvQvQvQvHpaZbmbnaXaYQvQvmJpVQvKZyAMCtcMCKZZlMCJpMCyAQvHpQvsEHpQvaZaXaXaXaYQvmJQvLfsEMILfQvQvhCVYMCMChQVYyAMCMCyAVYVYVYVYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZKZjHMCMCyAMChQVYdQjHyZyZjHyZyAyZMCFgJpyAababKZtcFgyZyZyZjHFgtcJpyZyZyZyZyZyZyZyAababababaaaa +aaaaabababababababababababababababababababababababababZlQvMIQvQvQvMIfOQvQvZlQvQvQvQvQvLfQvQvLfQvHpfOQvmJHpQvQvQAQvpVQvQvFgMCJpQvsEQvuBQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvqDmJZlQvJpMCKZQvLfHpMImJQvbobnbpbnaYLfQvQAQvJpMCVYryMCJpMCyAKZqfMCMCZlfOQvmJMIQAaZaXaXaXaYLfQvHpqDQvKZMCqfMCVYryMCJpMCgCjHFgMCyZyZyZjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAMCtcMCMCyAMCMCMCgCVYVYMCMCtcMCMCKZMCyAabababababababjHqfUcyAKZababKZqfUcyAyZyZyZqfJpababababaaaa +aaaaababababababababababababababababababababababababababQvmJpVQvmJHpQvQvHpQvHpLfQvHpQvQvyFQvqDMIQvQvuBLfQvfOQvqDLfQvMCKZMCqfMCMCKZJpQvyTQvyTQvyTQvyTQvyTQvyTQvbCQvyTQvLfQvMIQvMCMCMCtcMCUcQvqDQvmJaZaXbnaXaYQvZlQvQvUcMCqfMCFgMCyZjHFgyZMCUcMCuBHpqDpVQvaZaXaXaXaYuBQvfOQvVYdQMCFgMCtcMCyAyZyAjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCKZMCMCMCKZQvFgqDMCMCTuhtVYgCMCUcagMCJpMCabababababababababababababababababJpKZtcyAFgabababababaaaa +aaaaabababababababababababababababababababababababababababQvQvLfpVQvsEpVQvmJqDQvmJsEQvpVQvMIsEQvmJZlQvQvQvQvMIuBtcMCJptcFgMCUcyAiXMCUcQvQvHpQvpVQvQvHpQvZlQvfOQvuBQvHpMCMCtcKZMCagVYFgMCVYVYHpZlQvbbbdbdbdbeqDQvMCtcVYMCKZyZyZyAyZyZyZyZyAMCKZqfQvLfQvFgaZaXaXaXaYQvsEUcKZVYLKyZyZKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHVYryagMCFgQvmJQvMIfOQvQvyAMCMCMCMCyAMCVYMCLfQvfOababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababfOZlQvQvQvsMQvQvQvQvuBQvfOMIQvsWQvQvqDQvQvmJpVQvsWQvHpMCKZjHyZyZyZyZyZjHtcMCMCKZqfMIQvqUQvMIQvmJqDHpQvLfQvMCFgyAMCMCUcVYVYKZtcMCyAKZJpQvLfQvMImJuBelQvMCFgLKyAyZyZyZyZyZyZyZyZyZyZyZjHKZJpLKUcaZaXaXaXaYKZJpjHMCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAjHMCJpyAVYVYVYKZQvqDQvLfHpuBQvmJQvLfMCUcMCMIsEfOQvelHpQvababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababQvqDsEDifOQvZlQvfOQAQvMIQvQvQvZlQvpVQvQvHpQvQvQvQvJpqfMCyAyZyZyZyZyZyZyZyZMCtcMCJpMCMCqDQvmJQAQvQvqUQvHpMCMCMCMCJpMCMCyAjHyZyZyZMCKZMCMCMCZlQvHpQvKZhCVYMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAyZaggCOEOEOEOEOEqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfMCMCuBQvmJHpQvfOQvpVQvQvsEQvLfQvQvMCfOQvQvQvQvqDQvMIQvfOabababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababQvfOQvQvQvQvmJqDQvHpQvmJQvnYQvuBilsEQvmJQvQAQvMCUcMCKZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAMCLfQvQvuBHpQvZlMIVYVYUeMCKZjHyAyZyZyZyZyZyZyZMCagLKyAMCsEQvUcMCVYgCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUcMCMCFgilHpQvQvQvuBQvQvQvuBfOQvQvQvMIfOQvQvMILfHpQvQvmJQvLfQvabababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababMImJQvQvnYQvMIpVQvQvHpQvZlQvQvQvfOQvqDQvQvHpQvMIJpMCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCUcMCMCQvQvmJKZMCVYgCMCJpyZyZyZyZyZyZyZyZyZyZyZUcyZKZJpMCKZMCqfMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCtcMCMIfOQvLfQvnYQvLfQvmJQvHpQvmJqDQvQvHpQvmJQvsEQvQvuBQvQvababababababababababababababababababababababababababaaaa @@ -600,61 +622,61 @@ aaaaabababababababababababababababababababababababababababQvQAQvQvfOZlQvHpQvQAQv aaaaababababababababababababababababababababababababababZlQvHpQvpVQvHpQvQvQvQvpVQvmJQvZlQvuBQvZlMCMCtcMCjHyZyZyZyZyZyZyZyZyZyZyZyZjHyZyZyZyZyZyZyZyZyZFgyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZMCjHFgyAyZyZyZyZUctcMCjZMCQvHpQvelQvfOQvQvelQvQvfOpVQvQvHpQvsEQvQvfOQvpVQvsEqDQvfOQvqDLfQvQvuBQvQvQvQvfOQvQvmJQvQvqDQvmJQvLfQvQvabababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababMIsEfOQvpVsEuBQvLOQvbiQvQvQvLfQvsEQvQvMCqfUcMCKZyZyZyZyZyZyZyZyZUcyZyZyZJptcjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAyZyZUcyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZtcMCagVYMCMCjHFgyAMCMCQvLfQvHpQvQvQvMIQvmJHpQvQvuBHpQvQvfOQvQvQvQvLfmJMIQvilQvQvQvQvQvQvMIQvmJHpQvpVmJHpQvelQvHpLfQvQAQvQvHpQvuBababababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababHpQvuBQvQvQvfOQvQvQvmJQvfOQvMIQvQvpVJpKZMCMCyAyZyZyZyZyZyZyZJpKZMCtcjHMCUcMCMCKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHqfKZMCyZyZyZyZmDyZyZyZyZyZyZyZyZMCtcVYVYVYMCjHJpMCKZMCyZMCUcyZyZyZyZyZyZyZOEOEOEOEOEyZyZjHFgMCMCVYdQMCUcqfMCZlQvQvQvQvuBQvQvmJLfHpQvHpQvmJZlfOQvQvmJQvQvmJLfQvQvQvQvQvfOQvmJLfHpQvmJQvQvpVQvQvQvQvLfQvsEuBQvQvQvsEQvZlQvQvQvZlabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababQvLfQvmJpVQvmJqDsEpVQvQvZlQvHpQvUcMCKZMCtcMCJpyZyZyZyZyZyZyZjHMCMCMCMCMCqfVYMCtcMCyZyZyZyZyZyZyZyZyZyZyZyZyZMCtcJpMCUcMCKZMCyAMCyZyZyZyZyZyZyZyZyZyZUcjHFgJpMCfOZlQvqfQvuBMCyAMCtcMCjHyZyZyZyZdQjZuIxnxnxnnyKZhQMCyAMCQvQvqDQvMILfQvQvQvmJpVQvmJfOQvLfsEQvfOQvQvqDQvQvelQvZlQAQvqDMIQvHpQvmJqDQvMIpVQvQvQvQvZlfOQvQvmJQvZlQvQvLfQvsEQvMIQvQvQvmJfOQvababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababsEQvqDQvQAQvLfQvQvQvLfQvMCMCyAMCMCMCMCyAMCjHyZyZyZyZyZyZyZyZFgMCUeVYhCMCKZMCJpMCMCFgyZyZyZyZyZyZyZyZyZyZyZjHyAMCMCZltcQvQvfOMCUcVYdQyZyZyZyAMCqfjHFgyAMCQvMCQvMIuBQvQvQvfOQvMIJpVYgCVYJpyZyZyAVYgCuIxnxnxnnyJpFgQvfOQvQvfOQvsEQvQvQvHpMIQvQvQvQvQvQvQvZluBQvQvelQvpVMIilQvQvQvQvZlQvQAQvpVQvQvfOQvQvQvfOQvHpQvqDQvQvilelQvQvmJQvQvqDLfQvmJLfQvMIQvQvababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababQvpVfOHpQvHpQvfOfOtcMCJpqfjHMCgCVYhtMCMCyZyZyZyZyZyZyZyZyZKZyAMCMCVYVYPTQvyAMCqfVYVYyAjHKZJpMCyZyZyZyZyZUcJpQvqDQvuBQvQvLfQvQvMChQVYFgjHKZMCJpQvuBQvQvHpQvQvQvHpfOQvMILfQvHpQvQvVYVYhQMCFgjHMCVYhCuIthXrXrnyHpQviluBQvLfQvQvQvQvZlQvmJfOQvHpQvelQvpVsEQvQvQvpVQvQvsEQvfOQvfOQvmJuBQvQvsEQvfOQvmJQvnYQvQvQvmJuBQvQvLfQvMIQvHpQvfOQvQvQvQvQvQvuBHpababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababQvMIQvqfVYUcsEMCyAKZUcMCyZtcjZLKVYMCJpyZyZyZyZyZyZyZyZyZyZJpUcMChCVYMCelQvLfuBMCMCMChQVYMCqfjHMCyAMCJpMCVYQvQvelQvMImJQvQvZlQvMIQvMCyAMCMIQvQvMIfOLfQvQvmJpVsEQvLfQvmJMIsEQvLffOQvfOMCMCqfMCUcuBuIxnxnxnnyMIQvHpsEpVQvQvQvpVsEQvLfQvHpQvsEQvMIbRQvQvZlQvmJQvLfHpQvuBQvTvQvQvQvQvfOQvMIqDQvmJQvpVQvQvQvZlQvLfQvmJQvQvsEQvQvmJQvmJuBfOQvQAQvsEQvuBabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababZltcgCjZVYJpKZjHFgMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCMCQvHpQvLfQvZlQvQvHpMCUcMCFgMCMIMCMCqDKZMCZlQvQvpVQvQvQvQvZlQAQvQvfOQvLfQvQvQvQvfOQvQvQvQvuBQvQvuBQvQvQvQvQvQvpVQvQvuBQvHpQvQvMILfQvuIxnxnxnnyQvQvQvMIQvQvmJuBQvQvQvQvsEilZluBQvQvLfQvfOQvQvLfQvQvQvLfQAQvQvpVQvQAQvQvLfQvfOQvZlQvQvQvQvmJQvQvQvHpQvQvfOQvQvLfQvQvQvQvsEQvQvqDQvpVQvabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababMCJpKZyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUctcMCyAqfMCqDQvQvfOQvQvfOQvLfMCQvuBHpQvpVQvQvQvQvuBQvQvQAHpQvfOsMQvQvQvQvQvMIuBQvQAQvpVQvQvelQvfOQvQvmJMIQvfOQvnYQvQvQvsEQvQvmJQvQvpVQvQvqDuIxnxnxnnyuBmJLfQvHpQvQvQvelQvfOQvpVQvfOQvQvmJQvQvmJpVLfQvfOQvmJHpQvMILfsEQvuBQvmJpVQvsEQvQvQvuBQvQvQvfOQvLsLsLsLsQvMIQvsEpVQvLfQvfOZlQvQvLfQvababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababMCUcFgtcyAJpqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZmDyZjHMCMCKZMCMCMCQvelQvuBQvmJZlQvQvHpQvsEQvMIQAQvuBQvfOQvMILfQvQvuBQvQvsELfQvmJHpsEQvZlQvsEQvQvmJQvHpQvpVQvQvfOilQvsEQvQvfOuBQvfOQvQvnYQvQvQvQvMIuIxnxnxnnyQvQvQvsEQvfOQvQvQvQvQvmJQvQvQvQvQvQvpVQvQvQvsEMIQvZlQvQvfOQvQvqDfOQvQvQvQvQvuBQvQAQvQvfOmJMILsaWLskeLILsLsLsQvHpQvfOQvmJQvQvQvmJQvMILfabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababJpyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHKZyZMCJpMCqfMCFgQvLfQvQvQvQvQAQvMIQvmJZlQvuBfOQvilQvQvsEQvQvmJQvQvQvQvmJLfQvQvZlQvQvQvQvQvpVQvLfQvqDQvQvsEQvLfQvQvfOQvQvQvHpQvfOQvQvMIQvQvQvQvmJuBZluIxnxnxnnyMIQvpVQvuBQvQvmJLfQvHpQvqDelQvpVQvfOQvQvQAQvHpQvfOQvsEQvQvsEQvQvQvQvfOQvmJsEQvHpQvLfQvQvLsLILsLsLsLsLsLsLILsLsLsQvQvQvQvQvQAQvQvHpQvababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababMCtcjHMCabqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUcqfMCyAMCVYMCMCQvQvHpQvQvmJLfQvQvQvLfQvQvQvQvQvQvqDZlmJpVQvHpQvQvpVQvelQvQvQvQvQvmJQvfOQvmJQvQvQvQvQvQvLfQvuBQvsELfQvQvQvmJpVQvQvQvQvelLfQvuBQvMIQvQvQvuIxnxnxnnyQvQvQvZlQvsEQvMIQvQAQvQvsEQvQvmJQvZlQvmJQvuBilQvLfuBQvQvpVsEQvmJQvHpQvQvQvilfOMIQvLsLsLsLsababababababLsLsLsLskeLsLsLsZlQvQvHpQvfOabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababJpMCKZyZyZFgyAMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCFgMCMChQMCyAQvLfQvQAQvQvfOQvsEHpuBQvelQvpVQvsEQvQvQvQvelQvfOQvQvQvLfqDQvfOHpQvQvQvuBQvQvQvnYQvsEZlQvmJQvQvpVQvQvQvQAQvQvQvsELfQvmJHpQvQvmJfOQvLfQvQvuIxnxnxnnyqDLfQvQvLfQvQvQvpVQvQvpVilMIQvQvQvQvMIQvHpQvQvmJfOQvHpQvHpfOQvQvLfsEQvMIfOQvQvQvLsabababababababLsLsababLsLsLILsLsLsLsLsLsLsLsMIababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCtcMCJpQvFgMCQvLfQvsEpVQvqDMIQvZlQvQvQvLfQvQvQvfOQvMILfQvZlQvQvQvQvQAQvLfsEQvpVQvQvpVQvQvQAQvHpQvQvQvQvQvMIQvLfilQvHpQvQvQvZlqDQvMIQvQvQvQvQvsEQvQvQvQvHpuIxnxnxnnyQvQvQvQAQvQvfOQvQvQvmJQvQvfOHpQvnYQvQvLfsEqDQvQvQvQvpVmJQvQvMIQvHpQvpVQvQvZlQvabLsababLsLsLBLsLsLsLILsabababLsababLsLsLsaWLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaababababKZFgtcjHyAUcFgtcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCUcyZyZyZyZMCjHMCMCyAMCQvuBQvLfQvQvQvMIQvQvsEQvLfHpQvQvmJQvQvuBQvmJQvHpQvQvmJQvQvLfQvTIQvuBQvQvQvQvQvfOQvsELfQvQvQvuBQvLfQvHpQAQvQvQvmJQvQvmJMIQAQvQvZlQvuBQAQvfOQvQvQvmJMIMIuIxnxnxnnyQvHpQvilMImJHpQvLfQvuBZlQvQvQvQvQvpVQvQvQvQvLfQvQAQvQvQvLfQvfOuBQvQvmJMIQvLsLsLsLsLsLsLsLILsLsaWLsLskeLsLsabLsLsabababLsLsLsLILsababababababababababababababababababababababababababababababaaaa -aaaaababqfUcyAyZyZyZyZyZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyZyZyZUcVYhQVYagMCJpMCyAMCqfKZMCFgQvelHpQvQvQvfOQvHpQvLfQvilQveluBQvelqDQvQvZlQvQvpVQvQvelQvHpQvQvLfQvmJQvLfQvmJQvQvQvQvQvZlQvmJQvQvQvQvQvsEQvqDQvQAQvuBQvQvQvmJfOsEHpQvQvuBsEbiQvQvqDQvuIxnxnxnnyMIQvQvQvQvQvQveluBQvfOQvQvmJLfQvsEuBQvmJpVQvQvLfQvQvmJZlQvLsQvQvQvLsLsLskeLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababFgyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfgChCMCMCVYVYjZVYMCKZMCMCUcMCMCQvQvQvQvQvQvmJuBZlQvmJQvQvfOQvQvLfQvZlQvQvQvLfQvQvmJQvfOQvQvqDQvfOQvuBQvQvfOQvQvuBZlQvmJMIsEQvQvQvQAQvmJpVQvQvQvfOMIQvQvLfQvMIQvQvMIQvQvQvmJQvQvQvfOQvLfQvuIxnxnxnnyuBQvpVQvZlLfQvQvQvQvZlQvpVQvQvfOQvQvQvQvQvQvmJZluBQvQvQvLsLsLsLsLsLsLILsLsLsababLIabababqwacqwacDMacacacLsLsLsabLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCUcjZVYMCMCUeMCMCyAQvHpMCtcMCQvMIfOQvHoQvLfQvQvQvQvZlQvXEQvuBQvmJQvQvsEQvLfQvQAQvHpQvuBQvsEQvLfQvQvQvsEQvLfQvqDQvQvQvQvQvQvQvQvfOQvQvQvHpQvLfQvQvQvQvsEQvQvfOQvpVQvsEQvLfQvQvQvLfQvQvQvQvQvuIxnxnxnnyQvQvQvQvuBQvfOHpQvmJQvfOQvQvQvQvQvZlQvfOHpMIQvQvLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababacqwacacqwacacacacqwababababLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZtcyZKZJpyAjHMCQvMCtcQvmJMCMCMCFgMCQvMIQvZlQvZlQvQvQvQvHpQvQvpVsELfQvQvQvQvfOQvQvpVQvfOQvQvmJQvZlQvQvpVQvHpQvQvQvmJpVQvMIQvQAQvelQvmJLfQvpVQvqDQvQvsEQvMIQvsEQvQvmJuBQvHpQvQvmJQvQvZlQvQvqDelQvQvsEQvHpQvuBuIxnxnxnnyQvZlQvQvQvHpQvQvQvQvLIMILsLsuBQvLfLsQvQvQvLsLsLsLsLsLskeLsLsLsLsLsLsLsababababababababacqwqwacacqwacacqwacqwababababLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZFgFgMCyAababZlQvmJMIQvHpuBQvQvJpQvLfQvsEQvQvmJQvHpsELfuBQvmJsEQvQvQvQvKEQvQvQvMIQvsEHpQvpVilcpZlQvQvmJsEQvQvuBQvfOQvLfQvmJHpQvMIQvQvqDsEQvQAQvQvmJLfQvQvVhQvuBMIQvQvpVQvQvelQvQvQvQAQvQvfOQvQvQvuBMIQvQvQvmJuIxnxnxnnyQvQvQvQvTIQvQAQvLfLsLsLsLsLsLsLsQvpVLsLsLsLsLsLsLsLILsLsLsLsLsLILsLsLsabababababababqwqwqwXgYwMkqwacBIacacqwabababababLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAababababababQvpVQvsEQvQvQvKEQvQvQvuBQvqDQvQvQAQvQvQvQvZlQvMIQvHpQvmJQvQvmJMIQvLfuBQvQvsEMIQvLfQAuBQvMIQvQAQvQvHpQvQvQvQvQvfOQvQvZlQvHpQvQvuBQvQvQvQvZlQvQvQvQAHpQvfOQvLfQvQvHpLfQvQvQvQvQvmJfOQvQvLfQvQvMIuIxnxnxnnyqDQvLfQvQvQvQvQvLsLsLILsLsLsLsLsLILskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababacBIqwacacqwacacqwacacababababababLskeLsLsLsLsLILsabababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZqfUctcjHababababababuBQvmJqDQvelQvQvQvZlQvfOQvmJLfQvQvQvQvHpelQvQvQvLfQvQvQvQAQvQvQvQvHpQvLfQvQvQvQvQvQvQvQvfOQvQvQvmJMIQvuBQvmJQvQvQvHpQvLsQvfOQvQvfOQvLsLILsLsLfQvQvQvLsLsQvQvfOuBQvQvLILsLsMIQvQvQvLsLsLILsLsLsuIxnxnxnnyQvQvQvQvpVLsLsLsLsLskeLsaWLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsababababababqwacacacacacLjqwYNqwYwacqwabababababLsLsLsLsLBLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababyAyZyZyZyZyZJpyZyZyAtcFgJpKZyAjHabababababababababQvZlQvfOQvpVQvmJQvQvsEMIQvpVQvQvpVQvmJQvQvQvQvmJQvQvMIQvQvqDQvLfelQvQvQvZlQvLfQvmJpVsEZlQvHpQvQvQvQvelQvQvQvQvpVQvLfLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsQvQvLsLsLsLsaWLsLsLsLsLsLsLILsLsLsuIxnxnxnnyQvQvHpQvLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababqwqwqwXghmqwqwacBIqwqwqwacabababababLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababFgyZyZyZyZFgqfjHUcMCabababababababababababababababababQvQvsEQvQvQvLfQvHpQvHpQvQvQvsEQvQvZlpVilqDQvZlQvnYQvQvsEuBQvQvpVQvmJQvsEQvqDQvQvQvQvLsLspVLsLfQvQvQvLfQvHpQvLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsuINUNUNUnyLsMIQvLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLsLsLskeLsLsLsLsLsLsLILsababababababababacacqwacqwMkqwqwqwacqwqwabababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababJpjHtcUcyAKZababababababababababababababababababababQvQAQvHpQvMILfQvQvelQvQvmJQAQvqDQvuBQvQvQAQvQvQvmJQvpVQvQvQvQvfOQvQvQvLfuBQvQvQvLfQvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsabababLsabababLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLILsLsLILsLsLsLsuIxnxnxnnyLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababqwqwqwqwXgacqwqwqwababababababLsLsLsLsLsBRLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababQvQvMIQvQAQvQvQvmJQvpVQvQvQvQvLfQvHpmJQvQvQvpVQvQvQvQvQvLfZlQvQvLsLfLsQvQvHpfOQvQvLsLsLILsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsabababababababLsLsBRLsLskeLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsXHXHsuxnxnxnVUXHXHLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLBLsLsLsLsLskeLsLsLsababababababababababababqwqwqwqwabababababababLsLsLsLsLsLsLsLskeLsLsLsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababfOQvQvmJQvQvfOQvQvQvilLfQvpVQvQvMIQvQvQvQvsEQvLfQvuBLsLsQvQvLsLsLILsLsLsLsLsLsLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsababababababLsLsLsLsLBLsuIxnxnxnnyLsLsLsLsLsaWLsLsababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLILsLsLsaWLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababQvsEQvqDZlQvuBQvLfmJLfQvsEQvQvmJQvQvLfQvpVQvLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLILsabababLsLsLsLsLsLsLILsLsabababababababLsLILsLsLsaWLsLsLsLILsLsLsLsLsababababababababLsLILsLsLsLIuIxnxnxnnyLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsBRLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababQvQvuBZlQvQvmJQvQvQvMIQvQvZlQvQvQvQAQvqDQvQvLsLsLsLILsLsLsLsLsLskeLsLsabababababLsLsLsBRLsLsLsabababababLsLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLBLsLsLsLsLsLsababababababababLsLsLsXpLsLsuIxnxnxnnyLsXpLsLsLsLsLsLsababababababababLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsBRLsLsLsLILsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababQvmJLfQvelQvQvsEQvfOQvLsLsLsLILsLsQvQvQvLsLskeLsLsLsLILsLsLsLsLsLsLsababababababababLsLsLskeLsLsababababLsLsLskeLsLsLILsLsLsababLsababababLsLsLsLsLsLsLsLsLsLILsabababababababababLsLsLsLsLsLsuIxnxnxnnyLsLsLsLILsLsababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsLsabababababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababQvpVQvQvQvpVQvQvLfQvQvLsLILsLsLsLsLsLsLBLsLsLsLsaWLsLsLsLsLILsLsLILsababababababLsLsLsLILsLsLsLsLsababLsLsLILsLsLsLsLskeLsLsababLsLsLskeLsLsLsLsLsLsLsLskeLsLsLsababababababababLsLsLsLsLskeLsFwXrXrXreILsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababQvQvQAQvBRLILsLsBRZlLIkeLsLsLsLsLILsLsLsLILsLILsLsLsLsLsLsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLILsLsLsLsFwxnxnxneILsLsLskeLsLsLsLsLsLsLsLsababLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLskeLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababpVQvkeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLswlxnxnxnnyXpLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXqPsyPwsyfHyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLILsLsLILsabababLsLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLILsLsLsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLILsLsLsuIxnxnxnnyLsLsLILsLsLskeLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLILsLsLsabLsLsLsLsLILsLsLILsLsLsLsLILsLsLsLsaWLsLsLsLILsLsLsLILsLsLsLsLsaWLskeLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsababababababababababLsLsLsLILsLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababLsLILsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLILsuIxnxnxnnyLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsLsLsLsLsLsLsabLsababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsabababLsabLsLsababLsLIabababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababajababababLILsLsLsLsLsLsLsLsLsLsLsababababLsababababababLsLsLskeLsLsaWLsLsLsLILsLsLsLsLsLILsLsabababpuCqCqCqpuLsLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLsuIxnxnxnnyLsLsXpLsaWLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababLsLILsLsLsLskeLsLsLsLILsabababababababababLIabababababababababLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababajajajabababababLsababababababababababababababababajajababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababpupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIxnxnxnnyLsLsLsLsLsLsLsLssLsLsLsLsLLsLsLsLsLsLsababababababababababababababababLsLsaWLsLILsLsababababababababababababababababababababababLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababajakajajababababababababababababajajajajajajajajajajajababababLsLsLsLsLILsLsababLsLsLsLsabababababCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLssLsLsLsLsLLsLsLsPhPhPhPhPhuIxnxnxnnysLsLsLsLsLLsLsLssLcscscssLLsLsLsLsLsLsababababababababababababababababLsabLsLsLsLsLsababababababababababababababababLsabababLsLsLsLsLsLILsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababajakakajajajajababababababababajajakakakakakakakakakajajababababababLsLsabababababababababababLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLILsLsLsuIxnxnxnnysLVZcscssLLsXpLssLcsnmcssLLsLsLsXpLsabababababababababababababababababababLsababLsabababababababababababababLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababajajajajajakakalakajajajajajajajajajajajakakakakakakajajakakakajajabababababababababababababababababLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLsLsLsLsLsLsLILsXpLsLssLcsnmcscsLsLsLsLsLsLsLsLsuIFsxnxnnycscsnmcssLLsLsLssLVZcscssLLsLsLsLsLsababababababababababLsLsabLsLsLsabababababababababababLsLsLsababababLsLsLILsLsLsLsLsLsLsLsLsLskeLsLsabLsLsabababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababajakakakakakakakakajajakakakakakakakakakakakakakajajajakakakakajabababababababababababLsabLsLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLssLVZcscssLLsXpLssLsLsLsLsLuIxnxnxnnysLcscscssLLsLsLssLsLcssLsLLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLIDELsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababajakakakakamakakakajajajakakakakakakajajajakakajajajakakakakakajabababababababababLsLsLsLsLsLsLILsLsCqCqCqOwCqCqzWCqCqOwCqCqCqLsLsLsLsLsLskeLsLsLskeLsLsLsLsLsLssLsLsLsLsLLsLsLssLcsVZcssLuIxnxnxnnysLsLsLsLsLLsLsLsLsLsXpLsLsLsaWLsLsababababababLsLsLsLskeLsLsLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsDELsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajajajakakakakakakakakakajajakakakakakakakajajakakakakakakakakakakajajababababababhshsLsLsLsLskeLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskesLcsnmcscsuIxnxnxnnyLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsabababababLsLsLsLILsLsLsDELsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsDELsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababajajakakakakakajakakakakakakakakakakakakamakakakakakamakakakakakakakakakajababababababCqhshsLsLsLILsLskeLsLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLskeLsLsLsLILsLsaWLsLsLssLsLsLsLsLLsLssLcscscssLuIxnxnxnnysLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsLsababLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsDELsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajakakakakajajajakakakakakakakakakakakajajakakakakakakajakajakakakamakajajajajajababCqCqhshsLsLsLsLsaWLsLsLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLssLcscscssLLsLssLsLsLsLsLuIxnxnxnnysLcscsVZsLLsLsLssLcscsVZsLLsLskeLsababLsLsLILsLsLseMLsLsLsLsLsLILskeLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajakakakajajakakakakakakakakakakajajajajakakakakajajajajajakakakakakakakakakajajCqCqCqCqhshsLskeLsLsLsLsLILsCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLILsLsLsLskeLsLsLsLsLsLsLsLssLcsnmVZsLLsLsLsXpLsLsPhuIxnFsxnnycscsnmcssLLsLsLscscsnmcssLLsLILsLsababLsLsLshKLsLBLsLskeLsDELsLsLsLsdtdtLyGTLyPALyGTLyGTdtdtLsLskeLsLsLsLILsAvAvAvAvAvAvAvAvAvLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababajakakakakakakakakakajajajakakakakajajakakakakakakajajajajajakakakakakakakakajajCqCqawCqCqhshsLsLsLskeLsLsLsLspupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLssLcscscssLLsLsLsLsLsLsPhuIxnxnxnnysLcscscssLLskeLssLcscsVZsLLsLsLsLsabababLseMLsLsDELILshKLsLsLseMLsdtdtPAGTGTGTGTGTGTGTGTPAdtdtLsLsLsLsLsLsLsAvCbCbCbCbCbCbCbAvLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajakakakakakakakakakakajakakamakakakakakakakakamakakakajajakakakakakakajajajajCqCqCqCqCqCqCqhsLsLsLsLsLsLsLsLsLspuCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLssLsLcssLsLLsLsPhPhPhPhPhuIxnxnxnnysLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsababLsLsLsLsNNLseMLsNNLsnhLBLsdtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLsAvCbOiOiUGOiOiCbAvaWLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajakakakamakakakakajajajakakakakakakakakajajakakakakakakakakakakakakakajmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTZamTmTmTmTmTmTmTmTmTmTmTmTmTmTmTxnxnxnxnxnmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTmTdimTJwIVNeJwmTNemTfJIVJwmTmTkhdtGTGTVMGTGTcxOyCyEyGTGTVMGTGTdtdtdtdtdtdtdtAvCbOiPCNkPCOiCbAvLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababajakakakakakakakakajajakajakakakakakakajakakakakakakakakakakakajakakakajxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnXrxnxnxnxnxnxnxnxnFsxnxnxnxnxnxnxnxnXrxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnNUxnnpxnxnxnrDxnShEjxnxnShEjnyIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTGTGTGTPAGTGTIUAvCbUGDkRjDkUGCbAvLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajajakajajajakakakakakakakakakakakakajajakakakakakajakakamakajajajakakajxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnXrxnxnxnxnxnxnxnxnxnxnxnxnxnOlxnxnxnXrxnxnxnxnFsxnxnxnxnxnxnxnxnxnxnxnNUxnxnxnQMxnmkDQDQmkxnEixnxnKOdtrtGTdtrtGTnLGgavbcGTpddtGTGTGTGTGTGTGTKcdtAvCbEIKnKnVyEICbAvLILskeLsLsLsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababajajajabajakakakakakakakakajakakakajajakakakakajajajakakakakajakakakakxnxnxnxnzFxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnXrxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnXrxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnNUxnnpxnxnxnnpxnQMxnShxnxnrDnyIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTZqGTGTGTGTGTIUAvCbEIMsYgMsEICbAvLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababajajajakakakakakakajajakakakakakakakajajajakakakakakajakakakajwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvAWwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvwvuCwvwvwvWULvwvwYGbwvwvLvrgwvsCdtGTGTVMGTGTeaRbjRTMGTGTVMGTGTdtdtdtdtdtdtdtAvCbOiOiOiOiOiCbAvLsDELsLILsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababajajakamakakajajajakakakakakakakakakakakakakakakakakakakajCqCqCqCqCqCqCqCqCqCqhsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsPhLsLsLsLssLsLcssLsLLsPhPhPhLssLsLcssLsLLssLsLcssLsLLsLsLsLsLILsLsLsLsababLsNNeMLsnhLsLseMLskiLsLBkidtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLsAvCbOiJBJBJBOiCbAvLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababajajajakakakajakajakamakakakakakakakajakakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLsLskeLsLskeLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLssLVZcscssLLsLskeLsLssLVZcscssLLssLcscscssLLsLskeLsLsLsLsLsababababLsLsLskeLsLBLsLshKLseMLsLsdtdtZqGTGTGTGTGTGTGTGTZqdtdtLsLsLsLILsLsLsAvCbLPLPLPLPLPCbAvLsLsLsaWLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababajakakakakakakakakakakakakakajajajakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLsLsLsLsLsLsaWLsLsLILsLsLsLILsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLssLcsnmVZsLLsaWLsLsLssLcsnmcssLLssLcsnmcssLLILsLsLsLsabababababababababLBLshKLskiLsLskeLsLsDELsdtdtLyGTLyZqLyGTLyGTdtdtLsLsLskeLsLsLsLsAvCbCbCbCbCbCbCbAvLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababajajakakakakakajajajakakakakajajajajakakamakajajCqCqawCqCqCqCqCqCqhshsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLssLcscscssLLssLVZcscssLLsLsababababababababababababLsLsLsLsLsDELsLsLsLsLsLsLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLILsLsAvAvAvAvAvAvAvAvAvLsLskeLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababQvLfQvmJpVQvmJqDsEpVQvQvZlQvHpQvUcMCKZMCtcMCJpyZyZyZyZyZyZyZjHMCMCMCMCMCqfVYMCtcMCyZyZyZyZyZyZyZyZyZyZyZyZyZMCtcJpMCUcMCKZMCyAMCyZyZyZyZyZyZyZyZyZyZUcjHFgJpMCfOZlQvqfQvuBMCyAMCtcMCjHyZyZyZyZdQjZaZaXaXaXaYKZhQMCyAMCQvQvqDQvMILfQvQvQvmJpVQvmJfOQvLfsEQvfOQvQvqDQvQvelQvZlQAQvqDMIQvHpQvmJqDQvMIpVQvQvQvQvZlfOQvQvmJQvZlQvQvLfQvsEQvMIQvQvQvmJfOQvababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababsEQvqDQvQAQvLfQvQvQvLfQvMCMCyAMCMCMCMCyAMCjHyZyZyZyZyZyZyZyZFgMCUeVYhCMCKZMCJpMCMCFgyZyZyZyZyZyZyZyZyZyZyZjHyAMCMCZltcQvQvfOMCUcVYdQyZyZyZyAMCqfjHFgyAMCQvMCQvMIuBQvQvQvfOQvMIJpVYgCVYJpyZyZyAVYgCaZaXaXaXaYJpFgQvfOQvQvfOQvsEQvQvQvHpMIQvQvQvQvQvQvQvZluBQvQvelQvpVMIilQvQvQvQvZlQvQAQvpVQvQvfOQvQvQvfOQvHpQvqDQvQvilelQvQvmJQvQvqDLfQvmJLfQvMIQvQvababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababQvpVfOHpQvHpQvfOfOtcMCJpqfjHMCgCVYhtMCMCyZyZyZyZyZyZyZyZyZKZyAMCMCVYVYPTQvyAMCqfVYVYyAjHKZJpMCyZyZyZyZyZUcJpQvqDQvuBQvQvLfQvQvMChQVYFgjHKZMCJpQvuBQvQvHpQvQvQvHpfOQvMILfQvHpQvQvVYVYhQMCFgjHMCVYhCaZbqbrbraYHpQviluBQvLfQvQvQvQvZlQvmJfOQvHpQvelQvpVsEQvQvQvpVQvQvsEQvfOQvfOQvmJuBQvQvsEQvfOQvmJQvnYQvQvQvmJuBQvQvLfQvMIQvHpQvfOQvQvQvQvQvQvuBHpababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababQvMIQvqfVYUcsEMCyAKZUcMCyZtcjZLKVYMCJpyZyZyZyZyZyZyZyZyZyZJpUcMChCVYMCelQvLfuBMCMCMChQVYMCqfjHMCyAMCJpMCVYQvQvelQvMImJQvQvZlQvMIQvMCyAMCMIQvQvMIfOLfQvQvmJpVsEQvLfQvmJMIsEQvLffOQvfOMCMCqfMCUcuBaZaXaXaXaYMIQvHpsEpVQvQvQvpVsEQvLfQvHpQvsEQvMIbRQvQvZlQvmJQvLfHpQvuBQvTvQvQvQvQvfOQvMIqDQvmJQvpVQvQvQvZlQvLfQvmJQvQvsEQvQvmJQvmJuBfOQvQAQvsEQvuBabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababZltcgCjZVYJpKZjHFgMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCMCQvHpQvLfQvZlQvQvHpMCUcMCFgMCMIMCMCqDKZMCZlQvQvpVQvQvQvQvZlQAQvQvfOQvLfQvQvQvQvfOQvQvQvQvuBQvQvuBQvQvQvQvQvQvpVQvQvuBQvHpQvQvMILfQvaZaXaXaXaYQvQvQvMIQvQvmJuBQvQvQvQvsEilZluBQvQvLfQvfOQvQvLfQvQvQvLfQAQvQvpVQvQAQvQvLfQvfOQvZlQvQvQvQvmJQvQvQvHpQvQvfOQvQvLfQvQvQvQvsEQvQvqDQvpVQvabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababMCJpKZyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUctcMCyAqfMCqDQvQvfOQvQvfOQvLfMCQvuBHpQvpVQvQvQvQvuBQvQvQAHpQvfOsMQvQvQvQvQvMIuBQvQAQvpVQvQvelQvfOQvQvmJMIQvfOQvnYQvQvQvsEQvQvmJQvQvpVQvQvqDaZaXaXaXaYuBmJLfQvHpQvQvQvelQvfOQvpVQvfOQvQvmJQvQvmJpVLfQvfOQvmJHpQvMILfsEQvuBQvmJpVQvsEQvQvQvuBQvQvQvfOQvLsLsLsLsQvMIQvsEpVQvLfQvfOZlQvQvLfQvababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababMCUcFgtcyAJpqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZmDyZjHMCMCKZMCMCMCQvelQvuBQvmJZlQvQvHpQvsEQvMIQAQvuBQvfOQvMILfQvQvuBQvQvsELfQvmJHpsEQvZlQvsEQvQvmJQvHpQvpVQvQvfOilQvsEQvQvfOuBQvfOQvQvnYQvQvQvQvMIaZaXaXaXaYQvQvQvsEQvfOQvQvQvQvQvmJQvQvQvQvQvQvpVQvQvQvsEMIQvZlQvQvfOQvQvqDfOQvQvQvQvQvuBQvQAQvQvfOmJMILsaWLskeLILsLsLsQvHpQvfOQvmJQvQvQvmJQvMILfabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababJpyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHKZyZMCJpMCqfMCFgQvLfQvQvQvQvQAQvMIQvmJZlQvuBfOQvilQvQvsEQvQvmJQvQvQvQvmJLfQvQvZlQvQvQvQvQvpVQvLfQvqDQvQvsEQvLfQvQvfOQvQvQvHpQvfOQvQvMIQvQvQvQvmJuBZlaZaXaXaXaYMIQvpVQvuBQvQvmJLfQvHpQvqDelQvpVQvfOQvQvQAQvHpQvfOQvsEQvQvsEQvQvQvQvfOQvmJsEQvHpQvLfQvQvLsLILsLsLsLsLsLsLILsLsLsQvQvQvQvQvQAQvQvHpQvababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababMCtcjHMCabqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUcqfMCyAMCVYMCMCQvQvHpQvQvmJLfQvQvQvLfQvQvQvQvQvQvqDZlmJpVQvHpQvQvpVQvelQvQvQvQvQvmJQvfOQvmJQvQvQvQvQvQvLfQvuBQvsELfQvQvQvmJpVQvQvQvQvelLfQvuBQvMIQvQvQvaZaXaXaXaYQvQvQvZlQvsEQvMIQvQAQvQvsEQvQvmJQvZlQvmJQvuBilQvLfuBQvQvpVsEQvmJQvHpQvQvQvilfOMIQvLsLsLsLsababababababLsLsLsLskeLsLsLsZlQvQvHpQvfOabababababababababababababababababababababababababababababaaaa +aaaaabababababababababababJpMCKZyZyZFgyAMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCFgMCMChQMCyAQvLfQvQAQvQvfOQvsEHpuBQvelQvpVQvsEQvQvQvQvelQvfOQvQvQvLfqDQvfOHpQvQvQvuBQvQvQvnYQvsEZlQvmJQvQvpVQvQvQvQAQvQvQvsELfQvmJHpQvQvmJfOQvLfQvQvaZaXaXaXaYqDLfQvQvLfQvQvQvpVQvQvpVilMIQvQvQvQvMIQvHpQvQvmJfOQvHpQvHpfOQvQvLfsEQvMIfOQvQvQvLsabababababababLsLsababLsLsLILsLsLsLsLsLsLsLsMIababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCtcMCJpQvFgMCQvLfQvsEpVQvqDMIQvZlQvQvQvLfQvQvQvfOQvMILfQvZlQvQvQvQvQAQvLfsEQvpVQvQvpVQvQvQAQvHpQvQvQvQvQvMIQvLfilQvHpQvQvQvZlqDQvMIQvQvQvQvQvsEQvQvQvQvHpaZaXaXaXaYQvQvQvQAQvQvfOQvQvQvmJQvQvfOHpQvnYQvQvLfsEqDQvQvQvQvpVmJQvQvMIQvHpQvpVQvQvZlQvabLsababLsLsLBLsLsLsLILsabababLsababLsLsLsaWLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaababababKZFgtcjHyAUcFgtcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCUcyZyZyZyZMCjHMCMCyAMCQvuBQvLfQvQvQvMIQvQvsEQvLfHpQvQvmJQvQvuBQvmJQvHpQvQvmJQvQvLfQvTIQvuBQvQvQvQvQvfOQvsELfQvQvQvuBQvLfQvHpQAQvQvQvmJQvQvmJMIQAQvQvZlQvuBQAQvfOQvQvQvmJMIMIaZaXaXaXaYQvHpQvilMImJHpQvLfQvuBZlQvQvQvQvQvpVQvQvQvQvLfQvQAQvQvQvLfQvfOuBQvQvmJMIQvLsLsLsLsLsLsLsLILsLsaWLsLskeLsLsabLsLsabababLsLsLsLILsababababababababababababababababababababababababababababababaaaa +aaaaababqfUcyAyZyZyZyZyZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyZyZyZUcVYhQVYagMCJpMCyAMCqfKZMCFgQvelHpQvQvQvfOQvHpQvLfQvilQveluBQvelqDQvQvZlQvQvpVQvQvelQvHpQvQvLfQvmJQvLfQvmJQvQvQvQvQvZlQvmJQvQvQvQvQvsEQvqDQvQAQvuBQvQvQvmJfOsEHpQvQvuBsEbiQvQvqDQvaZaXaXaXaYMIQvQvQvQvQvQveluBQvfOQvQvmJLfQvsEuBQvmJpVQvQvLfQvQvmJZlQvLsQvQvQvLsLsLskeLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaababFgyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfgChCMCMCVYVYjZVYMCKZMCMCUcMCMCQvQvQvQvQvQvmJuBZlQvmJQvQvfOQvQvLfQvZlQvQvQvLfQvQvmJQvfOQvQvqDQvfOQvuBQvQvfOQvQvuBZlQvmJMIsEQvQvQvQAQvmJpVQvQvQvfOMIQvQvLfQvMIQvQvMIQvQvQvmJQvQvQvfOQvLfQvaZaXaXaXaYuBQvpVQvZlLfQvQvQvQvZlQvpVQvQvfOQvQvQvQvQvQvmJZluBQvQvQvLsLsLsLsLsLsLILsLsLsababLIabababqwacqwacDMacacacLsLsLsabLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababaaaa +aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCUcjZVYMCMCUeMCMCyAQvHpMCtcMCQvMIfOQvHoQvLfQvQvQvQvZlQvXEQvuBQvmJQvQvsEQvLfQvQAQvHpQvuBQvsEQvLfQvQvQvsEQvLfQvqDQvQvQvQvQvQvQvQvfOQvQvQvHpQvLfQvQvQvQvsEQvQvfOQvpVQvsEQvLfQvQvQvLfQvQvQvQvQvaZaXaXaXaYQvQvQvQvuBQvfOHpQvmJQvfOQvQvQvQvQvZlQvfOHpMIQvQvLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababacqwacacqwacacacacqwababababLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZtcyZKZJpyAjHMCQvMCtcQvmJMCMCMCFgMCQvMIQvZlQvZlQvQvQvQvHpQvQvpVsELfQvQvQvQvfOQvQvpVQvfOQvQvmJQvZlQvQvpVQvHpQvQvQvmJpVQvMIQvQAQvelQvmJLfQvpVQvqDQvQvsEQvMIQvsEQvQvmJuBQvHpQvQvmJQvQvZlQvQvqDelQvQvsEQvHpQvuBaZaXaXaXaYQvZlQvQvQvHpQvQvQvQvLIMILsLsuBQvLfLsQvQvQvLsLsLsLsLsLskeLsLsLsLsLsLsLsababababababababacqwqwacacqwacacqwacqwababababLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZFgFgMCyAababZlQvmJMIQvHpuBQvQvJpQvLfQvsEQvQvmJQvHpsELfuBQvmJsEQvQvQvQvKEQvQvQvMIQvsEHpQvpVilcpZlQvQvmJsEQvQvuBQvfOQvLfQvmJHpQvMIQvQvqDsEQvQAQvQvmJLfQvQvVhQvuBMIQvQvpVQvQvelQvQvQvQAQvQvfOQvQvQvuBMIQvQvQvmJaZaXaXaXaYQvQvQvQvTIQvQAQvLfLsLsLsLsLsLsLsQvpVLsLsLsLsLsLsLsLILsLsLsLsLsLILsLsLsabababababababqwqwqwXgYwMkqwacBIacacqwabababababLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAababababababQvpVQvsEQvQvQvKEQvQvQvuBQvqDQvQvQAQvQvQvQvZlQvMIQvHpQvmJQvQvmJMIQvLfuBQvQvsEMIQvLfQAuBQvMIQvQAQvQvHpQvQvQvQvQvfOQvQvZlQvHpQvQvuBQvQvQvQvZlQvQvQvQAHpQvfOQvLfQvQvHpLfQvQvQvQvQvmJfOQvQvLfQvQvMIaZaXaXaXaYqDQvLfQvQvQvQvQvLsLsLILsLsLsLsLsLILskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababacBIqwacacqwacacqwacacababababababLskeLsLsLsLsLILsabababababababababababababababababababababababababababaaaa +aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZqfUctcjHababababababuBQvmJqDQvelQvQvQvZlQvfOQvmJLfQvQvQvQvHpelQvQvQvLfQvQvQvQAQvQvQvQvHpQvLfQvQvQvQvQvQvQvQvfOQvQvQvmJMIQvuBQvmJQvQvQvHpQvLsQvfOQvQvfOQvLsLILsLsLfQvQvQvLsLsQvQvfOuBQvQvLILsLsMIQvQvQvLsLsLILsLsLsaZaXaXaXaYQvQvQvQvpVLsLsLsLsLskeLsaWLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsababababababqwacacacacacLjqwYNqwYwacqwabababababLsLsLsLsLBLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababyAyZyZyZyZyZJpyZyZyAtcFgJpKZyAjHabababababababababQvZlQvfOQvpVQvmJQvQvsEMIQvpVQvQvpVQvmJQvQvQvQvmJQvQvMIQvQvqDQvLfelQvQvQvZlQvLfQvmJpVsEZlQvHpQvQvQvQvelQvQvQvQvpVQvLfLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsQvQvLsLsLsLsaWLsLsLsLsLsLsLILsLsLsaZaXaXaXaYQvQvHpQvLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababqwqwqwXghmqwqwacBIqwqwqwacabababababLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababFgyZyZyZyZFgqfjHUcMCabababababababababababababababababQvQvsEQvQvQvLfQvHpQvHpQvQvQvsEQvQvZlpVilqDQvZlQvnYQvQvsEuBQvQvpVQvmJQvsEQvqDQvQvQvQvLsLspVLsLfQvQvQvLfQvHpQvLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsaZbgbgbgaYLsMIQvLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLsLsLskeLsLsLsLsLsLsLILsababababababababacacqwacqwMkqwqwqwacqwqwabababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababJpjHtcUcyAKZacabababababababababababababababababababQvQAQvHpQvMILfQvQvelQvQvmJQAQvqDQvuBQvQvQAQvQvQvmJQvpVQvQvQvQvfOQvQvQvLfuBQvQvQvLfQvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsabababLsabababLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLILsLsLILsLsLsLsaZaXaXaXaYLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababqwqwqwqwXgacqwqwqwababababababLsLsLsLsLsBRLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababbsbtbuabababababababababababababababababababQvQvMIQvQAQvQvQvmJQvpVQvQvQvQvLfQvHpmJQvQvQvpVQvQvQvQvQvLfZlQvQvLsLfLsQvQvHpfOQvQvLsLsLILsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsabababababababLsLsBRLsLskeLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsXHXHbfaXaXaXbhXHXHLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLBLsLsLsLsLskeLsLsLsababababababababababababqwqwqwqwabababababababLsLsLsLsLsLsLsLskeLsLsLsLsababababababababababababababababababababababababaaaa +aaaaababababababacacacabababababababababababababababababababfOQvQvmJQvQvfOQvQvQvilLfQvpVQvQvMIQvQvQvQvsEQvLfQvuBLsLsQvQvLsLsLILsLsLsLsLsLsLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsababababababLsLsLsLsLBLsaZaXaXaXaYLsLsLsLsLsaWLsLsababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLILsLsLsaWLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababacababababababababababababababababababababQvsEQvqDZlQvuBQvLfmJLfQvsEQvQvmJQvQvLfQvpVQvLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLILsabababLsLsLsLsLsLsLILsLsabababababababLsLILsLsLsaWLsLsLsLILsLsLsLsLsababababababababLsLILsLsLsLIaZaXaXaXaYLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsBRLsLsababababababababababababababababababababababababababaaaa +aaaaabababababbvbvbwbvbvabababababababababababababababababQvQvuBZlQvQvmJQvQvQvMIQvQvZlQvQvQvQAQvqDQvQvLsLsLsLILsLsLsLsLsLskeLsLsabababababLsLsLsBRLsLsLsabababababLsLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLBLsLsLsLsLsLsababababababababLsLsLsXpLsLsaZaXaXaXaYLsXpLsLsLsLsLsLsababababababababLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsBRLsLsLsLILsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababbvbxbxbxbybybybybybyababababababababababababQvmJLfQvelQvQvsEQvfOQvLsLsLsLILsLsQvQvQvLsLskeLsLsLsLILsLsLsLsLsLsLsababababababababLsLsLskeLsLsababababLsLsLskeLsLsLILsLsLsababLsababababLsLsLsLsLsLsLsLsLsLILsabababababababababLsLsLsLsLsLsaZaXaXaXaYLsLsLsLILsLsababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsLsabababababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababbybxbxbxbxbxbxbxbxbyababababababababababababQvpVQvQvQvpVQvQvLfQvQvLsLILsLsLsLsLsLsLBLsLsLsLsaWLsLsLsLsLILsLsLILsababababababLsLsLsLILsLsLsLsLsababLsLsLILsLsLsLsLskeLsLsababLsLsLskeLsLsLsLsLsLsLsLskeLsLsLsababababababababLsLsLsLsLskeLsbzbrbrbrbBLsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababbybxbxbxbxbxbxbxbxbyabababababababababababQvQvQAQvBRLILsLsBRZlLIkeLsLsLsLsLILsLsLsLILsLILsLsLsLsLsLsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLILsLsLsLsbzaXaXaXbBLsLsLskeLsLsLsLsLsLsLsLsababLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLskeLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa +aaaaabababababbybybybwbybybybxbxbyababababababababababababpVQvkeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsbDaXaXaXaYXpLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababbybxbEbxbxbxbybxbxbyababababababababababababyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXbFbGbHbGbIyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXabababababababababababababababababababababababababababaaaa +aaaaabababababbybJbxbKbxbMbybxbxbyababababababababababababLILsLsLILsabababLsLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLILsLsLsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLILsLsLsaZaXaXaXaYLsLsLILsLsLskeLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLILsLsLsabLsLsLsLsLILsLsLILsLsLsLsLILsLsLsLsaWLsLsLsLILsLsLsLILsLsLsLsLsaWLskeLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaabababababbybxbNbObxbxbybxbxbyababababababababababababLsababababababababababLsLsLsLILsLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababLsLILsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLILsaZaXaXaXaYLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsLsLsLsLsLsLsabLsababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsabababLsabLsLsababLsLIabababababababababababababababababababababababababababababababaaaa +aaaaabababababbybMbEbKbxbMbybxbxbybybybyajajajababababababababababababajababababLILsLsLsLsLsLsLsLsLsLsLsababababLsababababababLsLsLskeLsLsaWLsLsLsLILsLsLsLsLsLILsLsabababpuCqCqCqpuLsLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLsaZaXaXaXaYLsLsXpLsaWLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababLsLILsLsLsLskeLsLsLsLILsabababababababababLIabababababababababLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababbybTbNbObxbxbybxbxbxbxbUakakakajajajabababababababababajajajabababababLsababababababababababababababababajajababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababpupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLssLsLsLsLsLLsLsLsLsLsLsababababababababababababababababLsLsaWLsLILsLsababababababababababababababababababababababLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababbybMbVbKbxbMbybxbxbxbxbxbxakamakakajajababababababababajakajajababababababababababababajajajajajajajajajajajababababLsLsLsLsLILsLsababLsLsLsLsabababababCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLssLsLsLsLsLLsLsLsPhPhPhPhPhaZaXaXaXaYsLsLsLsLsLLsLsLssLcscscssLLsLsLsLsLsLsababababababababababababababababLsabLsLsLsLsLsababababababababababababababababLsabababLsLsLsLsLsLILsabababababababababababababababababababababababababaaaa +aaaaabababababbybxbNbWbEbxbybybybybybybybyakakakakajababababababababajakakajajajajababababababababajajakakakakakakakakakajajababababababLsLsabababababababababababLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLILsLsLsaZaXaXaXaYsLVZcscssLLsXpLssLcsnmcssLLsLsLsXpLsabababababababababababababababababababLsababLsabababababababababababababLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa +aaaaabababababbybJbxbxbxbMbyababababababajajajbXakajajabababajajajajajakakalakajajajajajajajajajajajakakakakakakajajakakakajajabababababababababababababababababLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLsLsLsLsLsLsLILsXpLsLssLcsnmcscsLsLsLsLsLsLsLsLsaZcbaXaXaYcscsnmcssLLsLsLssLVZcscssLLsLsLsLsLsababababababababababLsLsabLsLsLsabababababababababababLsLsLsababababLsLsLILsLsLsLsLsLsLsLsLsLskeLsLsabLsLsabababababababababababababababababababababababaaaa +aaaaabababababbybYbEbZbxcabyababababababababajajajajajajabababajakakakakakakakakajajakakakakakakakakakakakakakajajajakakakakajabababababababababababLsabLsLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLssLVZcscssLLsXpLssLsLsLsLsLaZaXaXaXaYsLcscscssLLsLsLssLsLcssLsLLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLIDELsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababbybybybybybybyabababababababababababajajajajababajakakakakamakakakajajajakakakakakakajajajakakajajajakakakakakajabababababababababLsLsLsLsLsLsLILsLsCqCqCqOwCqCqzWCqCqOwCqCqCqLsLsLsLsLsLskeLsLsLskeLsLsLsLsLsLssLsLsLsLsLLsLsLssLcsVZcssLaZaXaXaXaYsLsLsLsLsLLsLsLsLsLsXpLsLsLsaWLsLsababababababLsLsLsLskeLsLsLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsDELsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababajajajajajajakakakakakakakakakajajakakakakakakakajajakakakakakakakakakakajajababababababhshsLsLsLsLskeLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskesLcsnmcscsaZaXaXaXaYLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsabababababLsLsLsLILsLsLsDELsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsDELsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababajajakakakakakajakakakakakakakakakakakakamakakakakakamakakakakakakakakakajababababababCqhshsLsLsLILsLskeLsLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLskeLsLsLsLILsLsaWLsLsLssLsLsLsLsLLsLssLcscscssLaZaXaXaXaYsLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsLsababLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsDELsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababajakakakakajajajakakakakakakakakakakakajajakakakakakakajakajakakakamakajajajajajababCqCqhshsLsLsLsLsaWLsLsLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLssLcscscssLLsLssLsLsLsLsLaZaXaXaXaYsLcscsVZsLLsLsLssLcscsVZsLLsLskeLsababLsLsLILsLsLseMLsLsLsLsLsLILskeLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababajajakakakajajakakakakakakakakakakajajajajakakakakajajajajajakakakakakakakakakajajCqCqCqCqhshsLskeLsLsLsLsLILsCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLILsLsLsLskeLsLsLsLsLsLsLsLssLcsnmVZsLLsLsLsXpLsLsPhaZaXcbaXaYcscsnmcssLLsLsLscscsnmcssLLsLILsLsababLsLsLshKLsLBLsLskeLsDELsLsLsLsdtdtLyGTLyPALyGTLyGTdtdtLsLskeLsLsLsLILsccccccccccccccccccLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababajakakakakakakakakakajajajakakakakajajakakakakakakajajajajajakakakakakakakakajajCqCqawCqCqhshsLsLsLskeLsLsLsLspupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLssLcscscssLLsLsLsLsLsLsPhaZaXaXaXaYsLcscscssLLskeLssLcscsVZsLLsLsLsLsabababLseMLsLsDELILshKLsLsLseMLsdtdtPAGTGTGTGTGTGTGTGTPAdtdtLsLsLsLsLsLsLscccdcdcdcdcdcdcdccLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababajajakakakakakakakakakakajakakamakakakakakakakakamakakakajajakakakakakakajajajajCqCqCqCqCqCqCqhsLsLsLsLsLsLsLsLsLspuCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLssLsLcssLsLLsLsPhPhPhPhPhaZaXaXaXaYsLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsababLsLsLsLsNNLseMLsNNLsnhLBLsdtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLscccdOiOiUGOiOicdccaWLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababajajakakakamakakakakajajajakakakakakakakakajajakakakakakakakakakakakakakajaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUchaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaXaXaXaXaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUciaUckclcmckaUcmaUcnclckaUaUcodtGTGTVMGTGTcxOyCyEyGTGTVMGTGTdtdtdtdtdtdtdtcccdOiPCNkPCOicdccLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababajakakakakakakakakajajakajakakakakakakajakakakakakakakakakakakajakakakajaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXcbaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbgaXcfaXaXaXcgaXcqcraXaXcqcraYIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTGTGTGTPAGTGTIUcccdUGcvRjDkUGcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababajajajakajajajakakakakakakakakakakakakajajakakakakakajakakamakajajajakakajaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXbpaXaXaXbraXaXaXaXcbaXaXaXaXaXaXaXaXaXaXaXbgaXaXaXctaXcucwcwcuaXcyaXaXcBdtrtGTdtrtGTnLGgavbcGTpddtGTGTGTGTGTGTGTKcdtcccdEIKnKnVyEIcdccLILskeLsLsLsLsababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababajajajabajakakakakakakakakajakakakajajakakakakajajajakakakakajakakakakaXaXaXaXczaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbgaXcfaXaXaXcfaXctaXcqaXaXcgaYIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTZqGTGTGTGTGTIUcccdEIMsYgMsEIcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababajajajakakakakakakajajakakakakakakakajajajakakakakakajakakakajbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcDbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcEbdbdbdcFcGbdcHcJbdbdcGcKbdbedtGTGTVMGTGTeaRbjRTMGTGTVMGTGTdtdtdtdtdtdtdtcccdOiOiOiOiOicdccLsDELsLILsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababajajakamakakajajajakakakakakakakakakakakakakakakakakakakajCqCqCqCqCqCqCqCqCqCqhsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsPhLsLsLsLssLsLcssLsLLsPhPhPhLssLsLcssLsLLssLsLcssLsLLsLsLsLsLILsLsLsLsababLsNNeMLsnhLsLseMLskiLsLBkidtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLscccdOiJBJBJBOicdccLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababajajajakakakajakajakamakakakakakakakajakakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLsLskeLsLskeLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLssLVZcscssLLsLskeLsLssLVZcscssLLssLcscscssLLsLskeLsLsLsLsLsababababLsLsLskeLsLBLsLshKLseMLsLsdtdtZqGTGTGTGTGTGTGTGTZqdtdtLsLsLsLILsLsLscccdLPLPLPLPLPcdccLsLsLsaWLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababajakakakakakakakakakakakakakajajajakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLsLsLsLsLsLsaWLsLsLILsLsLsLILsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLssLcsnmVZsLLsaWLsLsLssLcsnmcssLLssLcsnmcssLLILsLsLsLsabababababababababLBLshKLskiLsLskeLsLsDELsdtdtLyGTLyZqLyGTLyGTdtdtLsLsLskeLsLsLsLscccdcdcdcdcdcdcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababajajakakakakakajajajakakakakajajajajakakamakajajCqCqawCqCqCqCqCqCqhshsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLssLcscscssLLssLVZcscssLLsLsababababababababababababLsLsLsLsLsDELsLsLsLsLsLsLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLILsLsccccccccccccccccccLsLskeLsLsababababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababababababababababababababajakakakajajajabajajajajajajajajakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLskeLsLsLsLsLskeLsLsLsLsLskeLsLsLsLsLsabLsLsLILsLsLsLsabLsLsLsLsLsLsLILsLsLsLsLsLsLssLsLsLsLsLLsLsLsababsLsLsLsLsLLssLsLsLsLsLabababababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLILsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababababababababababababababajajajajajababababababajabajajajajajajajajCqCqCqabCqCqCqCqCqhshsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsabLsabLsLsLsLsababababababLsLsLsLsLsaWLsLskeLsLsLsLsLsLsLsLsLsabababababababLsLsLsabababababababababababababababababababababababLsLsLsaWLsLsLsLsLsLsaWLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLILsLsDELsLsLILsLsLsababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababababababababababababajajabajabababababababababababajabajajajabababababababCqhshsLsLsLsLsLsLsabababababababLsLsLsababababababababLsLsabababababababLsLsLsabLsabLsLsLsLsLsLsLILsLsLsababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsDELsLsLsLsLsLsLsLsabLsLsabLsLsLskeLsLsDELsLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index f75772a2..11850f81 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -260,3 +260,29 @@ icon = 'icons/obj/clockwork_objects.dmi' icon_state = "clockwork_floor" floor_tile = /obj/item/stack/tile/bronze + +/turf/open/floor/concrete/ + name = "concrete" + icon = 'icons/turf/floors.dmi' + icon_state = "concrete" + baseturfs = /turf/open/floor/plating/asteroid + +/turf/open/floor/concrete/smooth + icon_state = "concrete2" + +/turf/open/floor/cobble/side + icon_state = "cobble_side" + +/turf/open/floor/cobble/corner + icon_state = "cobble_corner" + +/turf/open/floor/cobble + name = "cobblestone path" + desc = "A simple but beautiful path made of various sized stones." + icon = 'icons/turf/floors.dmi' + icon_state = "cobble" + baseturfs = /turf/open/floor/plating/asteroid + footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY \ No newline at end of file diff --git a/icons/turf/walls/sandstone_wall.dmi b/icons/turf/walls/sandstone_wall.dmi index 4118a3dbabf27be7259a63360b1c86b6cee78522..3eac01e96bbe4149d2724386baa8024590aafcbf 100644 GIT binary patch delta 1940 zcmV;F2W$B23Zf5?B!47OOjJe6s)^3AlE$QfxsPMRpLxKVa>1N?wv1rEoOryFX0(c4 z%BqQzk!vOZ0004WQchCV=-0C=3GlR*l?Fc3x8 z$tgm+HDa2$bR#X&g}s6Vo3??PN+(#ny{Q!!qGUj_nLj)}kAH!rY+oG8isi?W-pmMg zaBRoadPB)%Yu|++GfFyR+s-cmy!IxHiQqP&q_!i3Bq(V{eKE`YW-Oc5Qce#N)a@@3k*Kf%X)kspmJnSE(5`y-g3s_x_yLnavq>>kVmZ~By1K5@L_S2 z)H_^6LgowlwPIINuv!vnGzowuv8umW!Fp(4*`83@5`Wgqs+c_U`(VX4WgN%d29(mM zU}FHXr3)aRssMux{ucn^{yq6HZ_q!AW`BcG4+veuI2-qXVL&1O!My8;3;8c@umCjN z!TOzi0W<(vyZSgKNB}v`V;6uDBn_m&p?u8{!x>kRAlmmCL>OD{-bSWgq_ z2@4c}^a3F`tY<<uj4MKtg*eQecx)KKO5hjl!CaUNlqHfetifviRkaOxA7zw%nBf%UCbK=dUjV)|S(3h=JKXtRqv zm_O9Pg$pn){vYh3!3I~r74Y8!raoXYpmsy|15griHJ|uaeqD3W*{1%}+znWa>Vh$V z(7k_O9f+ zIRI)DakVtc>QQ7DrR!^vCwApjUXMxxduRL`+*0zu9$rcOqDGM@D^ZHd><>Ke4_mga z*!B=rhe!g7=FWHxNP4T5Mql)KqTDV@*Vm>HcI8xF3eem+0}$7L>hnZ1h<{vA{_N{yX<_keHi5P=h0**3l-8_*cbn}EhshV4Nd1mmP&Zv%T{`zE0AltFu#55RmOC~QDuf6xRpo-%9?@&TAH zTtEXG*xMf@?LLQP*nb}812A6*3LDtl2a0x=z%pzP^8uJI$RC)%el(!n9_9luU-$%m zP}soU*pMH<_AnoS`NDKRICTABdr?1_eY(zVU~eo>fvB(y+QWPR<_jj=J{1l2IV{8W z?Qk82^Ya5fzQ|8Dus8MujtV)-uzf2ZfcZi@%+UJ*>05wl-G7Bv`sdt$w=3WZcyEC2 zegH1OvEqOW$l6^L%GvXS0XplT@d6nD_XGGdHUR7g@C`0teht8WfXoMw0ld8*Aj5TR zKzly`9q=jqptT<`mmeHv^MmeEF|r1;PuHFOfOLTj=q%T7J{n+lN9&4=8~i%<1Ku#7 a|1Ygh6G+goEe$#V0000tAq zI{*Lx0d!JMQvg8b*k%9#0M&X_Sad{Xb7OL8aCB*JZU6vyoRyQo3c@f9hR^L&l3bmD`IDC7n69o|(=_LstKOZ5@*|y#_Eq|-_4ZZ3SjCX9q~%5tLNXo1LWNcL9ma0ng9R<8c9S!RCt{2nZa)3AP|QA z2#XKtwMI&Nj#Bjnl9l#c#Sf6~VbAR|?1QhJ;2QrJ|0KhtZr3AK!a)5Q!Z80pVH+!( zzXGhOtL#WUnklQNmyv!=)p}P}rjP>cG{6?toGtjWvw!6Pyq?Aoc4)@%kOQz<#R117 z2N)9vv@>AK<6CTs?p9TX5tNU=w~b+kw(j{o1E5)E+kIo$p{?7t%Pa%n>1SQn*rBO9 z>=FRn51J13c!&D*1=11F4yu4WjyAE5Q%1o3;4`P_1^~GqFeB@nzd-#9=M6~k6Alpi z2?yL_ihm@VAvNiCo&pdBBx=%-ngEcA0uB($8V(Q&vjl)lT5^C;9DhEbi~~mN=Lay; zKXL|7wq<;oj?~W&pgu)gXQ}lU+um7f{l!*0ORc}yth3bm1+V}V05s2)et0{J-M0&lwyE+ zp8`B)h-h{SkZ=RS0dH}@T?T+Lt2p4u^*;qP`_bPR;8%kFr+{`#jR8{hKLxZwA=V*9 z|0n#&q{9MO0G|&~f58G+0Qvywc1}$ikf=#RDmAGnpeB_y2>_Weqb8M>)TH8=npECX zYkwWeB@lG6L?mQ_v z0%(_wKz)jC05Atwrr7QkT?c2ui=7!V0&EXPzyRVYnit?2KcE1qAIxHkM4KH0h_~wm zfGptfDH4WE4iE-?3XsYc3Xlpf4iHL53h2M@I`OLy0I`j4z!wGps0hTnIsnzYfq!2S zf7Fp@>_5y7U{Mvg4ufSGJY#>z4!|u6^rXPC@EQAKc7ST$z+Qk`L-36KF*`stzlGfl zH@Dy!`(t*1YJLycTJjQxY`0M&dA5d{MbK4bqNJ7|}zujbbf6EQ^MGxo>#ohp1K zi9weEus^=fRrHR5!UuIwpo^da-+yEq*{opbSvm z?9{hw^?;)uGS!2=x@=JwUi#AU%d2Zl7%-tIq^1tQqz#igF#yv}OiQx?I@iF&S`5I{ zACCsa06e_F!woS2k6-Y3Mhw6MBs^de15UZQ7v%7WEE8Zo0K8yj4#0<_!BIJAHo(US z;2bnRKx>L_05D^KT+6ioSiBF&4*0si!Qux5pt#woZ`bMpM?GY!2Yq$fqAtAjrQ=su a*Z%-Vpq^LcLfTRQ0000 Date: Thu, 1 Jul 2021 17:31:17 -0300 Subject: [PATCH 06/21] sandstone walls now can connect to windows --- code/game/objects/structures/false_walls.dm | 2 +- code/game/objects/structures/window.dm | 4 +++- code/game/turfs/simulated/wall/mineral_walls.dm | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index b194548f..e359325d 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -271,7 +271,7 @@ icon_state = "sandstone" mineral = /obj/item/stack/sheet/mineral/sandstone walltype = /turf/closed/wall/mineral/sandstone - canSmoothWith = list(/obj/structure/falsewall/sandstone, /turf/closed/wall/mineral/sandstone) + canSmoothWith = list(/obj/structure/falsewall/sandstone, /turf/closed/wall/mineral/sandstone, /obj/structure/window/fulltile) /obj/structure/falsewall/wood name = "wooden wall" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 4b6b0689..ca698d44 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -516,7 +516,9 @@ /obj/machinery/door/airlock/hatch, /obj/machinery/door/airlock/engineering/glass/critical, /obj/machinery/door/airlock/atmos, - /obj/machinery/door/airlock/highsecurity,) + /obj/machinery/door/airlock/highsecurity, + /turf/closed/wall/mineral/sandstone, + /obj/structure/falsewall/sandstone,) // canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) glass_amount = 2 diff --git a/code/game/turfs/simulated/wall/mineral_walls.dm b/code/game/turfs/simulated/wall/mineral_walls.dm index b37b5ec6..1e994b01 100644 --- a/code/game/turfs/simulated/wall/mineral_walls.dm +++ b/code/game/turfs/simulated/wall/mineral_walls.dm @@ -49,7 +49,7 @@ icon_state = "sandstone" sheet_type = /obj/item/stack/sheet/mineral/sandstone explosion_block = 0 - canSmoothWith = list(/turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone) + canSmoothWith = list(/turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone, /obj/structure/window/fulltile) /turf/closed/wall/mineral/uranium article = "a" From 24fec328155e3c8a6dadc47996866657d55b178a Mon Sep 17 00:00:00 2001 From: Archie Date: Sun, 4 Jul 2021 02:30:34 -0300 Subject: [PATCH 07/21] OpFix --- code/modules/antagonists/_common/antag_spawner.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 3f1c437f..40fbeb1f 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -110,7 +110,7 @@ if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)) to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") return FALSE - if(!user.onSyndieBase()) + if(!user.onSyndieBase() && !user.mind.has_antag_datum(/datum/antagonist/nukeop/lone,TRUE)) to_chat(user, "[src] is out of range! It can only be used at your base!") return FALSE return TRUE From 50538b90278a54cbc84e296bbf925ae2465d7739 Mon Sep 17 00:00:00 2001 From: Dahlular <55758850+Dahlular@users.noreply.github.com> Date: Sat, 3 Jul 2021 23:52:06 -0600 Subject: [PATCH 08/21] Temporarily disables lone op --- code/game/gamemodes/dynamic/dynamic_rulesets_events.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm index 839cb035..efaa5eff 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_events.dm @@ -376,10 +376,11 @@ typepath = /datum/round_event/ghost_role/operative required_enemies = list(0,0,0,0,0,0,0,0,0,0) weight = 0 //This is changed in nuclearbomb.dm - occurances_max = 1 + occurances_max = 0 //Turned off. For now. requirements = list(10,10,10,10,10,10,10,10,10,10) //SECURE THAT DISK cost = 50 - chaos_min = 0.5 + chaos_min = 3 + map_blacklist = list("LayeniaStation.dmm") /datum/dynamic_ruleset/event/operative/get_weight() var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control From 65d54bbd25c03447e3f46eebf14b920343582552 Mon Sep 17 00:00:00 2001 From: Dahlular <55758850+Dahlular@users.noreply.github.com> Date: Sun, 4 Jul 2021 00:04:56 -0600 Subject: [PATCH 09/21] Updates lore terminals about the disk --- hyperstation/code/game/machinery/lore_terminal.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hyperstation/code/game/machinery/lore_terminal.dm b/hyperstation/code/game/machinery/lore_terminal.dm index 7381b128..7936ade8 100644 --- a/hyperstation/code/game/machinery/lore_terminal.dm +++ b/hyperstation/code/game/machinery/lore_terminal.dm @@ -206,7 +206,7 @@ SPECIAL KEYS RESPOND AS FOLLOWS: /datum/lore_entry/all name = "nuclear_authdisk_instructions.mail" title = "Handling the Nuclear Authentication Disk and You!" - content = "SYSADMIN -> allcrew@seegnet.kin. RE: The Nuclear Authentication Disk. ` Greetings staff members! We're aware of the questions you have in regards to the Nuclear Authentication disk. The disk itself contains the codes needed to unlock nuclear devices used in a Nuclear Emergency and trigger a station self-destruction sequence. ` It is the duty of every member of this crew to take responsibility for the disk in the off chance that station command is currently absent. ` Don't leave it lying in the Captain's office. ` Keep it in movement to prevent Syndicate triangulation devices from functioning. ` If the disk location is unknown, look for a red pinpointer, the Head of Security and the Captain should always have one in their offices or lockers. These will help you locate the disk. ` If the disk is in enemy hands, call all hands on deck immediately and order a red alert. ` ` Protect the disk with your life, for the lives of the station's crew depend on it. Stay safe through vigilance." + content = "SYSADMIN -> allcrew@seegnet.kin. RE: The Nuclear Authentication Disk. ` Greetings staff members! We're aware of the questions you have in regards to the Nuclear Authentication disk. The disk itself contains the codes needed to unlock nuclear devices used in a Nuclear Emergency and trigger a station self-destruction sequence. ` It is the duty of every member of this crew to take responsibility for the disk in the off chance that station command is currently absent. ` Even though Layenia itself is a mobile facility and prevents Disk Triangulation in most circumstances, it is still important to hold onto the disk even when not needed- it is a good formality and keeps things secure! ` If the disk location is unknown, look for a red pinpointer, the Head of Security and the Captain should always have one in their offices or lockers. These will help you locate the disk. ` If the disk is in enemy hands, call all hands on deck immediately and order a red alert. ` ` Protect the disk with your life, for the lives of the station's crew depend on it. Stay safe through vigilance." access_tag = "all" /datum/lore_entry/all/meltdown_proceedures From d8ae8c8fa777a16f448b2e3305db043920fd2d97 Mon Sep 17 00:00:00 2001 From: Dahlular Date: Tue, 6 Jul 2021 08:17:02 -0600 Subject: [PATCH 10/21] Security information basic --- .../code/game/machinery/lore_terminal.dm | 68 +++++++++++++++++-- lore_entries/security/advancedgearandyou.txt | 1 + lore_entries/security/basicgearandyou.txt | 1 + lore_entries/security/defensivegearandyou.txt | 1 + lore_entries/security/introduction.txt | 1 + lore_entries/security/usageandterms.txt | 1 + lore_entries/security/wip.txt | 1 + 7 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 lore_entries/security/advancedgearandyou.txt create mode 100644 lore_entries/security/basicgearandyou.txt create mode 100644 lore_entries/security/defensivegearandyou.txt create mode 100644 lore_entries/security/introduction.txt create mode 100644 lore_entries/security/usageandterms.txt create mode 100644 lore_entries/security/wip.txt diff --git a/hyperstation/code/game/machinery/lore_terminal.dm b/hyperstation/code/game/machinery/lore_terminal.dm index c886c9df..0c50dd2f 100644 --- a/hyperstation/code/game/machinery/lore_terminal.dm +++ b/hyperstation/code/game/machinery/lore_terminal.dm @@ -1,7 +1,7 @@ GLOBAL_DATUM_INIT(lore_terminal_controller, /datum/lore_controller, new) /obj/machinery/computer/lore_terminal - name = "Staff Seegson info-link terminal" + name = "Staff info-link terminal" desc = "A small CRT display with an inbuilt microcomputer which is loaded with an extensive database. These terminals contain eveyrthing from information about historical events to instruction manuals for common ship appliances." icon = 'nsv13/icons/obj/computers.dmi' icon_state = "terminal" @@ -9,16 +9,21 @@ GLOBAL_DATUM_INIT(lore_terminal_controller, /datum/lore_controller, new) density = FALSE anchored = TRUE idle_power_usage = 15 - var/access_tag = "ntcommon" //Every subtype of this type will be readable by this console. Use this for away terms as seen here \/ + var/access_tag = "kncommon" //Every subtype of this type will be readable by this console. Use this for away terms as seen here \/ var/list/entries = list() //Every entry that we've got. var/in_use = FALSE //Stops sound spam var/datum/looping_sound/computer_click/soundloop /obj/machinery/computer/lore_terminal/command //Put sensitive information on this one - name = "Command Seegson info-link terminal" - access_tag = "ntcommand" + name = "Command info-link terminal" + access_tag = "kncommand" req_access = list(ACCESS_HEADS) +/obj/machinery/computer/lore_terminal/security + name = "Security info-link terminal" + access_tag = "knsecurity" + req_access = list(ACCESS_SECURITY) + /obj/machinery/computer/lore_terminal/awaymission //Example for having a terminal preloaded with only a set list of files. access_tag = "awaymission_default" @@ -201,7 +206,7 @@ SPECIAL KEYS RESPOND AS FOLLOWS: name = "new_employees_memo.mail" title = "Intercepted message" path = "lore_entries/welcome.txt" - access_tag = "ntcommon" + access_tag = "kncommon" /datum/lore_entry/station/meltdown_proceedures name = "meltdown_proceedures.mail" @@ -211,7 +216,7 @@ SPECIAL KEYS RESPOND AS FOLLOWS: /datum/lore_entry/command name = "command_memo.mail" title = "Intercepted Message" - access_tag = "ntcommand" + access_tag = "kncommand" classified = "Restricted" content = "SYSADMIN -> command@seegnet.kin. RE: Orientation. ` Greetings station command staff, congratulations on your placement! It is now company policy to attend all briefings as issued by centcom staff. Please speak to your centcom officer for clarification on the new procedures." @@ -232,3 +237,54 @@ SPECIAL KEYS RESPOND AS FOLLOWS: /datum/lore_entry/away_example/weapons_log name = "weapon_systems_dump2259/11/25.txt" content = "Life support systems terminated. Railgun system status: A6E3. Torpedo system status: ~@##6#6#^^6 -=File Access Terminated=-" + +/datum/lore_entry/security + name = "usage_and_terms.memo" + title = "Usage and Terms" + access_tag = "knsecurity" + path = "lore_entries/security/usageandterms.txt" + +/datum/lore_entry/security/introduction + name = "introduction.memo" + title = "Security Introduction" + path = "lore_entries/security/introduction.txt" + +/datum/lore_entry/security/basicgearandyou + name = "gearbasics.memo" + title = "Basic Gear and You" + path = "lore_entries/security/basicgearandyou.txt" + +/datum/lore_entry/security/advancedgearandyou + name = "gearadvanced.memo" + title = "Advanced Gear and You" + path = "lore_entries/security/advancedgearandyou.txt" + +/datum/lore_entry/security/defensivegearandyou + name = "geardefensive.memo" + title = "Defensive Gear and You" + path = "lore_entries/security/defensivegearandyou.txt" + +/datum/lore_entry/security/sop + name = "standard_operating_procedure.txt" + title = "Standard Operating Procedure" + path = "lore_entries/security/wip.txt" + +/datum/lore_entry/security/lowcrime + name = "low_infractions.txt" + title = "Minor Infractions" + path = "lore_entries/security/wip.txt" + +/datum/lore_entry/security/mediumcrime + name = "medium_infractions.txt" + title = "Medium-risk Infractions" + path = "lore_entries/security/wip.txt" + +/datum/lore_entry/security/highcrime + name = "high_infractions.txt" + title = "Dangerous Infractions" + path = "lore_entries/security/wip.txt" + +/datum/lore_entry/security/deltacrime + name = "delta_infractions.txt" + title = "Zealot-class Notice and Warning" + path = "lore_entries/security/wip.txt" \ No newline at end of file diff --git a/lore_entries/security/advancedgearandyou.txt b/lore_entries/security/advancedgearandyou.txt new file mode 100644 index 00000000..7949e97b --- /dev/null +++ b/lore_entries/security/advancedgearandyou.txt @@ -0,0 +1 @@ +SYSADMIN -> security@frontier.infolink.kin. Advanced Gear and You ` When threats start to intensify, standard gear may not work. As Layenia station is a recycled facility from NT subsystems, you don't have access to Holostasis Projectors and Blaze Javelins- however, there should be some noteworthy items in the armory should the threat level support it. ` ` DRAGnet ` A strong, versatile tool which is capable of teleporting those left within it's field once the charge is complete. This mode is semi-useless, however, it has an alternative fire which shoots an energy snare and trap. If it directly hits someone, it knocks them down and ties their legs together, making movement difficult. If it misses, it will deploy a trap on the ground that will snare anyone who steps on it, even yourself. Caution advised; please remember that this item may not work on animals and silicons. ` ` Blaster carbine ` An outdated and unreliable laser weapon to the likes of Kinaris's own, however it serves it's own purpose in light engagements. It's main firing mode is a disabler bolt of energy that is capable of slowly draining the stamina of a target. The alternate fire mode heats up the lasers intensely, causing them to be that much more lethal and burning. Avoid using this mode when unnecessary. Needs to be recharged after energy capacity is lost. ` ` Blaster rifle ` Similar to the carbine, this is a very old model of laser weaponry. However, it lacks a nonlethal option and has only one lethal firing mode. Because of this, it has a higher energy capacity and damage rate. Needs to be recharged after energy capacity is lost. ` ` Riot shotgun ` A pump-action shotgun that is not automatic. Load a round in, rack the shotgun, turn off the safety, and fire. Ammo types can be nonlethal beanbag slugs, which still do a slight amount of bruising, but aim to disable effectively with sheer stopping power compared to it's lethal counterpart. This weapon has a maximum ammo capacity of 6 at a time. Not to be confused with automatic combat shotguns, which don't need to be racked after it's been fired. ` ` Riot armor and shields ` A very bulky suit that is capable of stopping most blunt force in it's tracks. Best used with a shield, but it overall slows the wearer down. Not very worth it; you'd be better off trying not to tank damage. ` ` Reflector vest ` A worn vest with a toggle that is capable of reflecting energy projectiles from once they came. Ensure that the toggle is turned on, and the vest is applied properly. This will not protect against ballistics and melee. ` ` Ion rifle ` A bulky weapon that is capable of shooting ionized energy blasts that can disrupt mechanical subsystems and disable them in an area of effect. This is especially effective against cyborgs and mechs, as well as an augmented crew member. Otherwise, this may cause a lot of damage to the station itself. ` ` Security temperature gun ` A single-fire weapon that can blast either freezing-cold or blazing-hot waves of energy onto a target. This is especially effective against animals that struggle against extreme temperatures, such as using the cold mode on a slime. Be wary that it is lethal. \ No newline at end of file diff --git a/lore_entries/security/basicgearandyou.txt b/lore_entries/security/basicgearandyou.txt new file mode 100644 index 00000000..43f1da58 --- /dev/null +++ b/lore_entries/security/basicgearandyou.txt @@ -0,0 +1 @@ +SYSADMIN -> security@frontier.infolink.kin. Basic Gear and You ` Not only must an SSP know what mindset to be in, they must also recognize the effects of their gear and items, as well as when they're needed. This section will cover some items, and how they can be useful given certain circumstances. Note that Layenia Station is using much older, and has access to less state-of-the-art technology, as it is using recycled Nanotrasen subsystems. ` ` Handcuffs ` A tool utilized for restraining criminals on the wrists. Apply on both wrists, fasten and lock. These should only be used when transporting prisoners, NOT when they're in a cell. Can only be applied on creatures with applicable limbs. ` ` Flash ` A device with a bright bulb, used to temporarily disorient visuals, both on cyborgs and living creatures. While harmless, extended use may result in eye damage. Using in hand will result in an area of flash, while using against another will flash that specific being. Useless against anything with flash protection ` ` Pepperspray ` A small nozzle used to spray irritant chemicals, most effective when used on the eyes of a living being who is not wearing eye protection. Otherwise, this item services as nothing more than an irritating spray. Can be refilled. ` ` Stunbaton ` An electrically charged rod with a prod on the end, which can be activated to deal incredible amounts of stamina drain. This is your primary melee-ranged tool, which should be applied to criminals approximately four times (size may vary, or until target is exhausted) followed up by handcuffing. Do not hit harmfully with this without just cause; requires a recharge after frequent use, and can be upgraded with better power cells. ` ` Flashbang ` A chemical payload that will prime upon activation, and will explode into a disorienting blast after a few seconds. Requires flash and ear protection to completely nullify it's effects, but being too close can override that. This is a prime tool for crowd control, and should only be used when it's absolutely necessary. Effective for dispersing crowds. ` ` Taser ` A handheld sidearm that is capable of launching an electric volt of energy which can temporarily stun and disarm most attackers via electric shock to the muscles. It can have it's firing mode switched to a disabler mode, which is capable of draining the stamina of the target, without the stun. Use only on creatures that aren't immune. \ No newline at end of file diff --git a/lore_entries/security/defensivegearandyou.txt b/lore_entries/security/defensivegearandyou.txt new file mode 100644 index 00000000..c789909f --- /dev/null +++ b/lore_entries/security/defensivegearandyou.txt @@ -0,0 +1 @@ +SYSADMIN - > security@frontier.infolink.kin Defensive Gear and You ` Sometimes, situations may call for a more defensive approach, especially when asset protection is kept in-mind. Layenia has access to some light defensive armaments within the station; it is not equipped with defensive battery cannons on the exterior. ` ` Barrier grenade ` These grenades are capable of deploying a barrier on it's location after explosion. The barrier itself cannot be clambered over, and can take quite a beating before it goes down. Effective for narrowing passageways. ` ` Portable flasher ` A bulky unit which can be bolted to the floor with a wrench, and will flash any fast-moving personnel within it's radius. Will not flash if people are walking by it. ` ` Security holobarrier projector ` A handheld device which can project a hardlight barrier- three total- at a location of choosing. It can be dispelled easily with the same device as well. \ No newline at end of file diff --git a/lore_entries/security/introduction.txt b/lore_entries/security/introduction.txt new file mode 100644 index 00000000..f8926f32 --- /dev/null +++ b/lore_entries/security/introduction.txt @@ -0,0 +1 @@ +SYSADMIN -> security@frontier.infolink.kin. Introduction ` The act of securing and protection any Kinaris asset is not an easy one. Difficulty can range from monotanous and dreary, to outright hellish and overwhelming. It is a SSP's job to ensure that regardless of circumstance, they are both mentally and physically equipped to deal with any situation that may come up. This section will cover the very basics of what you need to know to be educated in the instance of standard security work. ` To act as a SSP, the first step would be to think like one. Sentient Security Personnel are equipped with a plethora of both resources and gear to apprehend criminals, as well an array of support from the station and heads alike. Do not betray your station's trust. Your job as an SSP should be- above all- securing peace. Before anything, you should always consider the outcome of your actions, and others' as well. A responsible SSP would understand when a good time to use a baton is, and when words will allow a better outcome. Lack of this proper resolve may result in uneasiness around your workplace, both from your team and those you are to protect. This is not only grounds for demotion when abuse is repeated, but may result in an abusive SSP's inevitable lynching. These effects can snowball into much worse; so ensure that you and your team are well-communicative, and are proper in terms of gear use and protocol. Catch problems at the source. Think like a proper SSP. ` Following up a proper mindset, it is important to note the infinite complexity that situations may involve themselves in. A responsible SSP will always keep in mind truths and lies when proposed with a situation, and must acknowledge that their guess can be wrong as well. Following Kinaris Security Protocol to the letter may also be problematic, due to the malleable nature that people can involve themselves within. Leeway is important to give when necessary, and a firm hand provided otherwise. Know when to apply proper protocol, and when to give leeway. \ No newline at end of file diff --git a/lore_entries/security/usageandterms.txt b/lore_entries/security/usageandterms.txt new file mode 100644 index 00000000..4291ee2d --- /dev/null +++ b/lore_entries/security/usageandterms.txt @@ -0,0 +1 @@ +SYSADMIN -> security@frontier.infolink.kin. Usage and Terms ` This specific protocol terminal refers to the processes and operation of Sentient Security Personnel (SSP) in regards to their workplace and behavior within reasonable operating conditions. The usage of this terminal is for both educational and referral purposes. Punishments given out by SSP should be based upon the data within this terminal. Note that these should be a baseline, and following to the letter may or may not be preffered. Case-by-case basis analysis is encouraged. \ No newline at end of file diff --git a/lore_entries/security/wip.txt b/lore_entries/security/wip.txt new file mode 100644 index 00000000..3c829afd --- /dev/null +++ b/lore_entries/security/wip.txt @@ -0,0 +1 @@ +SYSADMIN -> security@frontier.infolink.kin. Unauthorized Access ` File is currently undergoing approval via your local Central Command authority. Please seek previous methods for this specific file. \ No newline at end of file From c6a59c5b981708d5f534ab9d0bbe69bbdec1d23c Mon Sep 17 00:00:00 2001 From: Dahlular Date: Tue, 6 Jul 2021 08:21:37 -0600 Subject: [PATCH 11/21] Security infolink terminals on map --- _maps/map_files/LayeniaStation/LayeniaStation.dmm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_maps/map_files/LayeniaStation/LayeniaStation.dmm b/_maps/map_files/LayeniaStation/LayeniaStation.dmm index 56a6154a..0e119361 100644 --- a/_maps/map_files/LayeniaStation/LayeniaStation.dmm +++ b/_maps/map_files/LayeniaStation/LayeniaStation.dmm @@ -1603,7 +1603,7 @@ "evB" = (/obj/machinery/door/window/eastleft{dir = 2; name = "Monkey Pen"; req_one_access_txt = "9"},/obj/machinery/atmospherics/components/unary/vent_pump/on/layer3{name = "air vent"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{name = "scrubbers pipe"},/turf/open/floor/grass,/area/medical/genetics) "evI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/closed/wall/r_wall,/area/science/mixing) "evK" = (/obj/machinery/light{pixel_y = -1},/turf/open/floor/plasteel,/area/security/prison) -"evQ" = (/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/turf/open/floor/plasteel/dark,/area/security/brig) +"evQ" = (/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/machinery/computer/lore_terminal/security,/turf/open/floor/plasteel/dark,/area/security/brig) "evR" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/incinerator_output{dir = 8},/turf/open/floor/engine,/area/maintenance/disposal/incinerator) "evT" = (/obj/structure/cable{icon_state = "0-4"},/obj/machinery/power/apc{areastring = "/area/maintenance/solars/port/aft"; dir = 8; name = "Port Quarter Solar APC"; pixel_x = -25; pixel_y = 3},/turf/open/floor/plating,/area/maintenance/solars/port/aft) "evV" = (/obj/structure/trash_pile,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/maintenance/fore) @@ -3526,7 +3526,7 @@ "jUE" = (/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/obj/effect/turf_decal/tile/purple{dir = 8},/turf/open/floor/plasteel/white/corner,/area/hallway/primary/aft) "jUP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{dir = 8; name = "air supply pipe"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{dir = 4; name = "scrubbers pipe"},/obj/structure/cable{icon_state = "4-8"},/obj/structure/cable{icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "2-4"},/turf/open/floor/plasteel/white,/area/medical/genetics) "jUT" = (/obj/structure/table,/obj/item/stack/ore/iron,/turf/open/floor/plating,/area/maintenance/starboard) -"jUU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{dir = 6; name = "air supply pipe"},/turf/open/floor/plasteel/dark,/area/security/prison) +"jUU" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{dir = 6; name = "air supply pipe"},/obj/machinery/computer/lore_terminal/security,/turf/open/floor/plasteel/dark,/area/security/prison) "jUY" = (/turf/open/floor/plating/asteroid/layenia,/area/layenia/cloudlayer) "jVg" = (/obj/structure/railing{dir = 8},/turf/open/floor/plasteel/dark,/area/hallway/primary/starboard) "jVq" = (/obj/effect/spawner/structure/window,/obj/machinery/door/firedoor,/turf/open/floor/plating,/area/medical/chemistry) @@ -4361,7 +4361,7 @@ "mwm" = (/obj/machinery/atmospherics/pipe/manifold/general/visible{dir = 8},/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/turf_decal/tile/neutral{dir = 1},/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/landmark/start/scientist,/turf/open/floor/plasteel/dark,/area/science/mixing) "mwz" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access_txt = "25"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{name = "scrubbers pipe"},/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{name = "air supply pipe"},/obj/structure/cable{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/dark,/area/maintenance/fore/secondary) "mwC" = (/obj/effect/turf_decal/tile/blue{dir = 8},/obj/effect/turf_decal/tile/blue{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{name = "air supply pipe"},/obj/structure/disposalpipe/segment{dir = 4},/obj/item/radio/intercom{frequency = 1485; name = "Station Intercom (Medbay)"; pixel_x = -30},/turf/open/floor/plasteel/white,/area/medical/sleeper) -"mwT" = (/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{name = "air scrubber"},/turf/open/floor/plasteel/dark/side,/area/security/main) +"mwT" = (/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/neutral{dir = 8},/obj/effect/turf_decal/tile/neutral,/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{name = "air scrubber"},/obj/machinery/computer/lore_terminal/security,/turf/open/floor/plasteel/dark/side,/area/security/main) "mwV" = (/turf/open/floor/plasteel/stairs/medium,/area/hallway/primary/port) "mxe" = (/obj/structure/closet/secure_closet/detective,/turf/open/floor/wood,/area/security/detectives_office) "mxg" = (/obj/machinery/light{pixel_y = -1},/turf/open/chasm/cloud,/area/layenia/cloudlayer) @@ -8537,7 +8537,7 @@ "xxr" = (/obj/effect/turf_decal/stripes/line,/obj/docking_port/stationary/random{dir = 2; id = "pod_lavaland4"; name = "lavaland"},/turf/open/indestructible/concrete,/area/layenia/cloudlayer) "xxA" = (/turf/open/floor/plasteel/yellowsiding{dir = 4},/area/maintenance/fore) "xxF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer3{dir = 8; name = "air supply pipe"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{dir = 4; name = "scrubbers pipe"},/turf/open/floor/plasteel,/area/security/main) -"xxL" = (/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/red{dir = 1},/obj/machinery/computer/lore_terminal,/turf/open/floor/plasteel{icon_state = "floor_plate"},/area/security/brig) +"xxL" = (/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/red{dir = 1},/obj/machinery/computer/lore_terminal/security,/turf/open/floor/plasteel{icon_state = "floor_plate"},/area/security/brig) "xxU" = (/obj/item/twohanded/required/fuel_rod,/obj/effect/turf_decal/stripes/line{dir = 4},/turf/open/pool,/area/engine/engineering/reactor_core) "xxV" = (/obj/structure/closet/secure_closet/medical1,/obj/effect/turf_decal/stripes/line{dir = 1},/obj/machinery/light{pixel_y = -1},/turf/open/floor/plasteel/dark,/area/gateway) "xxW" = (/turf/open/floor/plasteel/stairs/medium{dir = 4},/area/security/main) From 01d21b9b6645bd75763f7714e31c6e9cff402e75 Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 6 Jul 2021 15:04:00 -0300 Subject: [PATCH 12/21] Sauna --- .../items/stacks/sheets/sheet_types.dm | 3 +- .../game/objects/structures/sauna_oven.dm | 117 ++++++++++++++++++ .../icons/obj/structures/sauna_oven.dmi | Bin 0 -> 902 bytes tgstation.dme | 1 + 4 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 hyperstation/code/game/objects/structures/sauna_oven.dm create mode 100644 hyperstation/icons/obj/structures/sauna_oven.dmi diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 8f8afa9b..c86debe7 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -223,6 +223,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("sauna oven", /obj/structure/sauna_oven, 30, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("dog bed", /obj/structure/bed/dogbed, 10, time = 10, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE),\ @@ -900,4 +901,4 @@ GLOBAL_LIST_INIT(plaswood_recipes, list ( \ return ..() /obj/item/stack/sheet/mineral/plaswood/fifty - amount = 50 \ No newline at end of file + amount = 50 diff --git a/hyperstation/code/game/objects/structures/sauna_oven.dm b/hyperstation/code/game/objects/structures/sauna_oven.dm new file mode 100644 index 00000000..c1186178 --- /dev/null +++ b/hyperstation/code/game/objects/structures/sauna_oven.dm @@ -0,0 +1,117 @@ +#define SAUNA_H2O_TEMP T20C + 20 +#define SAUNA_LOG_FUEL 150 +#define SAUNA_PAPER_FUEL 5 +#define SAUNA_MAXIMUM_FUEL 3000 +#define SAUNA_WATER_PER_WATER_UNIT 5 + +/obj/structure/sauna_oven + name = "sauna oven" + desc = "A modest sauna oven with rocks. Add some fuel, pour some water and enjoy the moment." + icon = 'hyperstation/icons/obj/structures/sauna_oven.dmi' + icon_state = "sauna_oven" + density = TRUE + anchored = TRUE + resistance_flags = FIRE_PROOF + var/lit = FALSE + var/fuel_amount = 0 + var/water_amount = 0 + +/obj/structure/sauna_oven/examine(mob/user) + . = ..() + . += "The rocks are [water_amount ? "moist" : "dry"]." + . += "There's [fuel_amount ? "some fuel" : "no fuel"] in the oven." + +/obj/structure/sauna_oven/Destroy() + if(lit) + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/structure/sauna_oven/attack_hand(mob/user) + . = ..() + if(.) + return + if(lit) + lit = FALSE + STOP_PROCESSING(SSobj, src) + user.visible_message("[user] turns on [src].", "You turn on [src].") + else if (fuel_amount) + lit = TRUE + START_PROCESSING(SSobj, src) + user.visible_message("[user] turns off [src].", "You turn off [src].") + update_icon() + +/obj/structure/sauna_oven/update_overlays() + . = ..() + if(lit) + . += "sauna_oven_on_overlay" + +/obj/structure/sauna_oven/update_icon() + ..() + icon_state = "[lit ? "sauna_oven_on" : initial(icon_state)]" + +/obj/structure/sauna_oven/attackby(obj/item/T, mob/user) + if(T.tool_behaviour == TOOL_WRENCH) + to_chat(user, "You begin to deconstruct [src].") + if(T.use_tool(src, user, 60, volume=50)) + to_chat(user, "You successfully deconstructed [src].") + new /obj/item/stack/sheet/mineral/wood(get_turf(src), 30) + qdel(src) + + else if(istype(T, /obj/item/reagent_containers)) + var/obj/item/reagent_containers/reagent_container = T + if(!reagent_container.is_open_container()) + return ..() + if(reagent_container.reagents.has_reagent(/datum/reagent/water)) + reagent_container.reagents.remove_reagent(/datum/reagent/water, 5) + user.visible_message("[user] pours some \ + water into [src].", "You pour \ + some water to [src].") + water_amount += 5 * SAUNA_WATER_PER_WATER_UNIT + else + to_chat(user, "There's no water in [reagent_container]") + + else if(istype(T, /obj/item/stack/sheet/mineral/wood)) + var/obj/item/stack/sheet/mineral/wood/wood = T + if(fuel_amount > SAUNA_MAXIMUM_FUEL) + to_chat(user, "You can't fit any more of [T] in [src]!") + return FALSE + fuel_amount += SAUNA_LOG_FUEL * wood.amount + wood.use(wood.amount) + user.visible_message("[user] tosses some \ + wood into [src].", "You add \ + some fuel to [src].") + return TRUE + else if(istype(T, /obj/item/paper_bin)) + var/obj/item/paper_bin/paper_bin = T + user.visible_message("[user] throws [T] into \ + [src].", "You add [T] to [src].\ + ") + fuel_amount += SAUNA_PAPER_FUEL * paper_bin.total_paper + qdel(paper_bin) + return TRUE + else if(istype(T, /obj/item/paper)) + user.visible_message("[user] throws [T] into \ + [src].", "You throw [T] into [src].\ + ") + fuel_amount += SAUNA_PAPER_FUEL + qdel(T) + return TRUE + return ..() + +/obj/structure/sauna_oven/process() + if(water_amount) + water_amount-- + var/turf/pos = get_turf(src) + if(pos) + pos.atmos_spawn_air("water_vapor=10;TEMP=[SAUNA_H2O_TEMP]") + fuel_amount-- + if(fuel_amount <= 0) + lit = FALSE + STOP_PROCESSING(SSobj, src) + update_icon() + +#undef SAUNA_H2O_TEMP +#undef SAUNA_LOG_FUEL +#undef SAUNA_PAPER_FUEL +#undef SAUNA_MAXIMUM_FUEL +#undef SAUNA_WATER_PER_WATER_UNIT diff --git a/hyperstation/icons/obj/structures/sauna_oven.dmi b/hyperstation/icons/obj/structures/sauna_oven.dmi new file mode 100644 index 0000000000000000000000000000000000000000..fb0871ca9196734183821428b0ccf27fb7b9d868 GIT binary patch literal 902 zcmV;119|+3P)#oD2-({LLt(Fb9N*gN7>}^00001bW%=J06^y0W&i*HoO)DP zbVOxyV{&P5bZKvH004NLQ&wi$yG%qnezbrLRiHkEOv#1y-XvoExR+N~V3SnbW8lRsB zqKk48E3xY`2a2WwWkJF^NRW%OD78E@F9nam*bOvB7-+0xtYd~|l(K@Wp9|Rk0B$o& zH>LXZ-v9stI7vi7RA_M8cu z1W^Ujbu1R^U+AT%mH@8>H3bj?O9~+|908z|(pm~25K3wdZ?tIK146-eX%J;w0EGll zRA7T3g_KPJq*5CLHmnc(wg6joDb;!&AVu3DIQly9_Fm9yOMs7pngVG3slPsT{L)PU zcnA(3g3`ZXOMw1cTj){!V|4RPv`tncwv? z&5spif1f{&DM9W}Q%WE+fb%)8(BI{cV@{Cz)07j$0D~%MXy8ysq_W0OH|wtxp3G53g%|8i0r3@F5`9 z57hdksPzN2J`F&uAE@<7J$?R9_P`_75A66fzysC~?D@9<)UF@c^+`Q_{!aoteg01p c95(;|1s9oyPQrjUF#rGn07*qoM6N<$f^a5_&;S4c literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index 508e8ff7..115184bd 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3072,6 +3072,7 @@ #include "hyperstation\code\game\objects\items\cosmetics.dm" #include "hyperstation\code\game\objects\items\storage\big_bag.dm" #include "hyperstation\code\game\objects\structures\ghost_role_spawners.dm" +#include "hyperstation\code\game\objects\structures\sauna_oven.dm" #include "hyperstation\code\gamemode\traitor_lewd.dm" #include "hyperstation\code\gamemode\traitor_thief.dm" #include "hyperstation\code\gamemode\werewolf\werewolf.dm" From 254bc82b7c14eb397061d9b2b24fb00b27de33d8 Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 6 Jul 2021 15:15:52 -0300 Subject: [PATCH 13/21] Missed two returns. --- hyperstation/code/game/objects/structures/sauna_oven.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hyperstation/code/game/objects/structures/sauna_oven.dm b/hyperstation/code/game/objects/structures/sauna_oven.dm index c1186178..64727606 100644 --- a/hyperstation/code/game/objects/structures/sauna_oven.dm +++ b/hyperstation/code/game/objects/structures/sauna_oven.dm @@ -56,6 +56,7 @@ to_chat(user, "You successfully deconstructed [src].") new /obj/item/stack/sheet/mineral/wood(get_turf(src), 30) qdel(src) + return TRUE else if(istype(T, /obj/item/reagent_containers)) var/obj/item/reagent_containers/reagent_container = T @@ -67,8 +68,10 @@ water into [src].", "You pour \ some water to [src].") water_amount += 5 * SAUNA_WATER_PER_WATER_UNIT + return TRUE else to_chat(user, "There's no water in [reagent_container]") + return FALSE else if(istype(T, /obj/item/stack/sheet/mineral/wood)) var/obj/item/stack/sheet/mineral/wood/wood = T From 5ad4b776e57f54d0def146af6a540c3483fd08f7 Mon Sep 17 00:00:00 2001 From: Kabra_men <46802162+Kabramen@users.noreply.github.com> Date: Tue, 6 Jul 2021 16:57:27 -0300 Subject: [PATCH 14/21] new statue, dungeon and some necessary changes in stargate --- _maps/RandomZLevels/away_mission/stargate.dmm | 608 ++++++++++-------- code/game/objects/structures/statues.dm | 8 + icons/obj/statue_egypty.dmi | Bin 0 -> 30037 bytes 3 files changed, 357 insertions(+), 259 deletions(-) create mode 100644 icons/obj/statue_egypty.dmi diff --git a/_maps/RandomZLevels/away_mission/stargate.dmm b/_maps/RandomZLevels/away_mission/stargate.dmm index 2c3b91eb..093e9616 100644 --- a/_maps/RandomZLevels/away_mission/stargate.dmm +++ b/_maps/RandomZLevels/away_mission/stargate.dmm @@ -2,14 +2,14 @@ "ab" = (/turf/closed/mineral/random/labormineral/jungle,/area/awaymission/stargate/building/mountain) "ac" = (/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "ad" = (/obj/structure/table/wood,/obj/item/reagent_containers/food/drinks/trophy,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"ae" = (/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) +"ae" = (/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) "af" = (/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/chicken,/turf/open/floor/grass,/area/awaymission/stargate) "ag" = (/obj/structure/flora/rock/jungle,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) -"ah" = (/obj/item/storage/firstaid/regular,/turf/open/floor/wood,/area/awaymission/stargate/building) +"ah" = (/obj/item/storage/firstaid/regular,/obj/structure/table/wood,/turf/open/floor/wood,/area/awaymission/stargate/building) "ai" = (/obj/structure/rack/shelf,/obj/item/clothing/suit/armor/riot/knight/yellow,/obj/item/shield/riot/tower,/obj/item/clothing/head/helmet/knight/yellow,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aj" = (/turf/closed/indestructible/necropolis,/area/awaymission/stargate/building/flesh) "ak" = (/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh) -"al" = (/obj/structure/destructible/cult/talisman,/obj/item/dragons_blood,/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh) +"al" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "am" = (/mob/living/simple_animal/hostile/carrion,/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh) "an" = (/obj/structure/table/wood,/obj/item/nullrod/egyptian,/turf/open/floor/wood,/area/awaymission/stargate/building) "ao" = (/obj/item/bedsheet/cult,/obj/effect/mob_spawn/human/villager,/turf/open/floor/wood,/area/awaymission/stargate/building) @@ -20,17 +20,15 @@ "at" = (/obj/item/bedsheet/black,/obj/effect/mob_spawn/human/villager,/turf/open/floor/wood,/area/awaymission/stargate/building) "au" = (/obj/item/bedsheet/red,/obj/effect/mob_spawn/human/villager,/turf/open/floor/wood,/area/awaymission/stargate/building) "av" = (/obj/machinery/aug_manipulator,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) -"aw" = (/mob/living/simple_animal/hostile/netherworld/migo,/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building) -"ax" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"ay" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"az" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aw" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) +"ay" = (/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"az" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aA" = (/obj/item/clothing/mask/gas,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aB" = (/obj/item/clothing/shoes/sneakers/black,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aC" = (/obj/structure/closet/supplypod/centcompod,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aD" = (/obj/item/clothing/gloves/color/fyellow/old,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aE" = (/obj/item/clothing/under/color/grey,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aF" = (/obj/item/twohanded/spear,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"aG" = (/obj/item/gun/ballistic/shotgun/riot,/obj/item/gun/ballistic/shotgun/riot{pixel_x = 3; pixel_y = -3},/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aH" = (/obj/structure/table/wood,/obj/machinery/microwave,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aI" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aJ" = (/obj/structure/table/wood,/obj/item/kitchen/knife,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) @@ -42,29 +40,29 @@ "aP" = (/obj/structure/closet/crate/wooden,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aQ" = (/obj/machinery/light{dir = 8},/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "aR" = (/obj/structure/bed,/obj/item/bedsheet/brown,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"aS" = (/obj/structure/rack/shelf,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/obj/item/ammo_box/magazine/wt550m9/wtrubber,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"aT" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 1},/area/awaymission/stargate) -"aU" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"aS" = (/obj/structure/rack/shelf,/obj/item/gun/ballistic/shotgun/riot,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"aT" = (/turf/open/floor/cobble/corner{dir = 1; icon_state = "cobble_corner"},/area/awaymission/stargate) +"aU" = (/turf/open/floor/cobble/side{dir = 1; icon_state = "cobble_side"},/area/awaymission/stargate) "aV" = (/turf/open/floor/cobble/corner,/area/awaymission/stargate) "aW" = (/obj/structure/flora/rock,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "aX" = (/turf/open/floor/cobble,/area/awaymission/stargate) -"aY" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) -"aZ" = (/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"aY" = (/turf/open/floor/cobble/side{dir = 4; icon_state = "cobble_side"},/area/awaymission/stargate) +"aZ" = (/turf/open/floor/cobble/side{dir = 8; icon_state = "cobble_side"},/area/awaymission/stargate) "ba" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/cobble,/area/awaymission/stargate) -"bb" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 8},/area/awaymission/stargate) +"bb" = (/turf/open/floor/cobble/corner{dir = 8; icon_state = "cobble_corner"},/area/awaymission/stargate) "bc" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas/clown_hat,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "bd" = (/turf/open/floor/cobble/side,/area/awaymission/stargate) -"be" = (/turf/open/floor/cobble/corner{icon_state = "cobble_corner"; dir = 4},/area/awaymission/stargate) -"bf" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"be" = (/turf/open/floor/cobble/corner{dir = 4; icon_state = "cobble_corner"},/area/awaymission/stargate) +"bf" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{dir = 8; icon_state = "cobble_side"},/area/awaymission/stargate) "bg" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble,/area/awaymission/stargate) -"bh" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) +"bh" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{dir = 4; icon_state = "cobble_side"},/area/awaymission/stargate) "bi" = (/obj/structure/flora/grass/jungle,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "bj" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble,/area/awaymission/stargate) "bk" = (/obj/effect/landmark/awaystart,/turf/open/floor/cobble,/area/awaymission/stargate) "bl" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble/side,/area/awaymission/stargate) "bm" = (/obj/item/lighter,/turf/open/floor/cobble,/area/awaymission/stargate) "bn" = (/obj/item/grown/log/tree,/turf/open/floor/cobble,/area/awaymission/stargate) -"bo" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"bo" = (/mob/living/simple_animal/butterfly,/turf/open/floor/cobble/side{dir = 8; icon_state = "cobble_side"},/area/awaymission/stargate) "bp" = (/obj/structure/bonfire,/turf/open/floor/cobble,/area/awaymission/stargate) "bq" = (/obj/structure/barricade/sandbags,/obj/structure/barricade/sandbags,/turf/open/floor/cobble,/area/awaymission/stargate) "br" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble,/area/awaymission/stargate) @@ -75,48 +73,49 @@ "bw" = (/obj/machinery/door/airlock/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "bx" = (/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "by" = (/turf/closed/wall/mineral/abductor,/area/awaymission/stargate/building) -"bz" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"bz" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side{dir = 8; icon_state = "cobble_side"},/area/awaymission/stargate) "bA" = (/obj/effect/decal/cleanable/blood/gibs/human/body,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"bB" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) +"bB" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side{dir = 4; icon_state = "cobble_side"},/area/awaymission/stargate) "bC" = (/obj/machinery/hydroponics/soil,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) -"bD" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) -"bE" = (/mob/living/simple_animal/hostile/netherworld,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"bF" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 8},/area/awaymission/stargate) +"bD" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble/side{dir = 8; icon_state = "cobble_side"},/area/awaymission/stargate) +"bE" = (/obj/machinery/gateway{dir = 9},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"bF" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble/side{dir = 8; icon_state = "cobble_side"},/area/awaymission/stargate) "bG" = (/obj/structure/fence/door,/turf/open/floor/cobble,/area/awaymission/stargate) "bH" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble,/area/awaymission/stargate) -"bI" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) -"bJ" = (/obj/machinery/light{dir = 8},/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"bK" = (/obj/structure/table/abductor,/obj/item/surgical_drapes,/obj/item/scalpel/alien,/obj/item/cautery/alien,/obj/item/circular_saw/alien,/obj/item/hemostat/alien,/obj/item/retractor/alien,/obj/item/surgicaldrill/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bI" = (/obj/structure/fence{dir = 4},/turf/open/floor/cobble/side{dir = 4; icon_state = "cobble_side"},/area/awaymission/stargate) +"bJ" = (/obj/machinery/gateway{dir = 1},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"bK" = (/obj/machinery/gateway{dir = 5},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "bL" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/chem_dispenser/drinks,/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) -"bM" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"bN" = (/obj/structure/chair/stool/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"bO" = (/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bM" = (/obj/machinery/gateway{dir = 8},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"bN" = (/obj/machinery/gateway/centeraway,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"bO" = (/obj/machinery/gateway{dir = 4},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "bP" = (/obj/structure/chair/sofa{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "bQ" = (/obj/effect/decal/remains/robot,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "bR" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate) "bS" = (/obj/structure/flora/junglebush/large,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) -"bT" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"bT" = (/obj/machinery/gateway{dir = 10},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "bU" = (/obj/structure/door_assembly/door_assembly_abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"bV" = (/obj/effect/decal/remains/xeno,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"bW" = (/obj/effect/decal/cleanable/semen,/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"bX" = (/obj/item/clothing/suit/space/hardsuit/lavaknight,/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh) -"bY" = (/obj/machinery/abductor/gland_dispenser,/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building) -"bZ" = (/obj/structure/reagent_dispensers/keg/semen,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) -"ca" = (/obj/machinery/abductor/experiment{team_number = 100},/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building) +"bV" = (/obj/machinery/gateway,/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"bW" = (/obj/machinery/gateway{dir = 6},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"bX" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) +"bY" = (/obj/structure/barricade/wooden/crude,/obj/machinery/door/airlock/wood,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"bZ" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"ca" = (/obj/structure/barricade/sandbags,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "cb" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble,/area/awaymission/stargate) "cc" = (/turf/open/floor/concrete,/area/awaymission/stargate) "cd" = (/turf/open/floor/concrete/smooth,/area/awaymission/stargate) +"ce" = (/mob/living/simple_animal/hostile/carrion,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "cf" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble,/area/awaymission/stargate) "cg" = (/obj/effect/decal/cleanable/blood/gibs/human,/turf/open/floor/cobble,/area/awaymission/stargate) -"ch" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) -"ci" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"ch" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/cobble/side{dir = 1; icon_state = "cobble_side"},/area/awaymission/stargate) +"ci" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side{dir = 1; icon_state = "cobble_side"},/area/awaymission/stargate) "cj" = (/obj/machinery/door/airlock/wood/glass,/obj/structure/barricade/wooden/crude,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"ck" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) -"cl" = (/obj/effect/decal/remains/human,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) -"cm" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) -"cn" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 1},/area/awaymission/stargate) +"ck" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/cobble/side{dir = 1; icon_state = "cobble_side"},/area/awaymission/stargate) +"cl" = (/obj/effect/decal/remains/human,/turf/open/floor/cobble/side{dir = 1; icon_state = "cobble_side"},/area/awaymission/stargate) +"cm" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/cobble/side{dir = 1; icon_state = "cobble_side"},/area/awaymission/stargate) +"cn" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/cobble/side{dir = 1; icon_state = "cobble_side"},/area/awaymission/stargate) "co" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble/corner,/area/awaymission/stargate) -"cp" = (/mob/living/simple_animal/hostile/hs13mimic,/turf/open/floor/grass,/area/awaymission/stargate) +"cp" = (/obj/structure/barricade/sandbags,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "cq" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble,/area/awaymission/stargate) "cr" = (/obj/effect/decal/cleanable/blood/gibs/torso,/turf/open/floor/cobble,/area/awaymission/stargate) "cs" = (/turf/open/floor/wood,/area/awaymission/stargate/building) @@ -125,9 +124,9 @@ "cv" = (/obj/structure/closet/crate,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/obj/item/stack/ore/bananium,/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building) "cw" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/cobble,/area/awaymission/stargate) "cx" = (/obj/structure/table/reinforced,/obj/item/robot_module/clown,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) -"cy" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer,/turf/open/floor/cobble,/area/awaymission/stargate) -"cz" = (/mob/living/simple_animal/hostile/netherworld/migo,/turf/open/floor/cobble,/area/awaymission/stargate) -"cB" = (/obj/structure/statue/bananium/clown,/turf/open/floor/cobble/side{icon_state = "cobble_side"; dir = 4},/area/awaymission/stargate) +"cy" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"cz" = (/turf/open/floor/mineral/diamond,/area/awaymission/stargate/building) +"cB" = (/obj/structure/statue/bananium/clown,/turf/open/floor/cobble/side{dir = 4; icon_state = "cobble_side"},/area/awaymission/stargate) "cD" = (/obj/structure/barricade/sandbags,/turf/open/floor/cobble/side,/area/awaymission/stargate) "cE" = (/obj/structure/barricade/wooden,/turf/open/floor/cobble/side,/area/awaymission/stargate) "cF" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/cobble/side,/area/awaymission/stargate) @@ -139,13 +138,18 @@ "db" = (/obj/structure/table/wood,/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/wood,/area/awaymission/stargate/building) "dt" = (/turf/closed/wall/mineral/bananium,/area/awaymission/stargate/building) "dz" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/open/floor/wood,/area/awaymission/stargate/building) -"dO" = (/obj/item/gun/ballistic/shotgun/riot,/obj/item/gun/ballistic/shotgun/riot,/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"dO" = (/obj/item/gun/ballistic/shotgun/riot,/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "dQ" = (/obj/structure/flora/junglebush/c,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "dT" = (/obj/machinery/vending/hydronutrients,/turf/open/floor/wood,/area/awaymission/stargate/building) "ea" = (/obj/machinery/computer/rdconsole/core,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"ec" = (/obj/structure/reagent_dispensers/keg/semen,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "ee" = (/obj/structure/chair/wood{dir = 1},/turf/open/floor/wood,/area/awaymission/stargate/building) "el" = (/obj/structure/flora/rock/jungle,/turf/open/floor/grass,/area/awaymission/stargate) +"es" = (/obj/machinery/light{dir = 4},/obj/structure/flora/junglebush,/turf/open/floor/grass,/area/awaymission/stargate/building) "et" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"eC" = (/obj/structure/statue/sandstone/abs,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"eG" = (/obj/structure/table/wood/fancy/black,/obj/item/stack/sheet/mineral/diamond{amount = 2},/turf/open/floor/mineral/diamond,/area/awaymission/stargate/building) +"eI" = (/obj/machinery/light,/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate/building) "eJ" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/open/floor/wood,/area/awaymission/stargate/building) "eL" = (/obj/structure/kitchenspike,/turf/open/floor/wood,/area/awaymission/stargate/building) "eM" = (/obj/effect/decal/cleanable/blood/gibs/human,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) @@ -153,25 +157,34 @@ "eZ" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "fm" = (/obj/structure/table/plasmaglass,/obj/item/ashtray,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "fB" = (/obj/structure/table/wood,/obj/item/kitchen/rollingpin,/turf/open/floor/wood,/area/awaymission/stargate/building) +"fC" = (/obj/machinery/abductor/gland_dispenser,/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building) "fN" = (/obj/machinery/door/airlock/wood,/turf/open/floor/wood,/area/awaymission/stargate/building) "fO" = (/obj/structure/flora/junglebush/b,/turf/open/floor/grass,/area/awaymission/stargate) "fU" = (/obj/structure/table/wood,/obj/item/reagent_containers/glass/bottle/charcoal,/obj/item/reagent_containers/glass/bottle/charcoal,/turf/open/floor/wood,/area/awaymission/stargate/building) +"fY" = (/obj/structure/chair/stool/alien,/obj/effect/decal/cleanable/greenglow,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"gB" = (/mob/living/simple_animal/hostile/retaliate/clown/lube,/turf/open/floor/cobble,/area/awaymission/stargate) "gC" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "gI" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/wood,/area/awaymission/stargate/building) +"gJ" = (/mob/living/simple_animal/hostile/netherworld/migo,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "hc" = (/obj/structure/chair/sofa/left{dir = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "he" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"hm" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "hs" = (/turf/closed/wall/mineral/cult/artificer,/area/awaymission/stargate/building) "ht" = (/obj/structure/flora/rock/pile/largejungle,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) +"hw" = (/obj/structure/flora/junglebush/c,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "hC" = (/obj/structure/flora/junglebush/b,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) +"hG" = (/mob/living/simple_animal/hostile/retaliate/clown/mutant,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "hK" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) +"hM" = (/obj/effect/turf_decal/loading_area{dir = 4; icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "hQ" = (/obj/structure/flora/junglebush,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "ik" = (/obj/machinery/shower{dir = 8; pixel_y = -4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "il" = (/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "iA" = (/obj/machinery/conveyor{dir = 10; id = "mining_internal"},/turf/open/floor/wood,/area/awaymission/stargate/building) +"iK" = (/obj/effect/decal/cleanable/semen,/obj/structure/flora/junglebush/c,/turf/open/floor/grass,/area/awaymission/stargate/building) "iX" = (/obj/structure/flora/grass/jungle/b,/mob/living/simple_animal/butterfly,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) +"ja" = (/obj/machinery/light{dir = 1; light_color = "#cee5d2"},/obj/structure/table/wood/fancy/black,/obj/item/nullrod/claymore/chainsaw_sword,/turf/open/floor/mineral/diamond,/area/awaymission/stargate/building) "je" = (/obj/structure/bed,/obj/item/bedsheet,/turf/open/floor/wood,/area/awaymission/stargate/building) "jf" = (/obj/structure/closet/crate/wooden,/obj/item/twohanded/fireaxe/boneaxe,/turf/open/floor/wood,/area/awaymission/stargate/building) +"jz" = (/obj/structure/flora/grass/jungle,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/grass,/area/awaymission/stargate/building) "jD" = (/turf/open/floor/carpet,/area/awaymission/stargate/building) "jF" = (/obj/structure/table/wood/fancy/black,/obj/item/clothing/head/nemes,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "jH" = (/obj/structure/flora/ausbushes/reedbush,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) @@ -181,19 +194,22 @@ "ke" = (/obj/structure/flora/tree/desertdead,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "ki" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "kp" = (/obj/machinery/light,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"ky" = (/obj/machinery/pool/filter{pixel_y = 24},/turf/open/pool,/area/awaymission/stargate/building) "kM" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "kQ" = (/obj/machinery/autolathe,/turf/open/floor/wood,/area/awaymission/stargate/building) "lg" = (/obj/structure/table/optable,/obj/effect/decal/cleanable/blood,/turf/open/floor/wood,/area/awaymission/stargate/building) +"lj" = (/obj/structure/flora/junglebush/c,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "ln" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/mineral/wood/fifty,/obj/item/stack/sheet/mineral/wood/fifty,/turf/open/floor/wood,/area/awaymission/stargate/building) -"lt" = (/obj/machinery/chem_heater,/turf/open/floor/wood,/area/awaymission/stargate/building) +"lt" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/mineral/diamond,/area/awaymission/stargate/building) +"lQ" = (/obj/effect/decal/cleanable/greenglow,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "ma" = (/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/wood,/area/awaymission/stargate/building) "mb" = (/obj/structure/rack/shelf,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/obj/item/storage/box/lethalshot,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "md" = (/obj/structure/table/wood,/obj/item/reagent_containers/food/drinks/bottle/wine,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "me" = (/obj/structure/table/wood,/obj/item/storage/fancy/candle_box,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "mt" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"mv" = (/obj/machinery/chem_dispenser,/turf/open/floor/wood,/area/awaymission/stargate/building) +"mv" = (/obj/effect/decal/remains/human,/turf/open/floor/mineral/diamond,/area/awaymission/stargate/building) "mx" = (/obj/structure/table/wood,/obj/item/storage/box/drinkingglasses,/obj/item/storage/box/drinkingglasses,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"mB" = (/obj/machinery/gateway{dir = 6},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"mB" = (/turf/open/floor/mineral/gold,/area/awaymission/stargate/building) "mD" = (/mob/living/simple_animal/butterfly,/turf/open/water/jungle,/area/awaymission/stargate) "mF" = (/obj/machinery/conveyor_switch/oneway{id = "mining_internal"; name = "mining conveyor"},/turf/open/floor/wood,/area/awaymission/stargate/building) "mJ" = (/obj/structure/flora/tree/palm,/turf/open/floor/grass,/area/awaymission/stargate) @@ -203,48 +219,69 @@ "nh" = (/obj/effect/decal/cleanable/blood/gibs,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "nm" = (/obj/structure/bonfire,/turf/open/floor/wood,/area/awaymission/stargate/building) "nn" = (/obj/structure/table/wood/fancy/blackred,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) +"nC" = (/obj/structure/pool/ladder{pixel_x = -3},/turf/open/pool,/area/awaymission/stargate/building) +"nG" = (/obj/machinery/light{dir = 8; light_color = "#e8eaff"},/obj/structure/flora/junglebush,/turf/open/floor/grass,/area/awaymission/stargate/building) +"nK" = (/obj/structure/flora/junglebush/c,/turf/open/floor/grass,/area/awaymission/stargate/building) "nL" = (/obj/structure/table/reinforced,/obj/item/storage/backpack/duffelbag/med/surgery,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"nQ" = (/obj/structure/flora/junglebush/b,/turf/open/floor/grass,/area/awaymission/stargate/building) "nR" = (/obj/structure/table/wood/fancy/black,/obj/item/reagent_containers/food/drinks/trophy,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "nX" = (/obj/machinery/light{dir = 8; light_color = "#e8eaff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "nY" = (/obj/structure/flora/rock/pile/largejungle,/turf/open/floor/grass,/area/awaymission/stargate) "of" = (/obj/effect/spawner/structure/window,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"oh" = (/obj/machinery/smartfridge/chemistry,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) +"oh" = (/obj/structure/table/wood/fancy/black,/obj/item/stack/sheet/mineral/gold{amount = 25},/turf/open/floor/mineral/gold,/area/awaymission/stargate/building) "ox" = (/obj/structure/chair/sofa/left{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"oy" = (/obj/effect/decal/cleanable/semen,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "oz" = (/obj/structure/chair/sofa{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "oQ" = (/mob/living/simple_animal/chicken,/turf/open/floor/grass,/area/awaymission/stargate) -"oS" = (/obj/machinery/gateway/centeraway,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"oS" = (/obj/effect/rune/apocalypse,/obj/structure/spawner/nether,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "oX" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "pd" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "pm" = (/obj/structure/table/wood,/obj/item/lighter,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "pu" = (/turf/closed/wall/mineral/cult,/area/awaymission/stargate/building) +"pI" = (/obj/machinery/door/airlock/wood,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "pV" = (/obj/structure/flora/junglebush/large,/turf/open/floor/grass,/area/awaymission/stargate) +"pY" = (/obj/structure/table/wood/fancy,/obj/item/dildo/flared/gigantic,/turf/open/floor/grass,/area/awaymission/stargate/building) "qf" = (/obj/structure/flora/rock/jungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) -"qw" = (/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain) +"qr" = (/obj/structure/flora/tree/jungle,/turf/open/floor/grass,/area/awaymission/stargate/building) +"qw" = (/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) +"qB" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/floor/mineral/gold,/area/awaymission/stargate/building) "qC" = (/obj/machinery/light{dir = 4},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "qD" = (/obj/structure/flora/ausbushes/brflowers,/turf/open/floor/grass,/area/awaymission/stargate) "qK" = (/obj/structure/falsewall/sandstone,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"qS" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) +"qR" = (/mob/living/simple_animal/hostile/jungle/mook,/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate/building) +"qS" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) "qU" = (/obj/structure/sink/puddle,/turf/open/floor/grass,/area/awaymission/stargate) +"rb" = (/obj/structure/flora/junglebush/b,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "rh" = (/obj/effect/decal/cleanable/blood,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) +"rm" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) +"rn" = (/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "rt" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "ry" = (/obj/structure/flora/junglebush/large,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "rC" = (/obj/structure/flora/ausbushes/brflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) +"rL" = (/obj/structure/table/wood/fancy,/obj/item/reagent_containers/food/drinks/trophy{pixel_y = 8},/turf/open/floor/grass,/area/awaymission/stargate/building) +"rS" = (/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "rU" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/reagentgrinder,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) "rX" = (/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "sn" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"sr" = (/turf/open/floor/grass/fairy/red,/area/awaymission/stargate/building) "sE" = (/obj/structure/flora/ausbushes/palebush,/turf/open/floor/grass,/area/awaymission/stargate) "sL" = (/turf/closed/wall/mineral/wood/nonmetal,/area/awaymission/stargate/building) "sM" = (/obj/structure/flora/ausbushes/ywflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) +"sR" = (/obj/structure/flora/junglebush/b,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/grass,/area/awaymission/stargate/building) "sW" = (/obj/structure/flora/tree/palm,/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate) "tc" = (/obj/structure/flora/junglebush,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "tj" = (/obj/structure/falsewall/sandstone,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) "tz" = (/obj/structure/table/wood,/obj/item/twohanded/bonespear,/turf/open/floor/wood,/area/awaymission/stargate/building) "tC" = (/obj/structure/chair/sofa/right{dir = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"tD" = (/mob/living/simple_animal/hostile/retaliate/clown/mutant/blob,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "tI" = (/obj/machinery/light{dir = 4; light_color = "#c1caff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "tN" = (/obj/structure/chair/wood{dir = 8},/turf/open/floor/wood,/area/awaymission/stargate/building) +"tT" = (/obj/effect/decal/cleanable/blood/gibs/human/limb,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "ua" = (/obj/structure/barricade/wooden,/obj/effect/decal/cleanable/blood/tracks{dir = 8},/turf/open/floor/plating/asteroid,/area/awaymission/stargate) +"uw" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate/building) "uA" = (/obj/structure/chair/wood{dir = 8},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "uB" = (/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate) +"uD" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "uI" = (/turf/open/indestructible/cobble/side{dir = 8},/area/awaymission/stargate) "uO" = (/mob/living/simple_animal/cow,/turf/open/floor/grass,/area/awaymission/stargate) "uR" = (/turf/open/indestructible/cobble/corner,/area/awaymission/stargate) @@ -254,17 +291,24 @@ "vu" = (/mob/living/simple_animal/hostile/hs13mimic,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "vv" = (/obj/effect/spawner/structure/window,/turf/open/floor/wood,/area/awaymission/stargate/building) "vz" = (/obj/structure/table/wood/fancy/black,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) +"vD" = (/obj/structure/flora/junglebush/large,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "vM" = (/obj/structure/closet/crate/wooden,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "vO" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"vX" = (/obj/machinery/light{dir = 8; light_color = "#e8eaff"},/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate/building) +"vZ" = (/obj/machinery/pool/controller,/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"wc" = (/obj/structure/reagent_dispensers/keg/aphro/strong,/turf/open/floor/grass,/area/awaymission/stargate/building) +"wC" = (/obj/machinery/light{dir = 4},/obj/structure/flora/junglebush/c,/turf/open/floor/grass,/area/awaymission/stargate/building) "wF" = (/obj/structure/rack/shelf,/obj/item/melee/classic_baton/telescopic,/obj/item/melee/classic_baton/telescopic,/obj/item/melee/classic_baton/telescopic,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "wL" = (/obj/structure/flora/ausbushes/palebush,/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate) "wP" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"wZ" = (/obj/machinery/door/airlock/wood,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"wZ" = (/obj/structure/table/wood/fancy/black,/obj/item/storage/fancy/ringbox/diamond,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "xm" = (/obj/structure/table/wood/fancy,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "xn" = (/turf/open/indestructible/cobble,/area/awaymission/stargate) +"xA" = (/obj/structure/pool/ladder{dir = 8; pixel_x = 2},/turf/open/pool,/area/awaymission/stargate/building) "xG" = (/obj/structure/chair/wood{dir = 4},/turf/open/floor/wood,/area/awaymission/stargate/building) "xK" = (/obj/structure/table/wood,/obj/item/shield/riot/buckler,/obj/item/shield/riot/buckler,/obj/item/shield/riot/buckler,/obj/item/shield/riot/buckler,/turf/open/floor/wood,/area/awaymission/stargate/building) "xT" = (/obj/structure/chair/sofa/right{dir = 1},/obj/machinery/light,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"yc" = (/obj/machinery/light{dir = 4; light_color = "#c1caff"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "yv" = (/turf/open/indestructible/cobble/corner{dir = 1},/area/awaymission/stargate) "yw" = (/obj/structure/reagent_dispensers/keg/aphro/strong,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "yA" = (/obj/structure/flora/junglebush/b,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) @@ -275,26 +319,35 @@ "yT" = (/obj/machinery/hydroponics/soil,/turf/open/floor/grass,/area/awaymission/stargate) "yX" = (/obj/structure/fence{dir = 4},/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "yZ" = (/turf/open/water/jungle,/area/awaymission/stargate) +"zc" = (/obj/machinery/light,/obj/structure/flora/junglebush/c,/turf/open/floor/grass,/area/awaymission/stargate/building) "zn" = (/obj/structure/chair/stool/bar,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"zC" = (/obj/structure/table/abductor,/obj/item/surgical_drapes,/obj/item/scalpel/alien,/obj/item/cautery/alien,/obj/item/circular_saw/alien,/obj/item/hemostat/alien,/obj/item/retractor/alien,/obj/item/surgicaldrill/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "zD" = (/obj/structure/closet/crate/wooden,/obj/item/clothing/suit/armor/bone,/obj/item/clothing/head/helmet/skull,/obj/item/clothing/gloves/bracer,/obj/item/clothing/accessory/talisman,/turf/open/floor/wood,/area/awaymission/stargate/building) "zW" = (/obj/effect/rune/apocalypse,/obj/structure/spawner/nether,/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building) +"Ac" = (/obj/machinery/light{dir = 8; light_color = "#e8eaff"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Aw" = (/obj/structure/table/wood,/obj/item/storage/toolbox/mechanical/old,/turf/open/floor/wood,/area/awaymission/stargate/building) "Az" = (/obj/structure/dresser,/turf/open/floor/wood,/area/awaymission/stargate/building) "AA" = (/obj/structure/table/wood,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/obj/item/stack/sheet/leather,/turf/open/floor/wood,/area/awaymission/stargate/building) "AC" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "AO" = (/obj/machinery/door/airlock/wood/glass,/turf/open/floor/wood,/area/awaymission/stargate/building) "Be" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"Bh" = (/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"Bj" = (/obj/structure/flora/grass/jungle/b,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/grass,/area/awaymission/stargate/building) "BC" = (/obj/structure/flora/ausbushes/palebush,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) -"BI" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "BP" = (/obj/machinery/light,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "BR" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"BZ" = (/obj/structure/table/wood/fancy/black,/obj/item/export/bottle/champagne,/obj/item/reagent_containers/food/drinks/drinkingglass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"BZ" = (/obj/structure/table/wood/fancy/black,/obj/item/export/bottle/champagne,/obj/item/reagent_containers/food/drinks/drinkingglass,/obj/machinery/light,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "Cc" = (/obj/structure/table/wood/fancy/blackred,/obj/machinery/chem_dispenser/drinks/beer/fullupgrade,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) +"Cf" = (/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Cp" = (/obj/structure/chair/sofa/right{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "Cq" = (/turf/open/floor/plasteel/cult,/area/awaymission/stargate/building) "Ct" = (/obj/machinery/smartfridge/drying_rack,/turf/open/floor/wood,/area/awaymission/stargate/building) +"Cw" = (/obj/structure/flora/junglebush,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "Cy" = (/obj/machinery/computer/operating,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) -"Df" = (/obj/machinery/gateway{dir = 1},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"CA" = (/obj/structure/table/wood/fancy/blackred,/turf/open/floor/grass/fairy/red,/area/awaymission/stargate/building) +"CO" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/open/floor/wood,/area/awaymission/stargate/building) +"Da" = (/obj/effect/decal/cleanable/semen,/obj/structure/flora/grass/jungle/b,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/grass,/area/awaymission/stargate/building) +"Df" = (/obj/machinery/light{dir = 8},/obj/structure/table/wood/fancy/black,/obj/item/stack/sheet/mineral/gold{amount = 25},/turf/open/floor/mineral/gold,/area/awaymission/stargate/building) "Di" = (/obj/structure/flora/ausbushes/ppflowers,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "Dj" = (/obj/machinery/light{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "Dk" = (/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building) @@ -304,32 +357,42 @@ "DD" = (/obj/structure/table/wood/fancy/black,/obj/structure/table/wood/fancy/black,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "DE" = (/mob/living/simple_animal/hostile/retaliate/clown/fleshclown,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "DF" = (/obj/machinery/smartfridge/food,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) -"DM" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) +"DM" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) "Ed" = (/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) "Eh" = (/obj/effect/decal/remains/robot,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"En" = (/obj/machinery/chem_master,/turf/open/floor/wood,/area/awaymission/stargate/building) +"En" = (/obj/structure/bed,/obj/item/bedsheet/grey,/turf/open/floor/wood,/area/awaymission/stargate/building) +"Et" = (/obj/effect/decal/cleanable/semen,/obj/machinery/light,/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate/building) "Ey" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "EI" = (/obj/machinery/door/airlock/shuttle,/turf/open/floor/mineral/titanium,/area/awaymission/stargate/building) "ER" = (/obj/machinery/light{dir = 1},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"EY" = (/obj/effect/decal/cleanable/semen,/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate/building) "Fc" = (/obj/structure/table/wood,/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Fg" = (/obj/structure/flora/grass/jungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) -"Fr" = (/obj/machinery/gateway,/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"Fk" = (/obj/machinery/pool/drain,/turf/open/pool,/area/awaymission/stargate/building) +"Fr" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/mineral/gold,/area/awaymission/stargate/building) +"Fw" = (/obj/structure/statue/sandstone/abs,/turf/open/floor/cobble,/area/awaymission/stargate) "FA" = (/obj/structure/ore_box,/turf/open/floor/wood,/area/awaymission/stargate/building) -"FI" = (/obj/machinery/gateway{dir = 5},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"FI" = (/obj/machinery/light{dir = 4},/obj/structure/table/wood/fancy/black,/obj/item/reagent_containers/food/drinks/trophy/gold_cup,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "FM" = (/obj/structure/table/wood,/obj/item/storage/firstaid/regular,/turf/open/floor/wood,/area/awaymission/stargate/building) "FQ" = (/obj/machinery/conveyor{id = "mining_internal"},/turf/open/floor/wood,/area/awaymission/stargate/building) "Gg" = (/obj/machinery/mecha_part_fabricator,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"GS" = (/obj/structure/table/wood/fancy,/obj/item/seeds/chili/pink,/obj/item/seeds/chili/pink,/obj/item/seeds/chili/pink,/turf/open/floor/grass,/area/awaymission/stargate/building) "GT" = (/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "GV" = (/obj/machinery/light{dir = 8},/obj/structure/closet/crate/wooden,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) +"GY" = (/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"Hc" = (/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/obj/effect/turf_decal/loading_area{dir = 4; icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Hi" = (/obj/machinery/light{light_color = "#e8eaff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Ho" = (/obj/structure/flora/tree/palm,/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate) "Hp" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate) "HE" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"Ia" = (/obj/structure/table/wood,/obj/item/storage/box/beakers,/obj/item/storage/box/syringes,/turf/open/floor/wood,/area/awaymission/stargate/building) +"HH" = (/obj/machinery/abductor/experiment{team_number = 100},/turf/open/floor/plating/abductor{initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/awaymission/stargate/building) +"Ia" = (/obj/structure/table/wood,/obj/item/storage/box/syringes,/turf/open/floor/wood,/area/awaymission/stargate/building) +"Ic" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Ie" = (/obj/machinery/mineral/processing_unit{dir = 1},/turf/open/floor/wood,/area/awaymission/stargate/building) "Ik" = (/obj/structure/chair/sofa{dir = 8},/obj/machinery/light{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "Im" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"Iv" = (/obj/machinery/gateway{dir = 8},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"Iv" = (/obj/effect/decal/remains/robot,/turf/open/floor/mineral/gold,/area/awaymission/stargate/building) +"IA" = (/obj/structure/statue/sandstone/abs,/turf/open/floor/grass/fairy/red,/area/awaymission/stargate/building) "IJ" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/metal/fifty,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/wood,/area/awaymission/stargate/building) "IP" = (/obj/structure/chair/wood,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "IQ" = (/obj/effect/decal/cleanable/semen,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) @@ -337,14 +400,18 @@ "IX" = (/obj/structure/flora/ausbushes/palebush,/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate) "Jb" = (/obj/effect/decal/remains/human,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Jc" = (/obj/effect/decal/remains/human,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) -"Jh" = (/obj/structure/rack/shelf,/obj/item/gun/ballistic/automatic/wt550,/obj/item/gun/ballistic/automatic/wt550,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"Jh" = (/obj/structure/rack/shelf,/obj/item/storage/firstaid/regular,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Jm" = (/obj/machinery/door/airlock/wood,/obj/structure/barricade/wooden/crude,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Jp" = (/obj/structure/flora/junglebush/c,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "JB" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/awaymission/stargate/building) -"JX" = (/obj/machinery/sleeper{dir = 4; icon_state = "sleeper"},/turf/open/floor/wood,/area/awaymission/stargate/building) -"Kc" = (/mob/living/simple_animal/hostile/retaliate/clown/mutant,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"JP" = (/mob/living/simple_animal/hostile/netherworld,/turf/open/indestructible/necropolis/air,/area/awaymission/stargate/building/flesh) +"JX" = (/obj/structure/table/wood,/obj/item/defibrillator/loaded,/turf/open/floor/wood,/area/awaymission/stargate/building) +"Kc" = (/obj/structure/table/wood/fancy/black,/obj/item/storage/fancy/ringbox,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"Kg" = (/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate/building) "Km" = (/obj/structure/table/wood/fancy/blackred,/obj/item/storage/box/drinkingglasses,/obj/item/storage/box/drinkingglasses,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) "Kn" = (/turf/open/floor/mineral/titanium,/area/awaymission/stargate/building) +"Ku" = (/obj/machinery/light{dir = 8},/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"Kv" = (/obj/structure/flora/junglebush/c,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/grass,/area/awaymission/stargate/building) "KE" = (/obj/structure/flora/junglebush/c,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "KG" = (/obj/structure/chair/wood{dir = 1},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "KQ" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/wood,/area/awaymission/stargate/building) @@ -352,8 +419,8 @@ "KZ" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "Lb" = (/obj/structure/loom,/turf/open/floor/wood,/area/awaymission/stargate/building) "Lf" = (/obj/structure/flora/junglebush/c,/turf/open/floor/grass,/area/awaymission/stargate) -"Lj" = (/obj/structure/bonfire,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain) -"Lp" = (/obj/machinery/gateway{dir = 4},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"Lk" = (/obj/machinery/light{dir = 8},/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"Lp" = (/obj/structure/table/wood/fancy/blackred,/obj/item/storage/firstaid/regular,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) "Lq" = (/obj/structure/table/wood,/obj/machinery/reagentgrinder,/turf/open/floor/wood,/area/awaymission/stargate/building) "Ls" = (/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "Ly" = (/obj/structure/showcase/horrific_experiment,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) @@ -362,17 +429,19 @@ "LI" = (/obj/structure/flora/rock/pile,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "LJ" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "LK" = (/obj/structure/flora/ausbushes/reedbush,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) +"LM" = (/obj/structure/table/wood,/obj/item/storage/firstaid/regular,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "LO" = (/obj/structure/flora/tree/palm,/obj/structure/flora/junglebush/c,/turf/open/floor/grass,/area/awaymission/stargate) "LP" = (/obj/structure/shuttle/engine/propulsion,/turf/open/floor/plating,/area/awaymission/stargate/building) "LQ" = (/obj/structure/toilet,/turf/open/floor/wood,/area/awaymission/stargate/building) -"Mk" = (/obj/item/kitchen/knife/combat/bone,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "Mr" = (/turf/closed/wall/mineral/wood/nonmetal,/area/awaymission/stargate) "Ms" = (/obj/structure/chair/comfy/shuttle{dir = 1},/turf/open/floor/mineral/titanium/blue,/area/awaymission/stargate/building) "Mu" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Mx" = (/obj/machinery/light{dir = 8; light_color = "#e8eaff"},/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) +"MB" = (/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/obj/effect/turf_decal/loading_area{dir = 8; icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "MC" = (/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "MD" = (/obj/structure/chair/sofa{dir = 4},/obj/machinery/light{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "MI" = (/obj/structure/flora/ausbushes/ywflowers,/turf/open/floor/grass,/area/awaymission/stargate) +"MM" = (/obj/effect/turf_decal/loading_area{dir = 8; icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Nh" = (/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Nk" = (/obj/structure/frame/computer,/obj/effect/decal/cleanable/glass,/obj/item/shard,/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building) "Nr" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) @@ -389,13 +458,15 @@ "OE" = (/turf/open/floor/wood,/area/awaymission/stargate) "OK" = (/obj/structure/rack/shelf,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/obj/item/storage/box/lethalslugs,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "OM" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"Pd" = (/obj/structure/table/wood/fancy,/obj/item/seeds/watermelon/milk,/obj/item/seeds/watermelon/milk,/obj/item/seeds/watermelon/milk,/turf/open/floor/grass,/area/awaymission/stargate/building) "Ph" = (/obj/structure/barricade/sandbags,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "Pi" = (/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "Pz" = (/obj/structure/table/wood,/obj/item/pickaxe,/obj/item/pickaxe,/obj/item/shovel,/obj/item/shovel,/turf/open/floor/wood,/area/awaymission/stargate/building) "PA" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "PC" = (/obj/structure/table,/turf/open/floor/mineral/titanium/white,/area/awaymission/stargate/building) "PD" = (/obj/structure/table/wood,/obj/item/storage/bag/ore,/obj/item/storage/bag/ore,/obj/item/mining_scanner,/obj/item/mining_scanner,/turf/open/floor/wood,/area/awaymission/stargate/building) -"PG" = (/obj/structure/barricade/sandbags,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"PG" = (/obj/structure/table/wood,/obj/item/storage/box/beakers,/turf/open/floor/wood,/area/awaymission/stargate/building) +"PR" = (/mob/living/simple_animal/hostile/netherworld,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "PS" = (/obj/machinery/light{light_color = "#e8eaff"},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) "PT" = (/obj/structure/flora/grass/jungle,/mob/living/simple_animal/butterfly,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "PW" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) @@ -404,33 +475,42 @@ "Qv" = (/turf/open/floor/grass,/area/awaymission/stargate) "Qx" = (/obj/structure/chair/wood,/turf/open/floor/mineral/gold,/area/awaymission/stargate/building) "QA" = (/obj/structure/flora/junglebush,/turf/open/floor/grass,/area/awaymission/stargate) +"QF" = (/obj/structure/flora/grass/jungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "QN" = (/obj/effect/decal/cleanable/blood/tracks{dir = 8},/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "QZ" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/wood,/area/awaymission/stargate/building) "Rb" = (/obj/machinery/rnd/destructive_analyzer,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"Rf" = (/mob/living/simple_animal/hostile/retaliate/clown/lube,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "Rj" = (/obj/structure/chair/comfy/shuttle{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/awaymission/stargate/building) "Rq" = (/mob/living/simple_animal/butterfly,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "Rt" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"Rx" = (/obj/machinery/vending/cigarette/beach,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) -"Ry" = (/obj/structure/table/wood,/obj/item/storage/backpack/duffelbag/med/surgery,/turf/open/floor/wood,/area/awaymission/stargate/building) +"Rx" = (/obj/machinery/vending/cigarette{extended_inventory = 1; free = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"Ry" = (/obj/structure/table/wood,/obj/item/storage/backpack/duffelbag/med/surgery,/obj/item/flashlight/lantern{icon_state = "lantern-on"},/turf/open/floor/wood,/area/awaymission/stargate/building) "RC" = (/obj/structure/pole,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) "RL" = (/obj/structure/table/wood,/obj/item/storage/fancy/candle_box,/obj/item/lighter,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"RM" = (/turf/closed/indestructible/sandstone,/area/awaymission/stargate/building/mountain) "RO" = (/obj/machinery/vending/kink{free = 1},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"RS" = (/obj/structure/flora/grass/jungle/b,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "RT" = (/obj/structure/flora/grass/jungle/b,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "RX" = (/obj/structure/chair/sofa/corner{dir = 8},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"Ss" = (/obj/effect/decal/cleanable/semen,/obj/structure/flora/grass/jungle/b,/turf/open/floor/grass,/area/awaymission/stargate/building) "Su" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"SE" = (/obj/effect/decal/cleanable/blood/gibs/body,/mob/living/simple_animal/hostile/retaliate/clown/lube,/turf/open/floor/cobble,/area/awaymission/stargate) "SF" = (/obj/structure/table/wood,/obj/item/kitchen/knife/ritual,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "SI" = (/obj/item/storage/box/rubbershot{pixel_x = -3; pixel_y = 3},/obj/item/storage/box/rubbershot{pixel_x = -3; pixel_y = 3},/obj/item/storage/box/rubbershot,/obj/item/storage/box/rubbershot,/obj/item/storage/box/rubbershot{pixel_x = 3; pixel_y = -3},/obj/structure/rack/shelf,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "SP" = (/obj/machinery/door/airlock/wood/glass,/obj/structure/barricade/wooden/crude,/turf/open/floor/wood,/area/awaymission/stargate/building) "Tb" = (/obj/structure/chair/sofa/corner{dir = 4},/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"Te" = (/mob/living/simple_animal/hostile/retaliate/clown/lube,/turf/open/floor/concrete,/area/awaymission/stargate) "Tn" = (/obj/structure/table/wood/fancy,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "Tu" = (/mob/living/simple_animal/butterfly,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "Tv" = (/obj/structure/flora/tree/palm,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) -"TD" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) +"TC" = (/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer,/turf/open/floor/cobble/side{dir = 1; icon_state = "cobble_side"},/area/awaymission/stargate) +"TD" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) "TE" = (/obj/machinery/deepfryer,/turf/open/floor/wood,/area/awaymission/stargate/building) "TI" = (/obj/structure/flora/tree/palm,/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate) "TM" = (/obj/machinery/rnd/production/circuit_imprinter,/obj/item/reagent_containers/dropper,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "TR" = (/obj/structure/mineral_door/woodrustic,/turf/open/floor/carpet,/area/awaymission/stargate/building) "TX" = (/obj/effect/decal/cleanable/blood/innards,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) +"Ub" = (/obj/structure/table/wood,/obj/item/reagent_containers/glass/bottle/mutagen,/turf/open/floor/wood,/area/awaymission/stargate/building) "Uc" = (/obj/structure/flora/junglebush/large,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "Ue" = (/obj/structure/flora/rock/pile/largejungle,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) "Um" = (/obj/machinery/light{dir = 1; light_color = "#d1dfff"},/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) @@ -439,10 +519,15 @@ "UC" = (/turf/closed/indestructible/sandstone,/area/awaymission/stargate/building) "UF" = (/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "UG" = (/obj/effect/spawner/structure/window/shuttle,/turf/open/floor/plating,/area/awaymission/stargate/building) -"UI" = (/obj/structure/bed,/obj/item/bedsheet/grey,/turf/open/floor/wood,/area/awaymission/stargate/building) +"UH" = (/turf/open/pool,/area/awaymission/stargate/building) +"UI" = (/obj/effect/decal/cleanable/blood,/obj/structure/chair/wood{dir = 8},/turf/open/floor/wood,/area/awaymission/stargate/building) +"UM" = (/mob/living/simple_animal/hostile/retaliate/clown/lube,/turf/open/floor/concrete/smooth,/area/awaymission/stargate) "UN" = (/obj/machinery/biogenerator,/turf/open/floor/wood,/area/awaymission/stargate/building) +"Vd" = (/obj/structure/flora/junglebush,/turf/open/floor/grass,/area/awaymission/stargate/building) "Vh" = (/obj/structure/flora/junglebush/b,/mob/living/simple_animal/butterfly,/turf/open/floor/grass,/area/awaymission/stargate) "Vk" = (/obj/structure/table/plasmaglass,/obj/structure/table/plasmaglass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"Vl" = (/obj/effect/decal/remains/xeno,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) +"Vx" = (/obj/effect/decal/cleanable/semen,/obj/structure/table/optable/abductor,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "Vy" = (/mob/living/simple_animal/hostile/retaliate/clown/fleshclown,/turf/open/floor/mineral/titanium,/area/awaymission/stargate/building) "VG" = (/obj/structure/table/plasmaglass,/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) "VJ" = (/obj/structure/table/wood,/obj/machinery/microwave,/turf/open/floor/wood,/area/awaymission/stargate/building) @@ -451,32 +536,37 @@ "VZ" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/wood,/area/awaymission/stargate/building) "Wa" = (/obj/structure/bed,/obj/effect/decal/cleanable/semen,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "Wh" = (/turf/open/floor/carpet/royalblack,/area/awaymission/stargate/building) +"Wx" = (/obj/structure/chair/stool/alien,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "WB" = (/obj/machinery/gibber,/turf/open/floor/wood,/area/awaymission/stargate/building) +"WC" = (/obj/effect/decal/cleanable/greenglow,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) "WL" = (/obj/machinery/mineral/unloading_machine{dir = 1; icon_state = "unloader-corner"; input_dir = 1; output_dir = 2},/turf/open/floor/wood,/area/awaymission/stargate/building) "WO" = (/obj/machinery/mineral/processing_unit_console,/turf/closed/wall/mineral/sandstone,/area/awaymission/stargate/building) -"WR" = (/obj/machinery/gateway{dir = 9},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"WR" = (/obj/structure/table/wood,/obj/machinery/cell_charger,/turf/open/floor/wood,/area/awaymission/stargate/building) "WW" = (/obj/machinery/vending/boozeomat/all_access,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) -"Xg" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain) +"Xg" = (/mob/living/simple_animal/hostile/skeleton,/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) "Xi" = (/obj/structure/mineral_door/wood,/turf/open/floor/wood,/area/awaymission/stargate/building) "Xp" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "XE" = (/obj/structure/flora/tree/palm,/obj/structure/flora/ausbushes/ppflowers,/turf/open/floor/grass,/area/awaymission/stargate) "XF" = (/obj/structure/bonfire,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) "XH" = (/obj/structure/barricade/wooden,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) -"XJ" = (/obj/machinery/gateway{dir = 10},/turf/open/floor/mineral/crimsonstone_floor,/area/awaymission/stargate/building) +"XJ" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "XW" = (/obj/machinery/door/airlock/wood,/turf/open/floor/carpet/red,/area/awaymission/stargate/building) "Yg" = (/obj/structure/chair/comfy/shuttle{dir = 1},/obj/machinery/light,/turf/open/floor/mineral/titanium/blue,/area/awaymission/stargate/building) "Yo" = (/obj/machinery/vending/hydroseeds,/turf/open/floor/wood,/area/awaymission/stargate/building) "Yv" = (/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/carpet/orange,/area/awaymission/stargate/building) -"Yw" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain) -"YN" = (/obj/item/kitchen/knife/combat/bone,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate/building/mountain) +"Yw" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) +"YN" = (/obj/item/kitchen/knife/combat/bone,/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) "YP" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/turf/open/floor/wood,/area/awaymission/stargate/building) "YQ" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/mineral/sandstone/twelve,/obj/item/stack/sheet/mineral/sandstone/twelve,/turf/open/floor/wood,/area/awaymission/stargate/building) "YS" = (/obj/structure/table/wood,/obj/item/mop,/obj/item/reagent_containers/glass/bucket,/obj/item/soap,/turf/open/floor/wood,/area/awaymission/stargate/building) "Zh" = (/obj/structure/table/wood,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) +"Zk" = (/obj/effect/decal/cleanable/greenglow,/turf/open/floor/mineral/abductor,/area/awaymission/stargate/building) "Zl" = (/obj/structure/flora/grass/jungle,/turf/open/floor/grass,/area/awaymission/stargate) +"Zp" = (/obj/structure/table/wood/fancy,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/obj/item/reagent_containers/rag/towel,/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) "Zq" = (/obj/machinery/light,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "ZM" = (/obj/structure/chair/wood{dir = 4},/turf/open/floor/mineral/sandstone_floor,/area/awaymission/stargate/building) -"ZW" = (/obj/structure/bonfire,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) +"ZP" = (/obj/structure/flora/grass/jungle/b,/mob/living/simple_animal/hostile/jungle/mook,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate/building/mountain) +"ZW" = (/obj/structure/bonfire,/turf/open/floor/plating/asteroid,/area/awaymission/stargate/building/mountain) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -488,131 +578,131 @@ aaaaabababababababababababababababababababababababababababababababababababababab aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsababababababababababababababababababababababababababababababababababababLsLsababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsabababababababababababababababababababababababababababababLsababLsLsLsLsLsLILsLsLsLsabababababababababababababababababababLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsabababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsabLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsabababababLsabLsababababLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLskeLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsababLsLsLskeLsLsLsLILsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsaWLsLsLsLsLsababababababLsLsLsLsLILsBRLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsLskeLsLsBRLsLsaWLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLILsLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLILsLsLsLILsLsLsaWLsLsLsLILsLsLsLsabababLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLILsLsLsLsLsLsOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvLsLsLsLskeLsLsLsLsLsLsabababLsLsLsLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsLsLsLsLsUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsOvKYUFTnOvKYUFTnOvkQcsOvKYUFTnOvKYUFTnOvLsLsLsLsLsLsLsLsabababababababLsLsLsLsLILsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsBRLsabababababababababLsababLsLsLsLsLsLsLsLsUCrXrXDDvzyOvzvzrXrXUCazaHaIaJaKUCwPPiUCNhNhNhNhPWNhNhNhNhUCLsLsLsLILsBRLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLskeLsLsLsLsLsLsLsLskeLsLsLsOvGVUFWaOvGVUFWaOveQVZOvvMUFDzOvvMUFDzOvLsLsLILsLILsLsababababababababLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsLsLsLsLsLsBRLILsabababababababababababababLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLILsLsUCrXrXnRQxjFQxnRrXrXUCNhNhOMNhNhmtPiqCUCNhEhNhRtNhNhJbNhBeUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsOvUFUFUFOvUFUFUFOvaqcsOvUFUFUFOvUFUFUFOvLsLsLsLsLsLsababababababababababLsLsLsOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCMxrXrXrXrXrXrXrXNvUCaLZMvfuANhUCPiQgUCNhNhPibQPiPiPiNhNhUCLsLsLsLsLsLsLsLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLILsLBLsLsaWLsLsLsLsLsOvOvXWOvOvOvXWOvOvOvSPOvOvXWOvOvOvXWOvOvLsLsLsLsLsLsababababababababababLsLsLsOvRylgvcOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsUCrXNrrXPiPiPirXrXrXUCUCUCUCUCUCUCJcPiUCNhBeJcWRDfFIPiNhNhUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvDrWhvOWhWhWhACWhWhWhWhACWhWhWhWhWhWhOvLsLsLsLsababababababababababababLsLsLsOvcsQZcsOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLsabababababababababababababababababLsLsLsLsababababababababababababababLsLskeLsLsLsLsLsUCNhNhNhPiPiPiPiPiPiJmPiQgPiPibQPiPiqCUCoXNhPiIvoSLpPiRteZUCLsLsLsLsLsLsLsLsLsLsLsLskeLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsOvWhWhWhWhWhWhWhWhvOWhWhWhWhvOWhWhWhWhOvLsLsLsabababababababababababababLsLsLsOvcscscsOvLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsUCNhNhNhPiPiPiPiPiPiJmkpwPPiJcPiPiPiPiUCNhEhwPXJFrmBPiNhNhUCLsLsBRLsLsLskeLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsOvOvsnOvOvOvOvOvOvOvOvOvOvOvOvOvOvsnOvOvLsLsLsababababababababababababLsLsLsLsOvOvfNOvOvOvOvOvOvLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLsLsLILsLsabababababababababababababLsLsLsLsLsLILsLsUCNhNhNhPiPiPiNhOMNhUCUCUCaMUCUCUCwPbQUCNhNhetPiLJPiJcNhNhUCLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsOvROWhROnnrUCcbLWWKmKmWWbLCcrUnnROWhROOvLsLsLsabababababababababababLskeLsLsLsOvcscsIaUILqcsEnOvLsLsLsLsLsLsLsLsLsabababababababababababababababababababababLsLsLskeLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCaNaPNhaPaNUCPiPiUCRtJbNhPGPGPGNhBeNhUCLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsOvDrWhWhEdEdEdEdEdEdEdYvEdEdEdEdWhWhDjOvLsLsLsLsababababababababababLsLsLsLsLsOvJXcscscsltQZmvOvLsLsLsLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababLsLILsLsLsaWLsLsUCnXNhNhPiPiPiNhNhtIUCoXNhOMNhNhUCQgqCUCNhNhNhPikpPiNhNhRtUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsaWLsLsLsLskeLsLsLsLsaWLsLsOvWhWhznnnEdYvEdEdEdEdEdEdEdEdnnznWhWhOvLsHELsLsabababababababababababLsLsLsLsOvcsKQQZcscsKQcsOvLsLsLsLsLILsLsLsabababababababababababababababababababababLsLsLBLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCNhNhNhNhNhUCPiPiUCUCUCUCcjUCcjUCUCUCUCLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsLsLsLsOvywWhznyCnnnnnnnnnnnnnnnnnnnnyCznWhywOvLsLsLsLsabababababababababababLsLsLsLsOvJXcscscscscscsOvLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLILsLsLsababababababababababababababLsLsLsLsLsLsLsUCNhNhNhPiPiQgNhNhNhUCNhvfNhvfNhUCPiJckMPiPiPiwPERPiPiPiUmUCLsLsLsLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsLsLsOvoxWhWhznznznznznznznznznznznznvOWhCpOvLsLsLsLsLsLsababababababababLsLsLsLsLsOvOvOvAOOvOvAOohOvLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLskeLsLsLsUCKGKGKGPiPiPiKGKGKGUCaQaRNhaRNhUCPiPiPiQgPiJcPiPiPiPiPiQgUCLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsOvMDVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGIkOvLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLsvvapapcsmaapcscsOvLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsUCnXNhNhPiPiPiNhNhtIUCNhvfNhvfOMUCUCUCUCUCUCUCUCmtUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsOvbPVkWhvOWhEdRCEdWhvOEdRCEdWhWhWhfmozOvLsLsLILsLsLsLsLsabababababLsLsLsLsLsLsvvxGcscscsahtNQZOvLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLsLILsLsUCKGKGKGPiPiPiKGKGKGUCNhaROMaRNhUCJhPWOKNhaxPWaiNhNhmbPWSIUCLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvbPVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGozOvLskeLsLsLsLsLsLsLsabababababLsLsLsLsLsOvxGQZcscsapcscsOvLskeLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsUCNhNhOMPiPiPiNhNhNhUCoXvfNhvfNhUCJhNhOMNhNhOMNhNhOMNhNhdOUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsOvTbDxWhWhWhWhWhWhWhWhWhWhWhWhWhWhxTRXOvLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsvvxGcsKQcsahtNcsOvLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababababababLsLsLsLsLsUCHiNhNhPiPSPiNhNhHiUCNhaRNhaRNhUCayNhaSNhaiNhaiNhNhwFNhaGUCLsLsLsLILsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLILsLILsLsLsLsaWLsLsLsLsLsLsOvOvOvOvOvWhtChcBZWhWhBZtChcWhOvOvOvOvOvLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLskeLsOvxGcscsQZapcscsOvLsLsLsaWLsLsLsLsLsLsLsababababLsabLsLsabLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsababababababababababababababLsLsLsLsUCUCUCUCJmqKJmUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLsLsLsLsLsLsLsBRLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvWhWhWhWhWhvOWhWhWhWhOvLsLsLsLsLsLsaWLsLskeLsLsLsLsLsLsLsLsaWLsLsLsLsvvxGcscscsahtNcsOvLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsaTaUaUaUaVLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLskeLsLsOvRxBPWhWhWhWhWhWhBPRxOvLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsvvapapcscsapcsKQOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsabababababababababababababababLsLsLskeLsLsuIaXaXaXaYLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvOvwZOvOvwZOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvSPSPOvvvvvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsLILsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaVLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsabababababababababababababababababLsBRLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsLsLsLsababLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsabababababababababababababababababLsLsLsLsLsuIaXaXbaaYLsLsLsaWLsLsLsLsLsLsLskeLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLskeLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsababababababababababababababababababLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababLsLsLsLILsLsLsLsLsLsBRLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsabababababababLsLsLsLsbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdxnaXaXaXaYLsLsLsabababababababababababababababababLsLsLsLILsuIaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsaZaXaXaXaYLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsBRLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsaWLsLsLsLsLsLsLsabababLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLskeLsLsababababababababababababababLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLBLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsaWLsLsLILsLsLsLILsLsLILsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsabababababababLsLsaZaXaXaXaYLsLsLsLsabababababababababLsababababLsLsLsLskeLsLsuIaXaXaXaYLsLsLsLsLILsLsLsLsLsababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsabababababababababababLsaZaXaXaXaYLsLsLsababababababababLsLsLsababLsLsLsLILBLsLsLsLsuIbaaXaXaYLsLILsLsLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsabLsabLsLsLsLsLsLsLILsLsLsBRLsLsLsLsLsLsLsLsababababLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsaZaXaXaXaYLsLsLsLsLsababababababLsLsLsabLsLsLsLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsabLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsuIaXaXaXaYLsLskeLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsaWLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababLsLsLsLsLsBRLsLILsLskeLsLsLsLsabababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsaWLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLILskeLsLsLsLsLILsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLILsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLILskeLsLsabababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLskeLsLsababababababLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaXaXaXaXaYLsLsLsLsLsLsLsLsacacababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababLsLskeLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsabababababababababLsLILsLsLsabababababLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLILsLsLsLsacacBIababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababLsLsLsLsababababababababababLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsLsLsLsabababacabababababababababababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababababababababababababababLsababababababababababababababababababababababababLsLsLsLILsLsLsLILsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsLsLsLsabababacacacababababababababLsLsLsLsvuLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsaWLsLsLILsaZaXaXaXaXbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbeLsLsLsLsLsabababacacacacabababababababLsLsLILsLsLsLsLsLsvuLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLsLsabLsLsLsababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababacabababababababLsLsLsLsLsvuLsaELsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababLsLILsLsLsLsLsLsLsLsLsababababababMrMrMrMrXHMrMrMrMrababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsababababacacabababababababLsLsLsLsLsLsLsLsLsLsLsLsaFLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsImLsLsLsLsabababLsLsLsLsLILsLskeLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLILsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababacacababababababLsLsLsLsLsLsLsaCLBLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLskiLsLsXpLsLsLILsLsLsLsLsabLsLsLsLsImLsLsLsLsLskeLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLILsLsLsLsLsLsaZaXaXaXaYLsLsaWLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsababLsabababababacacabababababLsLsLsLsvuLsLsLsaWaDLsLsLsLsLsvuLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLBLsLskeLsLsUsLsLsLsLsLsTXLsLsLsLsLsLsXpkiLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsababababLsLsLsababLsLsLsLsLsLsLsLsababababababababababacacacacababababLsLsLsLsLsLILsLsLsLsLsLsvuLsLILsLsLsLsvuLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLILsLsLsLILsLsLsLsLsrhLsLsLILsLsLsLsaWLsLsLsLsLsLsLsLsababababababababLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsabababababababababababababLsLsLsLsLsabababababababababababacacabababababLsLsLsvuLsLsLsLsaBLsLsLsLsLsLsLsaALsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsImLsLsLshKLsLsLsLsLsLsLsLsLsXpLsLsLsLshKLsLsLsUsLsLsLsababababababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsaWLsLsLsLsaZaXaXaXaYLsLILsLsabababababababababababababababababLsLsLsababababababababababababacabababababLsLsLsLsLsvuLskeLsLsvuLsLsLsLsLsLILsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLBTXLsLsLsLBLskeLsLsLsLsLsLsLBLsLILsLsLsLsababababababLsLILsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLsLsLsabababababababababababababababababababababababababababababababacacabababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsvuLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLskeLsXpLsLsLsXpLsLsLsLsLskebALsLsLsLsLsXFLsLskeLsLsLsLBLsLsLsabababababababLskeLsLsabLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLsLsLsababababababababababababababababababababababababababababababacacababababababababLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsTXLsLsLBLskeLsLsIQLsLILsLsLsXpLsLsLsLsLsLsbALsLsLsLsXpLsLsLsLsababababababLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababLsLsLILsLsaZaXaXaXaYLsLsLsLsLsababababababababababababababababababababababababababababacacacabababababababababababababababLsLsLsLskeLsababLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLskiLsLsLsXFLsLsLsLsLsLILsTXLsXpLsLsLsTXLsLsLsLILsLsababababababLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsLsLsababababababababababababababababababababababababababababacacababababababababababababababababababLsLsLsLsabababababababababLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsaWLsLsXpLsLsLsLsLsLsLsLsLsImhKLskeLsLsLsLskeLsLsLsLsLsLsLsLsLsMrLsLsLsababLsLsLsLILsLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsLsLsabababababababababababababababababababababababababababababacacabababababababababababababababababababLsLsLsabLsLsababababLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsImLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLBLsLsLsLsLsImLsLsLsXFLsLsLsMrLskeLsLsLsLsLsLsLsLsLsabLsabababLsLsLsabLsabababababababababababababababababababababababababababababababababababXHXHXHXHXHbfbgbgbgbhXHXHXHXHababababababababababababababababababababababababababababababacacabababababababababababababababababababLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsLILsLsImkiLsXpLsLBLsLsaWLsLsLsLILsLBLsLsLsLsLsLsLsLsQNQNuaQNQNQNLsLILsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsabababababababababababababababababababababababababacabacacacababacacababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsXpLsLsbALsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsUsLsLsLsLsLsMrLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLskeLsLsaZaXaXaXaYLsLsababababababababababababababababababababababababhmacacDMacacacacacacababababababababababababababababababababLsabababababLskeLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsUsLsLsLsLsLsLsLsLILsLskeLsbALsLsLskiLsLsXpLsLsLsLsLsLsLsImLsLsLsMrLsLsLsLsLsLsLsLsLsLsLsababLsLsLsLsLsLsLskeLsLIabababababababababababababababababababababababababababababababLsLsLILsLsLsLsaZaXaXaXaYLsLsabababababababababababababababababababababababacacBIacacacMkacacacacababababababababababababababababababababababababababLsLsLsLsaWLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababLsLsLsLsLBLsLsLsLsXFLsLsUsLsLsLsLsHELskiLskeLsImLsLsLsXpLsLsLsLsLsabababLsLsLsLILsLsabLsLsLsabababLsLsLskeLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLILsLsaZaXaXaXaYLsLsababababababababababababababababababababababababacacacacZWhmacBIacababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababLsLsLsLsLsXpLsLsLskeLsLsLsTXLsLsLsXFLsLsLsLsLsLsaWLsLsLsLBLsLsLsabababababLsLsLsLsababLsLsLsababababLsLsLsLsLsLsLsLsLsLsabLsLsLsabababababLsLsabLsLsLsabababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLILsabababababababababababababababababababababababacacMkacacacacacacababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsLsLskeLsLsLsLsababababLsLsLsLsabLsLsLsLILsabababLsLsLsLILsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsababababababababababababababababababababacacacacacBIachmDMacacacacababababababababababababababababababababLsLsLsLILsLsLsLsLskeLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababLsLsLsLsImLsLsLILsabLsLsLsLsXpLsLsLsLBLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsababLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsaZaXaXaXaYkeLsLsabababababababababababababababababababacacacabacacacacacacacBIacababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababLsLsLsLsLsLsababababLsLsLsLskeLsLsLsLsLsImLsLsLsLsababababLsLskeLsLsLsabLskeLsLsababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsOvOvOvOvOvOvOvOvOvLsLsLsLsLsababababababababababLsLsLILsLsaZaXaXaXaYLsLsLsabababababababababababababababBIacacacacabababacacabababacacacacabababababababababababababababababababababLsLskeLsLsLsLsLILsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababLsLsLsLsLsabababababLsLsLsLsLsLsLsabababababababababababLsLILsLsLsQNQNQNLsLsLsLsLsLsLsLsabababLsLsLsLsababLsLsLsLsLsLsLsOvapcsOpOpOpAzdbOvLskeLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsaZaXaXaXaYLsLsababababababababababababababacacacacacacacababababababababacabababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababLsabababababababababababababLsLsLsLsabLsLsLILsLsLsLsababababLsLsLsLsLILsLsLsLsLsLsLsLILsOvancscscscscsaoOvLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsaZaXaXaXaYLsLsLsabababababababababababababacacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsabababababLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvdbcscscscscsapOvLsLsOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsababababababababababababababacacabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsababababababLsLsLsLsabLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsOvOvOvOvXiOvOvOvOvLsLsOvdbcscsRyOvLsLILsLsLsLsLsLsLskeLsLsaZaXaXaXaYLsLsLsababababababababababababacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsababababababLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsabababababababababacacacababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsOvNhNhIPIPIPNhNhOvLsLsOvfUcscsapOvLsLsLsLsLsLsaWLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsabababLsLsababacacababababababababababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLIHEabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababLsLsLsLsLsLsLsLILsLsLsabababababLsLsLsOvNhZMmdadvfuANhOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLILsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsabacacabababLsababababababababababababababababababLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababOvOvOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsababLsLsLsLsOvNhNhKGKGKGNhNhOvLsLsOvfUcscsapOvLsLskeLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsabababLsLskeLsLILsLsabqSabLsLsLsLsLsababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacababababababababOvdbPDPzFAFAdbOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvdbcscsjeOvLsLsLsLsLsLsLskeLsLsLsLsaZaXaXaXaYLsLsLsabababLsLsLsLsLsLskeheLBLsLsLskeLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababacacacacacaeacacabOvcscscscscscsOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsOvOvofOvMuOvofOvOvLsLsOvOvXiOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsababLsLsLsLsLsLsheLsLsaWLsLsLsLILsababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabacacacacacvhcscscscsOvWLvvcsdbOvaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUxnaXaXaXaYLsLskeLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsabLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababacabababababababababababababababababacacacabOvcscscsmFvvFQvvcscsgIaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLsLsLsLsabababLsLsLsLsLsabababLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababacacacacabababOvcscscscsWOIevvcscsOvaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLsLsLsLsLsLsabababLsLIabababababababLsLsLsLILsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVZlQvLsLsLsababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababTDababacacacacababababOvdbcsOvvvvvFQvvcscsgIaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLILsLsLsLsLsLsabababababLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsMIQAQvLsLsLsLsLsLILsLsLsQvQvuBQvQvZlLsLsababababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababacacababacacabacacacacacacacacacabababababababOvcscsYPdzdziAvvcscsOvbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdxnaXaXaXaYLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsQvQvZlHpQvpVQvuBLsLsLsLsHpqDQvLfQvmJQvqDLfQvababababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababacacacacabababababababababOvcscsOvOvOvOvOvcscsOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsLsLsLsQvLfQvqDQvuBLfQvLfQvQvQvZlQvQvQvZluBZlQvQvuBababababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababababababababOvcscscscscscscscscsOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsLsLsLsLsaWLskeLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsQvpVQvZlsEMITIQvQvQvMIQvmJZlQvmJnYQvMIQAQvuBQAQvZlabababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabababababababababababOvdbcscscsdbcscscsdbOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsLILsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLILILsLsLsLsLsLsLsLsLsLsLsLsLsLsQvLOQvQvMIQvQvQvpVQAQvmJHpsEuBQvcIQvQvuBQvQvsEMIHpQvQvabababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababOvOvOvOvOvOvOvOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsLsLsLsLsLsLsLsLsaZaXaXaXaYOvOvOvOvvvvvOvOvvvvvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVQvQvHpQvuBfOQvmJLfQvQvQvuBZlQvQvqDfOQvsEHpQvqDmJQvQvQvsEuBHpLfQvababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababacacacababababababLsLsLsLsLsLsLsLsLsLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsLsOvOvOvOvOvOvOvaZaXaXaXaYOvNReJeJVJeJyMLqTEfBWBcseLOvLsLsLsLILsLsLsLsLsLsLsaWLsLsLsLsLfLsMIQvsEZlQvpVQvQvQvrCQvHpQvmJMIQvQvmJZlQvZlQvQvZlQvQvpVQvTIQvfOQvQvpVQvZlababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababacababacacacacacacacacacababababababLsLsLsLsLsLsLILsLsLsLsOvcscsOncsarOvLsOvcscsOncsasOvLsOvcscsOncsatOvLsOvcscsOncsauOvLsLsOvFcZhZhNhNhOvaZaXbjaXaYOvcscscscscscscscscscscseLOvLsLsLsLsLsLsLsLsLsLsLsLsLsZlQvQvQvQvQvqDQvQvQvQvsEQvQAQvQvmJQvQvsELfQvHpsEQvQvHpQvmJsEQvHpuBQvHpMIQvmJQvmJHpababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababLsLskeLsLsLsLsLsLsLskeLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsLstjNhNhNhNhNhOvaZaXaXaXaYOvnacsdbcscscscscscsdbcseLOvLsLsLsLsLsLsLsLsQvQvQvQvqDQvQvmJpVQvmJQvmJuBfOQvZlQvMIZlQvQvpVQvQvQvqDQvQvQvmJLfMIQvQvLfsELfilmJsEQvLfQvqDQvQAabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababacababacacacabababacacababababababababababababLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsOvLzNhikOvNhOvaZaXaXaXaYOvOvDFOvXiOvOvOvOvXiOvOvOvOvLsLsLsQvLfQvsEQvQvmJHpfOQvLfuBMIQvsEQvHpQvMIQvmJqDfOQvsEuBLfQvQvmJbiQvmJLfuBQvQvQvpVQvqDQvQvHpQvqDQvZlQvHpabMIabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababacacababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsOvLzNhikOvNhNhaZaXaXaXaYofFcNhNhNhNhRLFcNhNhNhNhFcOvLsQvQAZlQvqDQvLfQvMIuBQvQvQvQvQvQvbiQvQvmJLfQvsEQvHpQvMIHpQvHpqDQvLfQvQvQvmJZlQvmJQvsEQvmJZlQvQAQvpVQvmJababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababacacabacababababababababababababababababababLsLsLILsaWLsLsLsLsLsOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvLsHpOvLzNhikOvFcOvaZbjaXaXaYOvNhNhNhNhNhNhNhNhNhNhNhNhofLsqDQvQvQvmJQvQvQvZlQvZlQvmJQvnYQvQvQvQAQvQvQvQvZlQvQvmJQvmJQvmJfOuBQvpVQvQvQvQvQvpVQvMIZlQvQvMCJpQvuBMIababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvLsLsOvLbcscscscscsAwOvLsLsOvdbcsYQOvqDXEOvOvOvOvOvtjOvaZaXaXaXaYMuNhNhNhIPIPIPIPIPIPNhNhNhOvQvQvMIsEHpQvQvfOQvQvmJLfQvpVQvQvMIQvmJQvmJZlmJpVQvQAQvpVQvQvZlQvQvHpQvmJQvQAQvZlQAQvKZMCMCqfMCMCMCFgMCpVqDabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsOvmeNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvLsLsOvLbcscsdbcscsAwOvLsLsOvIJcsYQOvyvuROvLQOvLQtjdbOvaZaXaXaXaYOvvfNhZMxmxmxmxmxmxmuANhvfofHpqDLfQvuBLfQvZlQvwLQvQvQvQvsEQvfOQvqDQvqDQvHpQvsEuBQvQvsEHpQvpVQvQvQvqDQvQvsEQvQvMCMCJpMCVYVYhCMCMChCVYVYabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsRqLsLsLsLsLsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDadNhOvLsQvOvCtcscsyMcscsUtOvLsLfOveQcscsXiaZaYOvXiNDXitjcscsaZaXaXaXaYOvvfNhZMxmxmxmxmxmxmuANhvfofQvmJQvIXQvQvilQvMIQvHpQvmJqDQvQvQvLfmJuBLfQvQvMIQvQvLfQvQvQvmJQvQvndQvLfFgMCMCdQVYMCtcFgVYryMCFgjHyZVYdQjZMCtcFgababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDSFNhOvLfqDOvCtcscsAAcscsUtOvuBQvOvYScscsOvaZaYOvcscscstjcsOvaZaXaXaXaYMuNhNhNhKGKGKGKGKGKGNhNhNhOvQvqDQvpVQvQvqDmJLfQvfOQvQvpVQvmJQvRTQvQAQvQvmJLfQvmJQvMIZlmJQvZlQvQvMIMCMCryagVYyAjHMCyAgChQMCyZyZyZyZyZMCKZVYabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLILsLsLsLsLsLsLfLsLsOvpmNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvMIQAOvUtcscsdbcscsUtOvHpsEOvjXcsaOvvaZaYOvnacscscscsOvaZaXaXaXaYOvNhNhNhNhNhNhNhNhNhNhNhNhofZlsEuBMIQvmJQvQvQvsEQvMIQAQvQvQvuBQvQvQvuBQvQvQvQvQvLfQvqDQvQvQvLfQvFgyAMCJpTuMCyZyZyZyZjHMCyZyZyZyZyZyZqfMChCabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababQvLfHpQvLsLsLsLsLsLsLsLsQvmJqDLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvHpQvOvUtcscscscscsUtOvMIqDOvdbcslnvvaZaYOvdbcscscscsOvaZaXaXaXaYofFcNhNhNhNhmxFcNhNhNhNhFcOvQvQvQvfOQvQvnYQvQvHpZlQvQvQvsEQvTIQvLfsEQvLfZlHpQvTIQvmJQvQALfQvMCJpMCMCyZKZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCababababababababababMCFgqfababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababababQvabababababababababababababababQvfOuBQvLsfOLsHpQvQAMIHpfOQvZlOvOvOvofofOvOvTROvOvTROvOvofofOvOvOvQvXEOvOvvvOvXiOvvvOvOvQAQvOvOvOvOvOvaZaYOvOvOvOvOvOvOvaZaXaXaXaYOvOvOvOvXiOvOvOvOvXiOvOvOvOvHppVQvQvpVQvQvQvuBuBQvmJLfQvpVQvQvqDQvmJqDQvsEQvQvQvuBQvHpQvQvMCKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAUcFgMCabababababjHJpyAUcyZJpababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababababQvQvZlQvabababababababababababQvMIpVQvoQQvoQQvZlrCQvsLsLsLsLsLsLaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUxnxnaUaUaUaUaUaUaUaXbjaXaXaYOvtztzcscscscscscscscstztzOvQvQvmJQvMIQvsELfQvfOQvQvQvQvQvQvMIfOQvQvHpQvMIUcFgMCMCJpMCUcMCdQVYyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHtcJpKZyAFgtcyZyZyZyZtcjHKZababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababababababQvHpQvQvsEQvabqDabQvababZlQvHpLfLfQvHpQvQvQvQvoQQvmJQvsLdbUNdTYosLaZaXaXaXaXaXbjaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYOvdbcscscscscscscscscscsdbOvMIQvQvLfQvZlQvQvMIQvQvuBqDmJHpsEQvQvLfQvMCJpVYgCtcMCFgyAMCqfMCVYVYMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAKZabyAKZqfjHababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababababZlQvQvmJLfQvMIQvQvpVHpQvQvMIuBQvQvQvqDsEHpQvmJqDQvQvQvHpsLnacscscsXiaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbkbkbkaYOvtztzzDxKdbjfjfdbxKzDtztzOvQvLfsEQvQvmJHpQvmJQvQAQvQvLfilQvMCtcMCKZyAMCdQLKyZyZyZKZMCMCFgyAFgKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJptcFgyZyZUcababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababababHpQvMIQvqDilQvHpQvfOuBQvQvQAHpqDQvmJfOuBQvQvafQvQvQAQvpVsEuBsLapcscsapsLaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXaXaXbkbkbkaYOvOvOvOvOvOvOvOvOvOvOvOvOvOvQvHpQvQvpVQvQvpVQvZlQvuBMCKZMChCVYUcMCMCMCjHFgyZyZyZyZyZyAjHyZyZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababuBQvQvLfsEQvQvMIZlQvQvQvBCMIQvQvsEQvpVQvQvQvmJQvQvmJQvQvqUQvQvsLsLsLXisLsLbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdblbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdaXbkbkbkaYMIpVsEQvQvHpQvLfQvQvuBQvQvQvMIQvfOQvQvLfQvQvMCKZMCMCyAMCqfgCjZMCyAKZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababQvQvfOQvMIQvQvmJLfsEQvQvmJQvHpQvLfQvQvQvQvmJLfQvsEQvHpLfqDQvQvLfQvMIHpQvpVQvqDQvZlQvQvLfQvQvMIuOZlQvqDpVQvsEQvQvpVQvqDZlQvQvqDQvHpQvZlQvmJQvfOQvQvsEMIQvfOQvZlMIQvmJpVHpaZaXaXaXaYsEQvQvZlmJQAQvZlsEqDHpmJZlQvXEQvQvBCMIQvMCJpVYhQMCyZyZjHMCJpMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa -aaaaababababababababababababababababababababababababababMIZlababababababababQvsEQvHpQvQvQvpVQvuBQvQvpVuBQvZlQvfOQvQvLfQvHpQvMIQvLfQvMIyTQvbCQvyTQvyTQvyTQvyTQvyTQvyTZlQvsEHpQvQvQvQvuOMIQvLfQvmJQvsEQvQvMIfOQvsEMIelQvuBQvLfQvqDsWQvpVQvQvsEQvLfqDQvsEuBaZaXaXaXaYQvqDQAQvqDQvHpQvQvQvQvQvLfQvQvQvyAMCMCjZVYVYVYMCUcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa -aaaaababababababababababababababababababababababababababQvLfQvHpabababababZlQvQvMIQvqDQvmJQvQvQvHpQAQvQvLfsEQvMIQvmJQvQAqDQvfOQvQvqUuBQvQvQvQvQvQvQvQvQvQvilQvQvQvQvQvuBQvqUQvnYQvQvZlQvuOQvelQvuBaTmTmTmTaVpVQvQvQvHpQvmJMIsEHpuBQvQvMCtcQvqDmJuBQAQvZlaZaXaXaXaYQvZlQvuBQvmJQvQvmJLfpVMIQvVYVYqDKZMCJpVYhtVYjZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHFgyZyZyZyZyZyZyZyZUcyZyZKZqfjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZababababaaaa -aaaaababababababababababababababababababababababababababqDHpsEQvpVQvababqDQvQAHpQvpVsEQvuBHpQvmJQvQvMIQvQvqDZlQvQvQvHpQvZlQvQvmJHpZlQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvQAQvQvQvQvuOuBQvLfQvQvQvQvHpaZbmbnaXaYQvQvmJpVQvKZyAMCtcMCKZZlMCJpMCyAQvHpQvsEHpQvaZaXaXaXaYQvmJQvLfsEMILfQvQvhCVYMCMChQVYyAMCMCyAVYVYVYVYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZKZjHMCMCyAMChQVYdQjHyZyZjHyZyAyZMCFgJpyAababKZtcFgyZyZyZjHFgtcJpyZyZyZyZyZyZyZyAababababaaaa -aaaaabababababababababababababababababababababababababZlQvMIQvQvQvMIfOQvQvZlQvQvQvQvQvLfQvQvLfQvHpfOQvmJHpQvQvQAQvpVQvQvFgMCJpQvsEQvuBQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvqDmJZlQvJpMCKZQvLfHpMImJQvbobnbpbnaYLfQvQAQvJpMCVYryMCJpMCyAKZqfMCMCZlfOQvmJMIQAaZaXaXaXaYLfQvHpqDQvKZMCqfMCVYryMCJpMCgCjHFgMCyZyZyZjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAMCtcMCMCyAMCMCMCgCVYVYMCMCtcMCMCKZMCyAabababababababjHqfUcyAKZababKZqfUcyAyZyZyZqfJpababababaaaa -aaaaababababababababababababababababababababababababababQvmJpVQvmJHpQvQvHpQvHpLfQvHpQvQvyFQvqDMIQvQvuBLfQvfOQvqDLfQvMCKZMCqfMCMCKZJpQvyTQvyTQvyTQvyTQvyTQvyTQvbCQvyTQvLfQvMIQvMCMCMCtcMCUcQvqDQvmJaZaXbnaXaYQvZlQvQvUcMCqfMCFgMCyZjHFgyZMCUcMCuBHpqDpVQvaZaXaXaXaYuBQvfOQvVYdQMCFgMCtcMCyAyZyAjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCKZMCMCMCKZQvFgqDMCMCTuhtVYgCMCUcagMCJpMCabababababababababababababababababJpKZtcyAFgabababababaaaa -aaaaabababababababababababababababababababababababababababQvQvLfpVQvsEpVQvmJqDQvmJsEQvpVQvMIsEQvmJZlQvQvQvQvMIuBtcMCJptcFgMCUcyAiXMCUcQvQvHpQvpVQvQvHpQvZlQvfOQvuBQvHpMCMCtcKZMCagVYFgMCVYVYHpZlQvbbbdbdbdbeqDQvMCtcVYMCKZyZyZyAyZyZyZyZyAMCKZqfQvLfQvFgaZaXaXaXaYQvsEUcKZVYLKyZyZKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHVYryagMCFgQvmJQvMIfOQvQvyAMCMCMCMCyAMCVYMCLfQvfOababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababfOZlQvQvQvsMQvQvQvQvuBQvfOMIQvsWQvQvqDQvQvmJpVQvsWQvHpMCKZjHyZyZyZyZyZjHtcMCMCKZqfMIQvqUQvMIQvmJqDHpQvLfQvMCFgyAMCMCUcVYVYKZtcMCyAKZJpQvLfQvMImJuBelQvMCFgLKyAyZyZyZyZyZyZyZyZyZyZyZjHKZJpLKUcaZaXaXaXaYKZJpjHMCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAjHMCJpyAVYVYVYKZQvqDQvLfHpuBQvmJQvLfMCUcMCMIsEfOQvelHpQvababababababababababababababababababababababababababaaaa +aaaaababababababababUCUCUCUCUCUCUCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaababababababababUCalrXawrXrXUCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaababababababababUCrXbEbJbKrXUCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaababababababababUCrXbMbNbOrXUCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaababababababababUCrXbTbVbWalUCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaababababababababUCbXrXJcrXrXUCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaababababababababUCUCUCbYUCUCUCababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCJbPiRtUCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCRtPiNhUCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhbZJbUCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhcacpUCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCcyPiNhUCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsababababababababababababababababababababababababababababababababababababLsLsababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCakPiRtUCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsabababababababababababababababababababababababababababababLsababLsLsLsLsLsLILsLsLsLsabababababababababababababababababababLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCakakNhUCabababababababababababababababLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLILsLsLsLsLsLsLsabababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsabLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababajajakakUCababababababababababababababLsLsLsBRLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsabababababLsabLsababababLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababajajajakUCabababababababababababababLsLskeLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsababababababababababababababababababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsababLsLsLskeLsLsLsLILsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababajajakakUCababababababababababababLsLsLsLsLsLsLsaWLsLsLsLsLsababababababLsLsLsLsLILsBRLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababajamakakUCababababababababababababLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsLskeLsLsBRLsLsaWLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLILsLsLsBRLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababajakakajajajababababababababababababLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLILsBRLsLILsLsLsaWLsLsLsLILsLsLsLsabababLsLILsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLsLsLILsLsBRLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababajakakakajajajabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLILsLsLsBRLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsBRLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababaaaa +aaaaabababababababababajakakakakakajajajabababababababababababLsLsLsLsLsLsLsLILsLsLsLsBRLsUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsBRLsLskeLsBRLsLsLsLsabababLsLsBRLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsLsLsLsLsUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaabababababababababajakakamakakakakajabababababababababababLsLsLsBRLsLsBRLsLsLsLsLsLsLsUCKYUFTnUCKYUFTnUCkQcsUCKYUFTnUCKYUFTnUCLsLsLsLsLsLsLsLsabababababababLsLsLsLsLILsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsBRLsabababababababababLsababLsLsLsLsLsLsLsLsUCrXrXDDvzyOvzvzrXrXUCazaHaIaJaKUCwPPiUCNhNhczeGjaeGczNhNhUCLsLsLsLILsBRLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababajajakakakakakajajajajababababababababLsLskeLsLsLsLsLsLsLsLskeLsLsLsUCGVUFWaUCGVUFWaUCeQVZUCvMUFDzUCvMUFDzUCLsLsLILsLILsLsababababababababLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsLsLsLsLsLsBRLILsabababababababababababababLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLILsLsUCrXrXnRQxjFQxnRrXrXUCNhNhOMNhNhmtPiqCUCNhEhczltczczmvNhBeUCLsBRLsLsLsLsLsLsLsLsLsBRLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababajajajajakakajajakakajababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsUCUFUFUFUCUFUFUFUCaqcsUCUFUFUFUCUFUFUFUCLsLsLsLsLsLsababababababababababLsLsLsUCUCUCUCUCLsLsLsLsLsLsLsLsLsBRLsLsLILsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCMxrXrXrXrXrXrXrXNvUCaLZMvfuANhUCPiQgUCmBmBPibQPiPiPimBmBUCLsLsLsLsLsLsLsLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababajajakajajajakakakakakajababababababababLsLsLsLsLILsLBLsLsaWLsLsLsLsLsUCUCXWUCUCUCXWUCUCUCSPUCUCXWUCUCUCXWUCUCLsLsLsLsBRLsababababababababababLsLsLsUCRylgvcUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsBRLsUCrXNrrXPiPiPirXrXrXUCUCUCUCUCUCUCJcPiUCohqBJcrXrXrXPimBwZUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababajajakakakakajakakamakajajabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsUCDrWhvOWhWhWhACWhWhWhWhACWhWhWhWhWhWhUCLsLsLsLsababababababababababababLsLsLsUCcsQZcsOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLsabababababababababababababababababLsBRLsLsababababababababababababababLsLskeLsLsLsLsLsUCNhNhNhPiPiPiPiPiPiJmPiQgPiPibQPiPiqCUCDfmBPirXoSrXPiFrFIUCLsLsLsLsLsLsLsLsLsLsLsLskeLsababababababababababababababababababababababababababababaaaa +aaaaabababababababajajakakakakakakakajajajababababababababababLsLsLsLsBRLsLsLsBRLsLsLsLsLsUCWhWhWhWhWhWhWhWhvOWhWhWhWhvOWhWhWhWhUCLsLsLsabababababababababababababLsLsLsUCcscscsUCLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababLsLsLsLsLsLsLsabababababababababababababLsBRLsLsLsLsLsLsUCNhNhNhPiPiPiPiPiPiJmkpwPPiJcPiPiPiPiUCohIvwPrXrXrXPimBKcUCLsLsBRLsLsLskeLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababababababajajakakajakamakakakajajajabababababababababLsLsLsLsLsLsLsLsLsLsLIBRLsLsLsUCUCsnUCUCUCUCUCUCUCUCUCUCUCUCUCUCsnUCUCLsBRLsababababababababababababLsLsBRLsUCUCfNUCUCUCUCUCUCLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLsLsLILsLsabababababababababababababLsLsLsLsLsLILsLsUCNhNhNhPiPiPiNhOMNhUCUCUCaMUCUCUCwPbQUCmBmBetPiLJPiJcmBmBUCLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababajakakakajajakajajajajababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsUCROWhROLprUCcbLWWKmKmWWbLCcrUnnROWhROUCLsLsLsabababababababababababLskeLsLsLsUCcscsIadbPGcsEnUCLsLsLsLsLsLsLsLsLsabababababababababababababababababababababLsLsLskeLsLsLsLsababababababababababababLsLsLsLsBRLsLsLsUCKGKGKGPiPiPiKGKGKGUCaNaPNhaPaNUCPiPiUCRtJbNhPiPiPiNhBeNhUCLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababajamakakajajajajajababababababababababababLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsUCDrvOWhEdEdEdEdEdEdEdYvEdEdEdEdWhvODjUCLsLsLsLsababababababababababLsLsLsLsLsUCJXcscscsQZcsapUCLsLsBRLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababLsLILsLsLsaWLsLsUCnXNhNhPiPiPiNhNhtIUCoXNhOMNhNhUCQgqCUCNhNhNhPikpPiNhNhRtUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaababababababajajakakakakajajababababababababababababababLsLsaWLsLsLsLskeLsLsLsLsaWLsLsUCWhWhznnnEdYvEdEdEdEdEdEdEdEdnnznWhWhUCLsHELsLsabababababababababababLsLsLsLsUCUbUIQZcscsKQEnUCLsLsLsLsLILsLsLsabababababababababababababababababababababLsLsLBLsLsLsLsLsababababababababababababababLsLsLsLsLsLsLsUCKGKGKGPiPiPiKGKGKGUCNhNhNhNhNhUCPiPiUCUCUCUCcjUCcjUCUCUCUCLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsababababababababababababababababababababababababaaaa +aaaaababababababajajajakakajajajababababababababababababababLsLsLILsLsLsLsLsLsLsLsLsLsLsLsUCywWhznyCnnnnnnnnnnnnnnnnnnnnyCznWhywUCLsLsLsLsabababababababababababLsLsLsLsUCWRcscscscscsapUCLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLILsLsLsababababababababababababababLsLsLsLsLsLsLsUCNhNhNhPiPiQgNhNhNhUCNhvfNhvfNhUCPiJckMPiPiPiwPERPiPiPiUmUCLsLsLsLsLsLsLsLILsBRLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa +aaaaababababababababajakakakakajababababababababababababababLsLsLsLsLsLsBRLsLILsLsLsLsLsLsUCoxWhWhznznznznznznznznznznznznvOWhCpUCLsLsLsLsLsLsababababababababLsLsLsLsLsOvOvOvAOOvOvAOOvUCLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLskeBRLsLsUCKGKGKGPiPiPiKGKGKGUCaQaRNhaRNhUCPiPiPiQgPiJcPiPiPiPiPiQgUCLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaababababababababajUCakakakajabababababababababababababLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsUCMDVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGIkUCLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLsvvdbapcsmadbcscsOvLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsUCnXNhNhPiPiPiNhNhtIUCNhvfNhvfOMUCUCUCUCUCUCUCUCmtUCUCUCUCUCLsLskeLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsababababababababababababababababababababababababaaaa +aaaaabababababababababUCXJamakajababababababababababababLsLsLsBRLsLsLsLsLILsLsLsLILsLskeLsUCbPVkWhvOWhEdRCEdWhvOEdRCEdWhWhWhfmozUCLsLsLILsLsLsLsLsabababababLsLsLsBRLsLsvvxGcscscsahtNQZOvLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababLsLsLsLILsLsUCKGKGKGPiPiPiKGKGKGUCNhaROMaRNhUCJhPWOKNhaSPWaiNhNhmbPWSIUCLsLsLsLsLsBRLsLsLskeLsLsLILsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababUCRtPiakUCabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsUCbPVGWhWhWhEdEdEdWhWhEdEdEdWhWhWhVGozUCLskeLsLsLsLsBRLsLsabababababLsLsLsLsLsOvxGQZcscsapcscsOvLskeLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsBRLsLsLsLsLsBRBRLsLsLsabababababababababababababLsLsLsLsLsLsUCNhNhOMPiPiPiNhNhNhUCoXLMNhvfNhUCayNhOMNhNhOMNhNhOMNhNhdOUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababUCJbPiNhUCabababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsUCTbDxWhWhWhvOWhWhWhWhWhWhWhvOWhWhxTRXUCLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsvvxGcsKQcsahtNcsOvLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababababababLsLsLsLsLsUCHiNhNhPiPSPiNhNhHiUCNhaRNhaRNhUCayNhaSNhaiNhaiNhNhwFNhdOUCLsLsLsLILsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCcpcacyUCabababababababababababababLsLsLILsLILsLsLsLsaWLsLsLsLsBRLsUCUCUCUCUCWhtChcBZWhWhBZtChcWhUCUCUCUCUCLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLskeLsOvxGcscsQZapcscsOvLsLsLsaWLsLsLsLsLsLsLsababababLsabLsLsabLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsBRLsababababababababababababababLsLsLsLsUCUCUCUCJmqKJmUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLsLsLsLsLsLsLsBRLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCcyPiJbUCababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsUCWhWhWhUCUCUCUCWhWhWhUCLsLsLsLsLsLsaWLsLskeLsLsLsLsBRLsLsLsaWLsLsLsLsvvxGcscscsaptNcsOvLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsaTaUaUaUaVLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCcyPiRtUCababababababababababababLsLsBRLsLsLsLskeLsLsLsLsLsLsLsLILsLskeLsLsUCRxBPWhUCyvuRUCWhBPRxUCLsLILsLsLsBRLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsvvdbapcscsdbcsKQOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsabababababababababababababababLsLsLskeLsLsuIaXaXaXaYLsLsLsLsLsLsLsLILsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCRtPiNhUCababababababababababababLsLsLsLsLsLBLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsUCUCUCpIUCuIaYUCpIOvUCUCLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvOvOvSPSPOvvvvvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsLILsLskeLsLsLsLsLsLsLsLsLsLsLILsLsBRLsLsLsLsLsBRLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhwPXJUCababababababababababababLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaTaUaUFwaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaVLsLsLsLsabababababababababababababababLsLsLsLsLsBRuIaXaXaXaYLsLsLsLsBRLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhJcNhUCabababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsabababababababababababababababababLsBRLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCRtPiRtUCabababababababababababLsLsLskeLsLsLsLsLsLILsLsLsLsLsababLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsabababababababababababababababababLsLsLsLsLsuIaXaXbaaYLsLsLsaWLsLsLsLsLsLsLskeLsLsLsBRLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhPiNhUCabababababababababababLsLsLsLsLsLsLsLsLsLsLsBRLsLsabababababLsLsLskeLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsababababababababababababababababababLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsababababLsLsLsLILsLsLsLsLsLsBRLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCcyPiakUCababababababababababababLsLsLILsLsLsLsLsLsLsLsLsabababababababLsLsLsLsbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdxnaXaXaXaYLsLsLsabababababababababababababababababLsLsLsLILsuIaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhbZakUCabababababababababababababLsLsLsLsLsLsLsLsBRLsLsababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsaWLsaZaXaXaXaYLsLsLsLsabababababababababababababababLsLsLsLsLsLsuIaXaXaXaYLsLsBRLsLsLsLsLsLsLsLsLsLsababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababajajajUCNhakakUCabababababababababababababLsLsLsLsLsaWLsLsLsLsLsLsLsabababLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsBRLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLskeLsLsababababababababababababababLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLBLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababajakakUCakakakajabababababababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsaWLsLsLILsLsLsLILsLsLILsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsabababababababLsLsaZaXaXaXaYLsLsLsLsabababababababababLsababababLsLsLsLskeLsLsuIaXaXaXaYLsLsLsLsLILsLsLsLsLsababababababababababababLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababajajakakakakajajababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsababLsLsLsLsBRLsLsBRLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsHELsLsLsLsLsLsLsLsLsabababababababababababLsaZaXaXaXaYLsLsLsababababababababLsLsLsababLsLsLsLILBLsLsLsLsuIbaaXaXaYLsLILsLsLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaabababababababajamakakajajajabababababababababababababLsLsabLsabLsLsLsLsLsLsLILsLsLsBRLsLsLsLsLsLsLsLsababababLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababLsLsaZaXaXaXaYLsLsLsLsLsababababababLsLsLsabLsLsLsLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLsBRLsLsLsababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababajajakakakajajababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsabLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsBRLsLsLsLsBRLsLsababababababLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsBRLsLsLsLsaWLsuIaXaXaXaYLsLskeLsLsLsLsLsLsababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsaWLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababajUCakakajajababababababababababababababababababababLsLsLsLsLsBRLsLILsLskeLsLsLsLsabababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsaWLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLILskeLsLsLsLsLILsLsLsLsuIaXaXaXaYLsLsLsLsLsLsLsLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababUCXJakakUCababababababababababababababababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsababababLsBRLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLILsLsLsLsLsBRLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsuIaXaXaXaYLsLsLsLsLILskeLsLsabababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababUCJbPiakUCabababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLILsLsLsLsLsBRLsLsLsabababababababababababLsLsLsLsLskeLsLsababababababLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaXaXaXaXaYLsLsLsLsLsLsLsLsqwqwababababababababababababLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababUCRtPicyUCabababababababababababababababababababababababababababababababLsLskeLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsabababababababababababababababLsLsLsLsLsLsabababababababababLsLILsLsLsabababababLsLsBRLsLskeLsLsLsBRLsLsLsLILsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLILsLsLsLsqwqwXgababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhceRtUCababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsLsababababababababababababababababababLsLsLsLsababababababababababLsLsLsabababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsLsLsLsabababqwabababababababababababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababUCcywPNhUCababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsLsLsLsLsabababababababababababababababababababababLsababababababababababababababababababababababababLsLsLsLILsLsLsLILsLsLsLsLsLsLsaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYLsLsLsLsLsLsabababqwqwqwababababababababLsLsLsLsvuLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhJcNhUCababababababababababababababRMRMRMRMRMRMRMRMRMabababababababababLsLsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsBRLsLsLsLsLsLsLsaWLsLsLILsaZaXaXaXaXbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbeLsBRLsLsLsabababqwqwqwqwabababababababLsLsLILsLsLsLsLsLsvuLsLsLILsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhPicyUCababababababababababababababRMLsLsLsRMLsLsLsRMRMRMRMRMabababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababqwabababababababLsLsLsLsLsvuLsaELsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCcpbZNhUCababababababababababababRMRMRMLsLILsLsLsLsLsLsLsLsLsRMRMabRMRMRMMrMrMrMrXHMrMrMrMrababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsababababqwXgabababababababLsLsLsLsLsLsLsLsLsLsLsLsaFLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCNhPiRtUCababababababababababababRMLsLsLsLsLsLsLsLsLsImLsLsLsLsRMRMRMLsLsLsLsLILsLskeLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLILsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababqwqwababababababLsLsLsLsLsLsLsaCLBLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababUCRtPiNhUCababababababababababababRMLsLsLskiLsLsXpLsLsLILsLsLsLsLsRMLsLsLsLsImLsLsLsLsLskeLsabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLILsLsLsLsLsLsaZaXaXaXaYLsLsaWLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsaWLsLsLsLsLsLsababLsabababababqwqwabababababLsLsLsLsvuLsLsLsaWaDLsLsLsLsLsvuLsLsLsLsLsabababababababababababUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCUCabaaaa +aaaaabababababababababUCNhPiNhUCUCUCUCUCUCUCUCUCUCUCUCUCUCLsLsLsLsLsLBLsLskeLsLsUsLsLsLsLsLsTXLsLsLsLsLsLsXpkiLsLsababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsababababLsLsLsababLsLsLsLsLsLsLsLsababababababababababXgqwqwqwababababLsLsLsLsLsLILsLsLsLsLsLsvuLsLILsLsLsLsvuLsLsLsababababababababababUCCACAUCUCUCCACAUCCACAUCUCUCCACAUCabaaaa +aaaaabababababababababUCcyJcNhXJNhNhRtNhNhXJNhNhNhcyNhNhUCLsPhLILsLsLsLILsLsLsLsLsrhLsLsLILsLsLsLsaWLsLsLsLsLsLsLsLsababababababababLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsabababababababababababababLsLsLsLsLsabababababababababababqwqwabababababLsLsLsvuLsLsLsLsaBLsLsLsLsLsLsLsaALsLsLsLsLsLsLsababababababababababUCCACAUCUCUCCACAUCCACAUCUCUCCACAUCabaaaa +aaaaabababababababababUCNhPitTPiPiPiPiPiwPPiPiPiwPakPiPibYLsPhLsLsImLsLsLshKLsLsLsLsLsLsLsLsLsXpLsLsLsLshKLsLsLsUsLsLsLsababababababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsaWLsLsLsLsaZaXaXaXaYLsLILsLsabababababababababababababababababLsLsLsababababababababababababqwabababababLsLsLsLsLsvuLskeLsLsvuLsLsLsLsLsLILsLsLskeLsLsLsLsabababababababababUCIAsrUCZpUCIAsrUCIAsrUCZpUCIAsrUCabaaaa +aaaaabababababababababUCXJRtNhNhNhcyNhNhNhJbakXJakakcyNhUCLsPhLsLsLsLsLsLsLsLsLBTXLsLsLsLBLskeLsLsLsLsLsLsLBLsLILsLsLsLsababababababLsLILsLsabababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLsLsLsabababababababababababababababababababababababababababababababqwqwabababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsvuLsLsLsLsLsLsabababababababababUCPiQgPiPikMoyoyPioyoykMPiPiQgPiUCabaaaa +aaaaabababababababababUCUCUCUCUCUCUCUCUCajakakakakakajUCUCLskeLsXpLsLsLsXpLsLsLsLsLskebALsLsLsLsLsXFLsLskeLsLsLsLBLsLsLsabababababababLskeLsLsabLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLsLsLsababababababababababababababababababababababababababababababqwXgababababababababLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababUCuwoyCfCfCfQguwnKEYQgCfvZCfoynQUCabaaaa +aaaaababababababababababababababababababajakamakakajajabRMRMLsTXLsLsLBLskeLsLsIQLsLILsLsLsXpLsLsLsLsLsLsbALsLsLsLsXpLsLsLsLsababababababLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababLsLsLILsLsaZaXaXaXaYLsLsLsLsLsababababababababababababababababababababababababababababqwqwqwabababababababababababababababLsLsLsLskeLsababLsLsLsLsLsLsabababababababababababUCKghMUHkyUHMMiKqrnQhMUHUHUHMMKgUCabaaaa +aaaaabababababababababababababababababababajakakajajababRMRMLsLsLsLsLsLsLskiLsLsLsXFLsLsLsLsLsLILsTXLsXpLsLsLsTXLsLsLsLILsLsababababababLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsLsLsababababababababababababababababababababababababababababqwqwababababababababababababababababababLsLsLsLsabababababababababLsabababababababababUCnGhMUHUHUHMMKguwSshMUHUHUHMMesUCabaaaa +aaaaabababababababababababababababababababajajajajababRMRMLsLsaWLsLsXpLsLsLsLsLsLsLsLsLsImhKLskeLsLsLsLskeLsLsLsLsLsLsLsLsLsMrLsLsLsababLsLsLsLILsLsababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsLsLsabababababababababababababababababababababababababababababqwqwabababababababababababababababababababLsLsLsabLsLsababababLsLsLsababababababababUCuwhMUHUHUHMMPdpYGShMUHUHUHMMuwUCabaaaa +aaaaababababababababababababababababababababajababababRMLsLsLsLsImLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLBLsLsLsLsLsImLsLsLsXFLsLsLsMrLskeLsLsLsLsLsLsLsLsLsabLsabababLsLsLsabLsabababababababababababababababababababababababababababababababababababXHXHXHXHXHbfbgbgbgbhXHXHXHXHababababababababababababababababababababababababababababababqwqwabababababababababababababababababababLsLsLsLILsLsLsLsLsLsLsLsabababababababababUCKghMUHUHUHMMjziKDahMUHUHUHMMnQUCabaaaa +aaaaabababababababababababababababababababababababababRMRMLsLsLsLsLsLILsLsImkiLsXpLsLBLsLsaWLsLsLsLILsLBLsLsLsLsLsLsLsLsQNQNuaQNQNQNLsLILsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsabababababababababababababababababababababababababqwabqwqwqwababXgqwababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababUCuwhMnCUHUHMMrLwcrLhMUHUHxAMMKgUCabaaaa +aaaaabababababababababababababababababababababababababRMLsLsLsXpLsLsbALsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsUsLsLsLsLsLsMrLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLsLskeLsLsaZaXaXaXaYLsLsababababababababababababababababababababababababYwqwqwDMqwqwqwqwqwqwababababababababababababababababababababLsabababababLskeLsLsLsLsababababababababUCsRhMUHUHUHMBCfGYCfHcUHUHUHMMKvUCabaaaa +aaaaabababababababababababababababababababababababababRMLsLsUsLsLsLsLsLsLsLsLILsLskeLsbALsLsLskiLsLsXpLsLsLsLsLsLsLsImLsLsLsMrLsLsLsLsLsLsLsLsLsLsLsababLsLsLsLsLsLsLskeLsLIabababababababababababababababababababababababababababababababLsLsLILsLsLsLsaZaXaXaXaYLsLsabababababababababababababababababababababababqwqwXgqwqwqwYNqwqwqwqwababababababababababababababababababababababababababLsLsLsLsaWLsLsabababababababUCvXhMUHUHUHUHUHUHUHUHUHUHUHMMwCUCabaaaa +aaaaabababababababababababababababababababababababababRMLsLsLsLsLBLsLsLsLsXFLsLsUsLsLsLsLsHELskiLskeLsImLsLsLsXpLsLsLsLsLsabababLsLsLsLILsLsabLsLsLsabababLsLsLskeLsLsLsLsLsLsabababababababababababababababababababababababababababababababLsLsLsLILsLsaZaXaXaXaYLsLsababababababababababababababababababababababababqwqwqwXgZWYwqwXgqwababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababUCnKhMUHUHUHUHUHFkUHUHUHUHUHMMuwUCabaaaa +aaaaabababababababababababababababababababababababababRMRMLsLsLsLsLsXpLsLsLskeLsLsLsTXLsLsLsXFLsLsLsLsLsLsaWLsLsLsLBLsLsLsabababababLsLsLsLsababLsLsLsababababLsLsLsLsLsLsLsLsLsLsabLsLsLsabababababLsLsabLsLsLsabababababababababababababababLsLsLsLsLsaZaXaXaXaYLsLILsabababababababababababababababababababababababXgqwYNqwqwqwqwqwqwababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababUCuwhMUHUHUHUHUHUHUHUHUHUHUHMMKgUCabaaaa +aaaaababababababababababababababababababababababababababRMRMLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsLsLskeLsLsLsLsababababLsLsLsLsabLsLsLsLILsabababLsLsLsLILsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsababababababababababababababababLsLsLsLsaZaXaXaXaYLsLsLsababababababababababababababababababababqwqwqwqwqwXgqwYwDMqwqwqwqwababababababababababababababababababababLsLsLsLILsLsLsLsLskeLsabababababababababUCnQPiBhrSBhBhBhBhBhBhBhBhBhPiVdUCabaaaa +aaaaabababababababababababababababababababababababababababRMRMRMLsLsLsLsImLsLsLILsRMLsLsLsLsXpLsLsLsLBLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsababLsLsLsLsababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsaZaXaXaXaYkeLsLsabababababababababababababababababababqwqwqwabqwqwqwqwqwqwqwXgqwababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababababUCKguweIBjVdKguwzcKgnKoyPiEtqRnKUCabaaaa +aaaaabababababababababababababababababababababababababababababRMRMRMLsLsLsLsLsLsRMRMRMRMLsLsLsLskeLsLsLsLsLsImLsLsLsLsababababLsLskeLsLsLsabLskeLsLsababLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsLsOvOvOvOvOvOvOvOvOvLsLsLsLsLsababababababababababLsLsLILsLsaZaXaXaXaYLsLsLsabababababababababababababababXgqwqwqwqwabababqwXgabababqwqwqwqwabababababababababababababababababababababLsLskeLsLsLsLsLILsLsababababababababababUCUCUCUCUCUCUCUCUCUCUCQgPiUCUCUCUCabaaaa +aaaaabababababababababababababababababababababababababababababababRMRMLsLsLsLsLsRMababRMRMLsLsLsLsLsLsLsabababababababababababLsLILsLsLsQNQNQNLsLsLsLsLsLsLsLsabababLsLsLsLsababLsLsLsLsLsLsLsOvapcsOpOpOpAzdbOvLskeLsLsLsLsLsLsLsLsLsababababLsLsLsLsLsaZaXaXaXaYLsLsababababababababababababababqwqwqwqwqwXgqwababababababababqwabababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababUCCACAUCPiPiUCCACAUCabaaaa +aaaaababababababababababababababababababababababababababababababababRMRMRMRMRMRMRMabababRMRMRMRMabababLsabababababababababababababLsLsLsLsabLsLsLILsLsLsLsababababLsLsLsLsLILsLsLsLsLsLsLsLILsOvancscscscscsaoOvLsLsLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsaZaXaXaXaYLsLsLsabababababababababababababqwqwqwqwababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababUCCACAUCPiPiUCCACAUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsabababababLsLsLsLsababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvdbcscscscscsapOvLsLsOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsababababababababababababababqwXgabababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababUCeCNhUCIcIcUCeCNhUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsababababababLsLsLsLsabLsLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsOvOvOvOvXiOvOvOvOvLsLsOvdbcscsapOvLsLILsLsLsLsLsLsLskeLsLsaZaXaXaXaYLsLsLsababababababababababababqwqwqwababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababababababUCNhNhNhQgQgNhNhNhUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLskeLsLsLsababababababLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsabababababababababqwqwqwababababababababababababababababababababababababababababababababababababLsLsLsLsLILsLsLsLsaWLsLsLsLsLsLsabababababababababababababababUCnXNhNhPiPiNhNheZUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsabababababababLsLsLsOvNhNhIPIPIPNhNhOvLsLsOvfUcscsapOvLsLsLsLsLsLsaWLsLsLsLsLsaZaXaXaXaYLsLILsLsLsLsabababLsLsababqwqwababababababababababababababababababababababababababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLskeLsLIHEababababababababababababababUCNhOMUCPiPiUCOMNhUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwqwqwqwqwabababababababababababababababababLsLsLsLsLsLsLsLILsLsLsabababababLsLsLsOvNhZMmdadvfuANhOvLsLsOvFMcscsjeOvLsLsLsLsLsLsLsLsLsLILsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsabqwababababLsababababababababababababababababababLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsabababababababababababababababUCNhNhNhPiPiNhNhNhUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwqwqwqwqwqwababababababababababababOvOvOvOvOvOvOvOvLsLsLsLsLsLsLsLsLsababLsLsLsLsOvNhNhKGKGKGNhNhOvLsLsOvWRcscsapOvLsLskeLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsabababLsLskeLsLILsLsabqSabLsLsLsLsLsababababababababababababababababLsLsLsLsLsLsLILsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababUCNhNhNhPiPiNhNhNhUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwqwqwqwqwqwqwababababababababOvdbPDPzFAFAdbOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsOvFcNhNhNhNhNhFcOvLsLsOvdbcscsjeOvLsLsLsLsLsLsLskeLsLsLsLsaZaXaXaXaYLsLsLsabababLsLsLsLsLsLskeheLBLsLsLskeLsLsabababababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLBLsLsLsLsLsLsLILsLsLsLsLsababababababababababababababababUCNhOMUCPiPiUCOMNhUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwabababqwqwqwqwqwaeqwqwabOvcscscscscscsOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsOvOvofOvMuOvofOvOvLsLsOvOvXiOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsababLsLsLsLsLsLsheLsLsaWLsLsLsLILsababababababababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababababababababUCNhNhNhPiPiNhNhNhUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwabqwqwqwqwqwvhcscscscsOvWLvvcsdbOvaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUxnaXaXaXaYLsLskeLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsabLsLsabababababababababababababababababUCnXNhNhPiPiNhNheZUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababqwabababababababababababababababababqwqwqwabOvcscscsmFvvFQvvcscsgIaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLsLsLsLsabababLsLsLsLsLsabababLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababUCNhOMUCPiPiUCOMNhUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababqwqwqwqwqwqwababababababababababqwqwqwqwabababOvcscscscsWOIevvcscsOvaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLsLsLsLsLsLsabababLsLIabababababababLsLsLsLILsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVZlQvLsLsLsabababababababababababababababababababababUCPiPiPiPiPiPiPiPiUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababqwqwqwqwqwqwababababababTDababqwqwqwqwababababOvdbcsOvvvvvFQvvcscsgIaZxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnxnaXaXaXaYLsLsLsLILsLsLsLsLsLsabababababLsLsLsLsLsabababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsMIQAQvLsLsLsLsLsLILsLsLsQvQvuBQvQvZlLsLsabababababababababababababababababababababUCPiPiQgPiPiQgPiPiUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababqwqwababqwqwabqwqwqwqwqwqwqwqwqwabababababababOvcscsYPdzdziAvvcscsOvbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdxnaXaXaXaYLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsQvQvZlHpQvpVQvuBLsLsLsLsHpqDQvLfQvmJQvqDLfQvabababababababababababababababababababababUCPiPiUCUCUCUCPiPiUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwababqwqwqwqwabababababababababOvcscsOvOvOvOvOvcscsOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsOvvvOvXiOvOvOvLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLskeLsLsLsLsLsLsQvLfQvqDQvuBLfQvLfQvQvQvZlQvQvQvZluBZlQvQvuBabababababababababababababababababababababUCPiPiUCCACAUCPiPiUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqwqwababababababababababOvcscscscscscscscscsOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsOvdbtNcscsOpOvLsLsLsLsLsaWLskeLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsQvpVQvZlsEMITIQvQvQvMIQvmJZlQvmJnYQvMIQAQvuBQAQvZlababababababababababababababababababababUCPiPiUCCACAUCPiPiUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababqwqwabababababababababababOvdbcscscsdbcscscsdbOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsOveecscscsOpOvLsLILsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLILILsLsLsLsLsLsLsLsLsLsLsLsLsLsQvLOQvQvMIQvQvQvpVQAQvmJHpsEuBQvcIQvQvuBQvQvsEMIHpQvQvababababababababababababababababababababUCAcPiUCeCNhUCPiycUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwababababababababababOvOvOvOvOvOvOvOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsOvcscsOvOvOvOvLsLsLsLsLsLsLsLsLsaZaXaXaXaYOvOvOvOvvvvvOvOvvvvvOvOvOvOvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLspVQvQvHpQvuBfOQvmJLfQvQvQvuBZlQvQvqDfOQvsEHpQvqDmJQvQvQvsEuBHpLfQvabababababababababababababababababUCQgPiPiPiPiPiPiQgUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwqwqwababqwqwqwababababababLsLsLsLsLsLsLsLsLsLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsOvcscsOvAzdbOvLsLsOvOvOvOvOvOvOvaZaXaXaXaYOvNRCOCOVJeJyMLqTEfBWBcseLOvLsLsLsLILsLsLsLsLsLsLsaWLsLsLsLsLfLsMIQvsEZlQvpVQvQvQvrCQvHpQvmJMIQvQvmJZlQvZlQvQvZlQvQvpVQvTIQvfOQvQvpVQvZlabababababababababababababababUCPiPiPiPiPiPiPiPiUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababqwababqwqwqwqwqwqwqwqwqwababababababLsLsLsLsLsLsLILsLsLsLsOvcscsOncsarOvLsOvcscsOncsasOvLsOvcscsOncsatOvLsOvcscsOncsauOvLsLsOvFcZhZhNhNhOvaZaXbjaXaYOvcscscscscscscscscscscseLOvLsLsLsLsLsLsLsLsLsLsLsLsLsZlQvQvQvQvQvqDQvQvQvQvsEQvQAQvQvmJQvQvsELfQvHpsEQvQvHpQvmJsEQvHpuBQvHpMIQvmJQvmJHpabababababababababababababababUCUCUCUCPiPiUCUCUCUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababqwqwqwqwqwqwqwqwababababababababababababLsLskeLsLsLsLsLsLsLskeLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsOvOvOvOvOvOvOvLsLstjNhNhNhNhNhOvaZaXaXaXaYOvnacsdbcscscscscscsdbcseLOvLsLsLsLsLsLsLsLsQvQvQvQvqDQvQvmJpVQvmJQvmJuBfOQvZlQvMIZlQvQvpVQvQvQvqDQvQvQvmJLfMIQvQvLfsELfilmJsEQvLfQvqDQvQAababababababababababababababUCCACAUCPiPiUCCACAUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababqwababqwqwqwabababqwqwababababababababababababLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsOvLzNhikOvNhOvaZaXaXaXaYOvOvDFOvXiOvOvOvOvXiOvOvOvOvLsLsLsQvLfQvsEQvQvmJHpfOQvLfuBMIQvsEQvHpQvMIQvmJqDfOQvsEuBLfQvQvmJbiQvmJLfuBQvQvQvpVQvqDQvQvHpQvqDQvZlQvHpabMIababababababababababababababUCCACAUCPiPiUCCACAUCabaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababqwqwqwqwababababababqwqwababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsOvLzNhikOvNhNhaZaXaXaXaYofFcNhNhNhNhRLFcNhNhNhNhFcOvLsQvQAZlQvqDQvLfQvMIuBQvQvQvQvQvQvbiQvQvmJLfQvsEQvHpQvMIHpQvHpqDQvLfQvQvQvmJZlQvmJQvsEQvmJZlQvQAQvpVQvmJRMababababababababababababababababUCIAsrUCIcIcUCIAsrUCabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababqwqwabqwababababababababababababababababababLsLsLILsaWLsLsLsLsLsOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvOvOvOvOvLsLsOvOvOvOvOvLsHpOvLzNhikOvFcOvaZbjaXaXaYOvNhNhNhNhNhNhNhNhNhNhNhNhofLsqDQvQvQvmJQvQvQvZlQvZlQvmJQvnYQvQvQvQAQvQvQvQvZlQvQvmJQvmJQvmJfOuBQvpVQvQvQvQvQvpVQvMIZlQvQvMCJpQvuBMIRMRMabababababababababababababababRMQFljRSQFCwrbQFRSRMabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLskeLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvLsLsOvLbcscscscscsAwOvLsLsOvdbcsYQOvqDXEOvOvOvOvOvtjOvaZaXaXaXaYMuNhNhNhIPIPIPIPIPIPNhNhNhOvQvQvMIsEHpQvQvfOQvQvmJLfQvpVQvQvMIQvmJQvmJZlmJpVQvQAQvpVQvQvZlQvQvHpQvmJQvQAQvZlQAQvKZMCMCqfMCMCMCFgMCpVqDRMabababababababababababababababRMRMCwrbvDljCwvDRMRMabaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsLsLsLsOvmeNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvLsLsOvLbcscsdbcscsAwOvLsLsOvIJcsYQOvyvuROvLQOvLQtjdbOvaZaXaXaXaYOvvfNhZMxmxmxmxmxmxmuANhvfofHpqDLfQvuBLfQvZlQvwLQvQvQvQvsEQvfOQvqDQvqDQvHpQvsEuBQvQvsEHpQvpVQvQvQvqDQvQvsEQvQvMCMCJpMCVYVYhCMCMChCVYVYRMRMRMRMabababababababababababababRMRMhwCwQFZPRMRMababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLsRqLsLsLsLsLsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDadNhOvLsQvOvCtcscsyMcscsUtOvLsLfOveQcscsXiaZaYOvXiNDXitjcscsaZaXaXaXaYOvvfNhZMxmxmxmxmxmxmuANhvfofQvmJQvIXQvQvilQvMIQvHpQvmJqDQvQvQvLfmJuBLfQvQvMIQvQvLfQvQvQvmJQvQvndQvLfFgMCMCdQVYMCtcFgVYryMCFgjHyZVYdQjZMCtcFgRMababababababababababababababRMRMrbljRMRMabababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLskeLsLsLsLsLsLILsLsOvNhNhjDjDjDjDjDjDjDjDjDjDjDjDSFNhOvLfqDOvCtcscsAAcscsUtOvuBQvOvYScscsOvaZaYOvcscscstjcsOvaZaXaXaXaYMuNhNhNhKGKGKGKGKGKGNhNhNhOvQvqDQvpVQvQvqDmJLfQvfOQvQvpVQvmJQvRTQvQAQvQvmJLfQvmJQvMIZlmJQvZlQvQvMIMCMCryagVYyAjHMCyAgChQMCyZyZyZyZyZMCKZVYRMRMabababababababababababababababRMRSCwRMababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsLILsLsLsLsLsLsLfLsLsOvpmNhNhNhZMZMjDvfZMjDZMZMNhNhNhNhOvMIQAOvUtcscsdbcscsUtOvHpsEOvjXcsaOvvaZaYOvnacscscscsOvaZaXaXaXaYOvNhNhNhNhNhNhNhNhNhNhNhNhofZlsEuBMIQvmJQvQvQvsEQvMIQAQvQvQvuBQvQvQvuBQvQvQvQvQvLfQvqDQvQvQvLfQvFgyAMCJpTuMCyZyZyZyZjHMCyZyZyZyZyZyZqfMChCRMababababababababRMRMRMRMRMabababRMCwrbRMababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababQvLfHpQvLsLsLsLsLsLsLsLsQvmJqDLsOvFcNhNhNhZMZMjDFcZMjDZMZMNhNhFcNhOvHpQvOvUtcscscscscsUtOvMIqDOvdbcslnvvaZaYOvdbcscscscsOvaZaXaXaXaYofFcNhNhNhNhmxFcNhNhNhNhFcOvQvQvQvfOQvQvnYQvQvHpZlQvQvQvsEQvTIQvLfsEQvLfZlHpQvTIQvmJQvQALfQvMCJpMCMCyZKZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCRMRMRMabababRMRMRMRMMCFgqfRMabababRMljvDRMababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababababQvabababababababababababababababQvfOuBQvLsfOLsHpQvQAMIHpfOQvZlOvOvOvofofOvOvTROvOvTROvOvofofOvOvOvQvXEOvOvvvOvXiOvvvOvOvQAQvOvOvOvOvOvaZaYOvOvOvOvOvOvOvaZaXaXaXaYOvOvOvOvXiOvOvOvOvXiOvOvOvOvHppVQvQvpVQvQvQvuBuBQvmJLfQvpVQvQvqDQvmJqDQvsEQvQvQvuBQvHpQvQvMCKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAUcFgMCRMRMRMRMRMjHJpyAUcyZJpRMRMRMabRMQFCwRMababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababababQvQvZlQvabababababababababababQvMIpVQvoQQvoQQvZlrCQvsLsLsLsLsLsLaTaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUxnxnaUaUaUaUaUaUaUaXbjaXaXaYOvtztzcscscscscscscscstztzOvQvQvmJQvMIQvsELfQvfOQvQvQvQvQvQvMIfOQvQvHpQvMIUcFgMCMCJpMCUcMCdQVYyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHtcJpKZyAFgtcyZyZyZyZtcjHKZRMRMRMvDljRMRMabababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababababababQvHpQvQvsEQvabqDabQvababZlQvHpLfLfQvHpQvQvQvQvoQQvmJQvsLdbUNdTYosLaZaXaXaXaXaXbjaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaYOvdbcscscscscscscscscscsdbOvMIQvQvLfQvZlQvQvMIQvQvuBqDmJHpsEQvQvLfQvMCJpVYgCtcMCFgyAMCqfMCVYVYMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAKZRMyAKZqfjHRMabababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababababZlQvQvmJLfQvMIQvQvpVHpQvQvMIuBQvQvQvqDsEHpQvmJqDQvQvQvHpsLnacscscsXiaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbkbkbkaYOvtztzzDxKdbjfjfdbxKzDtztzOvQvLfsEQvQvmJHpQvmJQvQAQvQvLfilQvMCtcMCKZyAMCdQLKyZyZyZKZMCMCFgyAFgKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJptcFgyZyZUcRMabababaaaa +aaaaababababababababababababababababababababababababababababababababababababababababHpQvMIQvqDilQvHpQvfOuBQvQvQAHpqDQvmJfOuBQvQvafQvQvQAQvpVsEuBsLapcscsapsLaZaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbjaXaXaXaXaXaXaXaXaXaXaXaXbkbkbkaYOvOvOvOvOvOvOvOvOvOvOvOvOvOvQvHpQvQvpVQvQvpVQvZlQvuBMCKZMChCVYUcMCMCMCjHFgyZyZyZyZyZyAjHyZyZjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpRMabababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababuBQvQvLfsEQvQvMIZlQvQvQvBCMIQvQvsEQvpVQvQvQvmJQvQvmJQvQvqUQvQvsLsLsLXisLsLbbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdblbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdaXbkbkbkaYMIpVsEQvQvHpQvLfQvQvuBQvQvQvMIQvfOQvQvLfQvQvMCKZMCMCyAMCqfgCjZMCyAKZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZRMabababaaaa +aaaaababababababababababababababababababababababababababababababababababababababQvQvfOQvMIQvQvmJLfsEQvQvmJQvHpQvLfQvQvQvQvmJLfQvsEQvHpLfqDQvQvLfQvMIHpQvpVQvqDQvZlQvQvLfQvQvMIuOZlQvqDpVQvsEQvQvpVQvqDZlQvQvqDQvHpQvZlQvmJQvfOQvQvsEMIQvfOQvZlMIQvmJpVHpaZaXaXaXaYsEQvQvZlmJQAQvZlsEqDHpmJZlQvXEQvQvBCMIQvMCJpVYhQMCyZyZjHMCJpMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZRMabababaaaa +aaaaababababababababababababababababababababababababababMIZlababababababababQvsEQvHpQvQvQvpVQvuBQvQvpVuBQvZlQvfOQvQvLfQvHpQvMIQvLfQvMIyTQvbCQvyTQvyTQvyTQvyTQvyTQvyTZlQvsEHpQvQvQvQvuOMIQvLfQvmJQvsEQvQvMIfOQvsEMIelQvuBQvLfQvqDsWQvpVQvQvsEQvLfqDQvsEuBaZaXaXaXaYQvqDQAQvqDQvHpQvQvQvQvQvLfQvQvQvyAMCMCjZVYVYVYMCUcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZRMabababaaaa +aaaaababababababababababababababababababababababababababQvLfQvHpabababababZlQvQvMIQvqDQvmJQvQvQvHpQAQvQvLfsEQvMIQvmJQvQAqDQvfOQvQvqUuBQvQvQvQvQvQvQvQvQvQvilQvQvQvQvQvuBQvqUQvnYQvQvZlQvuOQvelQvuBaTmTmTmTaVpVQvQvQvHpQvmJMIsEHpuBQvQvMCtcQvqDmJuBQAQvZlaZaXaXaXaYQvZlQvuBQvmJQvQvmJLfpVMIQvVYVYqDKZMCJpVYhtVYjZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHFgyZyZyZyZyZyZyZyZUcyZyZKZqfjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZRMabababaaaa +aaaaababababababababababababababababababababababababababqDHpsEQvpVQvababqDQvQAHpQvpVsEQvuBHpQvmJQvQvMIQvQvqDZlQvQvQvHpQvZlQvQvmJHpZlQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvyTQvQAQvQvQvQvuOuBQvLfQvQvQvQvHpaZbmbnaXaYQvQvmJpVQvKZyAMCtcMCKZZlMCJpMCyAQvHpQvsEHpQvaZaXaXaXaYQvmJQvLfsEMILfQvQvhCVYMCMChQVYyAMCMCyAVYVYVYVYyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZKZjHMCMCyAMChQVYdQjHyZyZjHyZyAyZMCFgJpyARMRMKZtcFgyZyZyZjHFgtcJpyZyZyZyZyZyZyZyARMabababaaaa +aaaaabababababababababababababababababababababababababZlQvMIQvQvQvMIfOQvQvZlQvQvQvQvQvLfQvQvLfQvHpfOQvmJHpQvQvQAQvpVQvQvFgMCJpQvsEQvuBQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvQvqDmJZlQvJpMCKZQvLfHpMImJQvbobnbpbnaYLfQvQAQvJpMCVYryMCJpMCyAKZqfMCMCZlfOQvmJMIQAaZaXaXaXaYLfQvHpqDQvKZMCqfMCVYryMCJpMCgCjHFgMCyZyZyZjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAMCtcMCMCyAMCMCMCgCVYVYMCMCtcMCMCKZMCyARMRMRMRMRMRMRMjHqfUcyAKZRMRMKZqfUcyAyZyZyZqfJpRMabababaaaa +aaaaababababababababababababababababababababababababababQvmJpVQvmJHpQvQvHpQvHpLfQvHpQvQvyFQvqDMIQvQvuBLfQvfOQvqDLfQvMCKZMCqfMCMCKZJpQvyTQvyTQvyTQvyTQvyTQvyTQvbCQvyTQvLfQvMIQvMCMCMCtcMCUcQvqDQvmJaZaXbnaXaYQvZlQvQvUcMCqfMCFgMCyZjHFgyZMCUcMCuBHpqDpVQvaZaXaXaXaYuBQvfOQvVYdQMCFgMCtcMCyAyZyAjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCKZMCMCMCKZQvFgqDMCMCTuhtVYgCMCUcagMCJpMCRMRMababababRMRMRMRMRMRMRMRMRMRMRMJpKZtcyAFgRMRMabababaaaa +aaaaabababababababababababababababababababababababababababQvQvLfpVQvsEpVQvmJqDQvmJsEQvpVQvMIsEQvmJZlQvQvQvQvMIuBtcMCJptcFgMCUcyAiXMCUcQvQvHpQvpVQvQvHpQvZlQvfOQvuBQvHpMCMCtcKZMCagVYFgMCVYVYHpZlQvbbbdbdbdbeqDQvMCtcVYMCKZyZyZyAyZyZyZyZyAMCKZqfQvLfQvFgaZaXaXaXaYQvsEUcKZVYLKyZyZKZMCjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHVYryagMCFgQvmJQvMIfOQvQvyAMCMCMCMCyAMCVYMCLfQvfORMababababababababababababababRMRMRMRMRMRMabababababaaaa +aaaaabababababababababababababababababababababababababababfOZlQvQvQvsMQvQvQvQvuBQvfOMIQvsWQvQvqDQvQvmJpVQvsWQvHpMCKZjHyZyZyZyZyZjHtcMCMCKZqfMIQvqUQvMIQvmJqDHpQvLfQvMCFgyAMCMCUcVYVYKZtcMCyAKZJpQvLfQvMImJuBelQvMCFgLKyAyZyZyZyZyZyZyZyZyZyZyZjHKZJpLKUcaZaXaXaXaYKZJpjHMCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAjHMCJpyAVYVYVYKZQvqDQvLfHpuBQvmJQvLfMCUcMCMIsEfOQvelHpQvRMabababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababQvqDsEDifOQvZlQvfOQAQvMIQvQvQvZlQvpVQvQvHpQvQvQvQvJpqfMCyAyZyZyZyZyZyZyZyZMCtcMCJpMCMCqDQvmJQAQvQvqUQvHpMCMCMCMCJpMCMCyAjHyZyZyZMCKZMCMCMCZlQvHpQvKZhCVYMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAyZaggCOEOEOEOEOEqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfMCMCuBQvmJHpQvfOQvpVQvQvsEQvLfQvQvMCfOQvQvQvQvqDQvMIQvfOabababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababQvfOQvQvQvQvmJqDQvHpQvmJQvnYQvuBilsEQvmJQvQAQvMCUcMCKZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAMCLfQvQvuBHpQvZlMIVYVYUeMCKZjHyAyZyZyZyZyZyZyZMCagLKyAMCsEQvUcMCVYgCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUcMCMCFgilHpQvQvQvuBQvQvQvuBfOQvQvQvMIfOQvQvMILfHpQvQvmJQvLfQvabababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababMImJQvQvnYQvMIpVQvQvHpQvZlQvQvQvfOQvqDQvQvHpQvMIJpMCyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCUcMCMCQvQvmJKZMCVYgCMCJpyZyZyZyZyZyZyZyZyZyZyZUcyZKZJpMCKZMCqfMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZOEOEOEOEOEyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyAyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCtcMCMIfOQvLfQvnYQvLfQvmJQvHpQvmJqDQvQvHpQvmJQvsEQvQvuBQvQvababababababababababababababababababababababababababaaaa @@ -624,62 +714,62 @@ aaaaababababababababababababababababababababababababababMIsEfOQvpVsEuBQvLOQvbiQv aaaaababababababababababababababababababababababababababHpQvuBQvQvQvfOQvQvQvmJQvfOQvMIQvQvpVJpKZMCMCyAyZyZyZyZyZyZyZJpKZMCtcjHMCUcMCMCKZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCjHqfKZMCyZyZyZyZmDyZyZyZyZyZyZyZyZMCtcVYVYVYMCjHJpMCKZMCyZMCUcyZyZyZyZyZyZyZOEOEOEOEOEyZyZjHFgMCMCVYdQMCUcqfMCZlQvQvQvQvuBQvQvmJLfHpQvHpQvmJZlfOQvQvmJQvQvmJLfQvQvQvQvQvfOQvmJLfHpQvmJQvQvpVQvQvQvQvLfQvsEuBQvQvQvsEQvZlQvQvQvZlabababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababQvLfQvmJpVQvmJqDsEpVQvQvZlQvHpQvUcMCKZMCtcMCJpyZyZyZyZyZyZyZjHMCMCMCMCMCqfVYMCtcMCyZyZyZyZyZyZyZyZyZyZyZyZyZMCtcJpMCUcMCKZMCyAMCyZyZyZyZyZyZyZyZyZyZUcjHFgJpMCfOZlQvqfQvuBMCyAMCtcMCjHyZyZyZyZdQjZaZaXaXaXaYKZhQMCyAMCQvQvqDQvMILfQvQvQvmJpVQvmJfOQvLfsEQvfOQvQvqDQvQvelQvZlQAQvqDMIQvHpQvmJqDQvMIpVQvQvQvQvZlfOQvQvmJQvZlQvQvLfQvsEQvMIQvQvQvmJfOQvababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababsEQvqDQvQAQvLfQvQvQvLfQvMCMCyAMCMCMCMCyAMCjHyZyZyZyZyZyZyZyZFgMCUeVYhCMCKZMCJpMCMCFgyZyZyZyZyZyZyZyZyZyZyZjHyAMCMCZltcQvQvfOMCUcVYdQyZyZyZyAMCqfjHFgyAMCQvMCQvMIuBQvQvQvfOQvMIJpVYgCVYJpyZyZyAVYgCaZaXaXaXaYJpFgQvfOQvQvfOQvsEQvQvQvHpMIQvQvQvQvQvQvQvZluBQvQvelQvpVMIilQvQvQvQvZlQvQAQvpVQvQvfOQvQvQvfOQvHpQvqDQvQvilelQvQvmJQvQvqDLfQvmJLfQvMIQvQvababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababQvpVfOHpQvHpQvfOfOtcMCJpqfjHMCgCVYhtMCMCyZyZyZyZyZyZyZyZyZKZyAMCMCVYVYPTQvyAMCqfVYVYyAjHKZJpMCyZyZyZyZyZUcJpQvqDQvuBQvQvLfQvQvMChQVYFgjHKZMCJpQvuBQvQvHpQvQvQvHpfOQvMILfQvHpQvQvVYVYhQMCFgjHMCVYhCaZbqbrbraYHpQviluBQvLfQvQvQvQvZlQvmJfOQvHpQvelQvpVsEQvQvQvpVQvQvsEQvfOQvfOQvmJuBQvQvsEQvfOQvmJQvnYQvQvQvmJuBQvQvLfQvMIQvHpQvfOQvQvQvQvQvQvuBHpababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababQvMIQvqfVYUcsEMCyAKZUcMCyZtcjZLKVYMCJpyZyZyZyZyZyZyZyZyZyZJpUcMChCVYMCelQvLfuBMCMCMChQVYMCqfjHMCyAMCJpMCVYQvQvelQvMImJQvQvZlQvMIQvMCyAMCMIQvQvMIfOLfQvQvmJpVsEQvLfQvmJMIsEQvLffOQvfOMCMCqfMCUcuBaZaXaXaXaYMIQvHpsEpVQvQvQvpVsEQvLfQvHpQvsEQvMIbRQvQvZlQvmJQvLfHpQvuBQvTvQvQvQvQvfOQvMIqDQvmJQvpVQvQvQvZlQvLfQvmJQvQvsEQvQvmJQvmJuBfOQvQAQvsEQvuBabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababZltcgCjZVYJpKZjHFgMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCMCQvHpQvLfQvZlQvQvHpMCUcMCFgMCMIMCMCqDKZMCZlQvQvpVQvQvQvQvZlQAQvQvfOQvLfQvQvQvQvfOQvQvQvQvuBQvQvuBQvQvQvQvQvQvpVQvQvuBQvHpQvQvMILfQvaZaXaXaXaYQvQvQvMIQvQvmJuBQvQvQvQvsEilZluBQvQvLfQvfOQvQvLfQvQvQvLfQAQvQvpVQvQAQvQvLfQvfOQvZlQvQvQvQvmJQvQvQvHpQvQvfOQvQvLfQvQvQvQvsEQvQvqDQvpVQvabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababMCJpKZyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUctcMCyAqfMCqDQvQvfOQvQvfOQvLfMCQvuBHpQvpVQvQvQvQvuBQvQvQAHpQvfOsMQvQvQvQvQvMIuBQvQAQvpVQvQvelQvfOQvQvmJMIQvfOQvnYQvQvQvsEQvQvmJQvQvpVQvQvqDaZaXaXaXaYuBmJLfQvHpQvQvQvelQvfOQvpVQvfOQvQvmJQvQvmJpVLfQvfOQvmJHpQvMILfsEQvuBQvmJpVQvsEQvQvQvuBQvQvQvfOQvLsLsLsLsQvMIQvsEpVQvLfQvfOZlQvQvLfQvababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababMCUcFgtcyAJpqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZmDyZjHMCMCKZMCMCMCQvelQvuBQvmJZlQvQvHpQvsEQvMIQAQvuBQvfOQvMILfQvQvuBQvQvsELfQvmJHpsEQvZlQvsEQvQvmJQvHpQvpVQvQvfOilQvsEQvQvfOuBQvfOQvQvnYQvQvQvQvMIaZaXaXaXaYQvQvQvsEQvfOQvQvQvQvQvmJQvQvQvQvQvQvpVQvQvQvsEMIQvZlQvQvfOQvQvqDfOQvQvQvQvQvuBQvQAQvQvfOmJMILsaWLskeLILsLsLsQvHpQvfOQvmJQvQvQvmJQvMILfabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababJpyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHKZyZMCJpMCqfMCFgQvLfQvQvQvQvQAQvMIQvmJZlQvuBfOQvilQvQvsEQvQvmJQvQvQvQvmJLfQvQvZlQvQvQvQvQvpVQvLfQvqDQvQvsEQvLfQvQvfOQvQvQvHpQvfOQvQvMIQvQvQvQvmJuBZlaZaXaXaXaYMIQvpVQvuBQvQvmJLfQvHpQvqDelQvpVQvfOQvQvQAQvHpQvfOQvsEQvQvsEQvQvQvQvfOQvmJsEQvHpQvLfQvQvLsLILsLsLsLsLsLsLILsLsLsQvQvQvQvQvQAQvQvHpQvababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababMCtcjHMCabqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUcqfMCyAMCVYMCMCQvQvHpQvQvmJLfQvQvQvLfQvQvQvQvQvQvqDZlmJpVQvHpQvQvpVQvelQvQvQvQvQvmJQvfOQvmJQvQvQvQvQvQvLfQvuBQvsELfQvQvQvmJpVQvQvQvQvelLfQvuBQvMIQvQvQvaZaXaXaXaYQvQvQvZlQvsEQvMIQvQAQvQvsEQvQvmJQvZlQvmJQvuBilQvLfuBQvQvpVsEQvmJQvHpQvQvQvilfOMIQvLsLsLsLsababababababLsLsLsLskeLsLsLsZlQvQvHpQvfOabababababababababababababababababababababababababababababaaaa -aaaaabababababababababababJpMCKZyZyZFgyAMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCFgMCMChQMCyAQvLfQvQAQvQvfOQvsEHpuBQvelQvpVQvsEQvQvQvQvelQvfOQvQvQvLfqDQvfOHpQvQvQvuBQvQvQvnYQvsEZlQvmJQvQvpVQvQvQvQAQvQvQvsELfQvmJHpQvQvmJfOQvLfQvQvaZaXaXaXaYqDLfQvQvLfQvQvQvpVQvQvpVilMIQvQvQvQvMIQvHpQvQvmJfOQvHpQvHpfOQvQvLfsEQvMIfOQvQvQvLsabababababababLsLsababLsLsLILsLsLsLsLsLsLsLsMIababababababababababababababababababababababababababababababaaaa -aaaaabababababababababababjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCtcMCJpQvFgMCQvLfQvsEpVQvqDMIQvZlQvQvQvLfQvQvQvfOQvMILfQvZlQvQvQvQvQAQvLfsEQvpVQvQvpVQvQvQAQvHpQvQvQvQvQvMIQvLfilQvHpQvQvQvZlqDQvMIQvQvQvQvQvsEQvQvQvQvHpaZaXaXaXaYQvQvQvQAQvQvfOQvQvQvmJQvQvfOHpQvnYQvQvLfsEqDQvQvQvQvpVmJQvQvMIQvHpQvpVQvQvZlQvabLsababLsLsLBLsLsLsLILsabababLsababLsLsLsaWLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaababababKZFgtcjHyAUcFgtcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCUcyZyZyZyZMCjHMCMCyAMCQvuBQvLfQvQvQvMIQvQvsEQvLfHpQvQvmJQvQvuBQvmJQvHpQvQvmJQvQvLfQvTIQvuBQvQvQvQvQvfOQvsELfQvQvQvuBQvLfQvHpQAQvQvQvmJQvQvmJMIQAQvQvZlQvuBQAQvfOQvQvQvmJMIMIaZaXaXaXaYQvHpQvilMImJHpQvLfQvuBZlQvQvQvQvQvpVQvQvQvQvLfQvQAQvQvQvLfQvfOuBQvQvmJMIQvLsLsLsLsLsLsLsLILsLsaWLsLskeLsLsabLsLsabababLsLsLsLILsababababababababababababababababababababababababababababababaaaa -aaaaababqfUcyAyZyZyZyZyZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyZyZyZUcVYhQVYagMCJpMCyAMCqfKZMCFgQvelHpQvQvQvfOQvHpQvLfQvilQveluBQvelqDQvQvZlQvQvpVQvQvelQvHpQvQvLfQvmJQvLfQvmJQvQvQvQvQvZlQvmJQvQvQvQvQvsEQvqDQvQAQvuBQvQvQvmJfOsEHpQvQvuBsEbiQvQvqDQvaZaXaXaXaYMIQvQvQvQvQvQveluBQvfOQvQvmJLfQvsEuBQvmJpVQvQvLfQvQvmJZlQvLsQvQvQvLsLsLskeLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa -aaaaababFgyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfgChCMCMCVYVYjZVYMCKZMCMCUcMCMCQvQvQvQvQvQvmJuBZlQvmJQvQvfOQvQvLfQvZlQvQvQvLfQvQvmJQvfOQvQvqDQvfOQvuBQvQvfOQvQvuBZlQvmJMIsEQvQvQvQAQvmJpVQvQvQvfOMIQvQvLfQvMIQvQvMIQvQvQvmJQvQvQvfOQvLfQvaZaXaXaXaYuBQvpVQvZlLfQvQvQvQvZlQvpVQvQvfOQvQvQvQvQvQvmJZluBQvQvQvLsLsLsLsLsLsLILsLsLsababLIabababqwacqwacDMacacacLsLsLsabLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCUcjZVYMCMCUeMCMCyAQvHpMCtcMCQvMIfOQvHoQvLfQvQvQvQvZlQvXEQvuBQvmJQvQvsEQvLfQvQAQvHpQvuBQvsEQvLfQvQvQvsEQvLfQvqDQvQvQvQvQvQvQvQvfOQvQvQvHpQvLfQvQvQvQvsEQvQvfOQvpVQvsEQvLfQvQvQvLfQvQvQvQvQvaZaXaXaXaYQvQvQvQvuBQvfOHpQvmJQvfOQvQvQvQvQvZlQvfOHpMIQvQvLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababacqwacacqwacacacacqwababababLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZtcyZKZJpyAjHMCQvMCtcQvmJMCMCMCFgMCQvMIQvZlQvZlQvQvQvQvHpQvQvpVsELfQvQvQvQvfOQvQvpVQvfOQvQvmJQvZlQvQvpVQvHpQvQvQvmJpVQvMIQvQAQvelQvmJLfQvpVQvqDQvQvsEQvMIQvsEQvQvmJuBQvHpQvQvmJQvQvZlQvQvqDelQvQvsEQvHpQvuBaZaXaXaXaYQvZlQvQvQvHpQvQvQvQvLIMILsLsuBQvLfLsQvQvQvLsLsLsLsLsLskeLsLsLsLsLsLsLsababababababababacqwqwacacqwacacqwacqwababababLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZFgFgMCyAababZlQvmJMIQvHpuBQvQvJpQvLfQvsEQvQvmJQvHpsELfuBQvmJsEQvQvQvQvKEQvQvQvMIQvsEHpQvpVilcpZlQvQvmJsEQvQvuBQvfOQvLfQvmJHpQvMIQvQvqDsEQvQAQvQvmJLfQvQvVhQvuBMIQvQvpVQvQvelQvQvQvQAQvQvfOQvQvQvuBMIQvQvQvmJaZaXaXaXaYQvQvQvQvTIQvQAQvLfLsLsLsLsLsLsLsQvpVLsLsLsLsLsLsLsLILsLsLsLsLsLILsLsLsabababababababqwqwqwXgYwMkqwacBIacacqwabababababLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyAababababababQvpVQvsEQvQvQvKEQvQvQvuBQvqDQvQvQAQvQvQvQvZlQvMIQvHpQvmJQvQvmJMIQvLfuBQvQvsEMIQvLfQAuBQvMIQvQAQvQvHpQvQvQvQvQvfOQvQvZlQvHpQvQvuBQvQvQvQvZlQvQvQvQAHpQvfOQvLfQvQvHpLfQvQvQvQvQvmJfOQvQvLfQvQvMIaZaXaXaXaYqDQvLfQvQvQvQvQvLsLsLILsLsLsLsLsLILskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababacBIqwacacqwacacqwacacababababababLskeLsLsLsLsLILsabababababababababababababababababababababababababababaaaa -aaaaababyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZqfUctcjHababababababuBQvmJqDQvelQvQvQvZlQvfOQvmJLfQvQvQvQvHpelQvQvQvLfQvQvQvQAQvQvQvQvHpQvLfQvQvQvQvQvQvQvQvfOQvQvQvmJMIQvuBQvmJQvQvQvHpQvLsQvfOQvQvfOQvLsLILsLsLfQvQvQvLsLsQvQvfOuBQvQvLILsLsMIQvQvQvLsLsLILsLsLsaZaXaXaXaYQvQvQvQvpVLsLsLsLsLskeLsaWLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsababababababqwacacacacacLjqwYNqwYwacqwabababababLsLsLsLsLBLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababyAyZyZyZyZyZJpyZyZyAtcFgJpKZyAjHabababababababababQvZlQvfOQvpVQvmJQvQvsEMIQvpVQvQvpVQvmJQvQvQvQvmJQvQvMIQvQvqDQvLfelQvQvQvZlQvLfQvmJpVsEZlQvHpQvQvQvQvelQvQvQvQvpVQvLfLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsQvQvLsLsLsLsaWLsLsLsLsLsLsLILsLsLsaZaXaXaXaYQvQvHpQvLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababqwqwqwXghmqwqwacBIqwqwqwacabababababLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababFgyZyZyZyZFgqfjHUcMCabababababababababababababababababQvQvsEQvQvQvLfQvHpQvHpQvQvQvsEQvQvZlpVilqDQvZlQvnYQvQvsEuBQvQvpVQvmJQvsEQvqDQvQvQvQvLsLspVLsLfQvQvQvLfQvHpQvLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsaZbgbgbgaYLsMIQvLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLsLsLskeLsLsLsLsLsLsLILsababababababababacacqwacqwMkqwqwqwacqwqwabababababLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababJpjHtcUcyAKZacabababababababababababababababababababQvQAQvHpQvMILfQvQvelQvQvmJQAQvqDQvuBQvQvQAQvQvQvmJQvpVQvQvQvQvfOQvQvQvLfuBQvQvQvLfQvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsabababLsabababLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLILsLsLILsLsLsLsaZaXaXaXaYLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababqwqwqwqwXgacqwqwqwababababababLsLsLsLsLsBRLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababbsbtbuabababababababababababababababababababQvQvMIQvQAQvQvQvmJQvpVQvQvQvQvLfQvHpmJQvQvQvpVQvQvQvQvQvLfZlQvQvLsLfLsQvQvHpfOQvQvLsLsLILsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsabababababababLsLsBRLsLskeLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsXHXHbfaXaXaXbhXHXHLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLBLsLsLsLsLskeLsLsLsababababababababababababqwqwqwqwabababababababLsLsLsLsLsLsLsLskeLsLsLsLsababababababababababababababababababababababababaaaa -aaaaababababababacacacabababababababababababababababababababfOQvQvmJQvQvfOQvQvQvilLfQvpVQvQvMIQvQvQvQvsEQvLfQvuBLsLsQvQvLsLsLILsLsLsLsLsLsLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsababababababLsLsLsLsLBLsaZaXaXaXaYLsLsLsLsLsaWLsLsababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababLsLILsLsLsaWLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababacababababababababababababababababababababQvsEQvqDZlQvuBQvLfmJLfQvsEQvQvmJQvQvLfQvpVQvLsLsLsLsLsLsLsLsLsLsLsLsabababababLsLsLsLsLsLILsabababLsLsLsLsLsLsLILsLsabababababababLsLILsLsLsaWLsLsLsLILsLsLsLsLsababababababababLsLILsLsLsLIaZaXaXaXaYLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsBRLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababRMQvpVfOHpQvHpQvfOfOtcMCJpqfjHMCgCVYhtMCMCyZyZyZyZyZyZyZyZyZKZyAMCMCVYVYPTQvyAMCqfVYVYyAjHKZJpMCyZyZyZyZyZUcJpQvqDQvuBQvQvLfQvQvMChQVYFgjHKZMCJpQvuBQvQvHpQvQvQvHpfOQvMILfQvHpQvQvVYVYhQMCFgjHMCVYhCaZbqbrbraYHpQviluBQvLfQvQvQvQvZlQvmJfOQvHpQvelQvpVsEQvQvQvpVQvQvsEQvfOQvfOQvmJuBQvQvsEQvfOQvmJQvnYQvQvQvmJuBQvQvLfQvMIQvHpQvfOQvQvQvQvQvQvuBHpababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababRMRMQvMIQvqfVYUcsEMCyAKZUcMCyZtcjZLKVYMCJpyZyZyZyZyZyZyZyZyZyZJpUcMChCVYMCelQvLfuBMCMCMChQVYMCqfjHMCyAMCJpMCVYQvQvelQvMImJQvQvZlQvMIQvMCyAMCMIQvQvMIfOLfQvQvmJpVsEQvLfQvmJMIsEQvLffOQvfOMCMCqfMCUcuBaZaXaXaXaYMIQvHpsEpVQvQvQvpVsEQvLfQvHpQvsEQvMIbRQvQvZlQvmJQvLfHpQvuBQvTvQvQvQvQvfOQvMIqDQvmJQvpVQvQvQvZlQvLfQvmJQvQvsEQvQvmJQvmJuBfOQvQAQvsEQvuBabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababRMZltcgCjZVYJpKZjHFgMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCMCQvHpQvLfQvZlQvQvHpMCUcMCFgMCMIMCMCqDKZMCZlQvQvpVQvQvQvQvZlQAQvQvfOQvLfQvQvQvQvfOQvQvQvQvuBQvQvuBQvQvQvQvQvQvpVQvQvuBQvHpQvQvMILfQvaZaXaXaXaYQvQvQvMIQvQvmJuBQvQvQvQvsEilZluBQvQvLfQvfOQvQvLfQvQvQvLfQAQvQvpVQvQAQvQvLfQvfOQvZlQvQvQvQvmJQvQvQvHpQvQvfOQvQvLfQvQvQvQvsEQvQvqDQvpVQvabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababRMRMRMRMRMRMRMMCJpKZyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUctcMCyAqfMCqDQvQvfOQvQvfOQvLfMCQvuBHpQvpVQvQvQvQvuBQvQvQAHpQvfOsMQvQvQvQvQvMIuBQvQAQvpVQvQvelQvfOQvQvmJMIQvfOQvnYQvQvQvsEQvQvmJQvQvpVQvQvqDaZaXaXaXaYuBmJLfQvHpQvQvQvelQvfOQvpVQvfOQvQvmJQvQvmJpVLfQvfOQvmJHpQvMILfsEQvuBQvmJpVQvsEQvQvQvuBQvQvQvfOQvLsLsLsLsQvMIQvsEpVQvLfQvfOZlQvQvLfQvababababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababRMRMMCUcFgtcyAJpqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZmDyZjHMCMCKZMCMCMCQvelQvuBQvmJZlQvQvHpQvsEQvMIQAQvuBQvfOQvMILfQvQvuBQvQvsELfQvmJHpsEQvZlQvsEQvQvmJQvHpQvpVQvQvfOilQvsEQvQvfOuBQvfOQvQvnYQvQvQvQvMIaZaXaXaXaYQvQvQvsEQvfOQvQvQvQvQvmJQvQvQvQvQvQvpVQvQvQvsEMIQvZlQvQvfOQvQvqDfOQvQvQvQvQvuBQvQAQvQvfOmJMILsaWLskeLILsLsLsQvHpQvfOQvmJQvQvQvmJQvMILfabababababababababababababababababababababababababababaaaa +aaaaababababababababababababRMRMRMRMRMRMRMJpyAyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHKZyZMCJpMCqfMCFgQvLfQvQvQvQvQAQvMIQvmJZlQvuBfOQvilQvQvsEQvQvmJQvQvQvQvmJLfQvQvZlQvQvQvQvQvpVQvLfQvqDQvQvsEQvLfQvQvfOQvQvQvHpQvfOQvQvMIQvQvQvQvmJuBZlaZaXaXaXaYMIQvpVQvuBQvQvmJLfQvHpQvqDelQvpVQvfOQvQvQAQvHpQvfOQvsEQvQvsEQvQvQvQvfOQvmJsEQvHpQvLfQvQvLsLILsLsLsLsLsLsLILsLsLsQvQvQvQvQvQAQvQvHpQvababababababababababababababababababababababababababababaaaa +aaaaababababababababababRMRMRMMCtcjHMCRMqfjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZUcqfMCyAMCVYMCMCQvQvHpQvQvmJLfQvQvQvLfQvQvQvQvQvQvqDZlmJpVQvHpQvQvpVQvelQvQvQvQvQvmJQvfOQvmJQvQvQvQvQvQvLfQvuBQvsELfQvQvQvmJpVQvQvQvQvelLfQvuBQvMIQvQvQvaZaXaXaXaYQvQvQvZlQvsEQvMIQvQAQvQvsEQvQvmJQvZlQvmJQvuBilQvLfuBQvQvpVsEQvmJQvHpQvQvQvilfOMIQvLsLsLsLsababababababLsLsLsLskeLsLsLsZlQvQvHpQvfOabababababababababababababababababababababababababababababaaaa +aaaaababababababababababRMJpMCKZyZyZFgyAMCyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCMCMCFgMCMChQMCyAQvLfQvQAQvQvfOQvsEHpuBQvelQvpVQvsEQvQvQvQvelQvfOQvQvQvLfqDQvfOHpQvQvQvuBQvQvQvnYQvsEZlQvmJQvQvpVQvQvQvQAQvQvQvsELfQvmJHpQvQvmJfOQvLfQvQvaZaXaXaXaYqDLfQvQvLfQvQvQvpVQvQvpVilMIQvQvQvQvMIQvHpQvQvmJfOQvHpQvHpfOQvQvLfsEQvMIfOQvQvQvLsabababababababLsLsababLsLsLILsLsLsLsLsLsLsLsMIababababababababababababababababababababababababababababababaaaa +aaaaabababRMRMRMRMRMRMRMRMjHyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCtcMCJpQvFgMCQvLfQvsEpVQvqDMIQvZlQvQvQvLfQvQvQvfOQvMILfQvZlQvQvQvQvQAQvLfsEQvpVQvQvpVQvQvQAQvHpQvQvQvQvQvMIQvLfilQvHpQvQvQvZlqDQvMIQvQvQvQvQvsEQvQvQvQvHpaZaXaXaXaYQvQvQvQAQvQvfOQvQvQvmJQvQvfOHpQvnYQvQvLfsEqDQvQvQvQvpVmJQvQvMIQvHpQvpVQvQvZlQvabLsababLsLsLBLsLsLsLILsabababLsababLsLsLsaWLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaabRMRMRMKZFgtcjHyAUcFgtcyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHMCUcyZyZyZyZMCjHMCMCyAMCQvuBQvLfQvQvQvMIQvQvsEQvLfHpQvQvmJQvQvuBQvmJQvHpQvQvmJQvQvLfQvTIQvuBQvQvQvQvQvfOQvsELfQvQvQvuBQvLfQvHpQAQvQvQvmJQvQvmJMIQAQvQvZlQvuBQAQvfOQvQvQvmJMIMIaZaXaXaXaYQvHpQvilMImJHpQvLfQvuBZlQvQvQvQvQvpVQvQvQvQvLfQvQAQvQvQvLfQvfOuBQvQvmJMIQvLsLsLsLsLsLsLsLILsLsaWLsLskeLsLsabLsLsabababLsLsLsLILsababababababababababababababababababababababababababababababaaaa +aaaaabRMqfUcyAyZyZyZyZyZqfyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZjHyZyZyZUcVYhQVYagMCJpMCyAMCqfKZMCFgQvelHpQvQvQvfOQvHpQvLfQvilQveluBQvelqDQvQvZlQvQvpVQvQvelQvHpQvQvLfQvmJQvLfQvmJQvQvQvQvQvZlQvmJQvQvQvQvQvsEQvqDQvQAQvuBQvQvQvmJfOsEHpQvQvuBsEbiQvQvqDQvaZaXaXaXaYMIQvQvQvQvQvQveluBQvfOQvQvmJLfQvsEuBQvmJpVQvQvLfQvQvmJZlQvLsQvQvQvLsLsLskeLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsabababababababababababababababababababababababababababababaaaa +aaaaabRMFgyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZMCqfgChCMCMCVYVYjZVYMCKZMCMCUcMCMCQvQvQvQvQvQvmJuBZlQvmJQvQvfOQvQvLfQvZlQvQvQvLfQvQvmJQvfOQvQvqDQvfOQvuBQvQvfOQvQvuBZlQvmJMIsEQvQvQvQAQvmJpVQvQvQvfOMIQvQvLfQvMIQvQvMIQvQvQvmJQvQvQvfOQvLfQvaZaXaXaXaYuBQvpVQvZlLfQvQvQvQvZlQvpVQvQvfOQvQvQvQvQvQvmJZluBQvQvQvLsLsLsLsLsLsLILsLsLsababLIabababqwqwqwqwDMqwqwqwLsLsLsabLsLsLsLsLsLsLskeLsLsababababababababababababababababababababababababababababaaaa +aaaaabRMyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZJpMCUcjZVYMCMCUeMCMCyAQvHpMCtcMCQvMIfOQvHoQvLfQvQvQvQvZlQvXEQvuBQvmJQvQvsEQvLfQvQAQvHpQvuBQvsEQvLfQvQvQvsEQvLfQvqDQvQvQvQvQvQvQvQvfOQvQvQvHpQvLfQvQvQvQvsEQvQvfOQvpVQvsEQvLfQvQvQvLfQvQvQvQvQvaZaXaXaXaYQvQvQvQvuBQvfOHpQvmJQvfOQvQvQvQvQvZlQvfOHpMIQvQvLsLsLsLsLsLsLsLsLsBRLsLsLsabababababababqwqwqwqwqwqwqwqwqwqwababababLsLsLILsBRLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabRMyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZtcyZKZJpyAjHMCQvMCtcQvmJMCMCMCFgMCQvMIQvZlQvZlQvQvQvQvHpQvQvpVsELfQvQvQvQvfOQvQvpVQvfOQvQvmJQvZlQvQvpVQvHpQvQvQvmJpVQvMIQvQAQvelQvmJLfQvpVQvqDQvQvsEQvMIQvsEQvQvmJuBQvHpQvQvmJQvQvZlQvQvqDelQvQvsEQvHpQvuBaZaXaXaXaYQvZlQvQvQvHpQvQvQvQvLIMILsLsuBQvLfLsQvQvQvLsLsLsLsLsLskeLsLsLsLsLsLsLsababababababababqwqwqwqwqwqwqwqwqwqwqwababababLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabRMyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZFgFgMCyARMRMZlQvmJMIQvHpuBQvQvJpQvLfQvsEQvQvmJQvHpsELfuBQvmJsEQvQvQvQvKEQvQvQvMIQvsEHpQvpVilQvZlQvQvmJsEQvQvuBQvfOQvLfQvmJHpQvMIQvQvqDsEQvQAQvQvmJLfQvQvVhQvuBMIQvQvpVQvQvelQvQvQvQAQvQvfOQvQvQvuBMIQvQvQvmJaZaXaXaXaYQvQvQvQvTIQvQAQvLfLsLsLsLsLsLsLsQvpVLsLsLsLsLsLsLsLILsLsLsLsLsLILsLsLsabababababababqwqwqwXgYwYNqwqwXgqwqwqwabababababLsLsLsLsBRLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabRMyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZyARMRMRMRMRMRMQvpVQvsEQvQvQvKEQvQvQvuBQvqDQvQvQAQvQvQvQvZlQvMIQvHpQvmJQvQvmJMIQvLfuBQvQvsEMIQvLfQAuBQvMIQvQAQvQvHpQvQvQvQvQvfOQvQvZlQvHpQvQvuBQvQvQvQvZlQvQvQvQAHpQvfOQvLfQvQvHpLfQvQvQvQvQvmJfOQvQvLfQvQvMIaZaXaXaXaYqDQvLfQvQvQvQvQvLsLsLILsLsLsLsLsLILskeLsLsLsLsBRLsLsLsLsLsBRLsLsLsLsLsabababababababqwXgqwqwqwqwqwqwqwqwqwababababababLskeLsLsLsLsLILsabababababababababababababababababababababababababababaaaa +aaaaabRMyZyZyZyZyZyZyZyZyZyZyZyZyZyZyZqfUctcjHRMababababRMuBQvmJqDQvelQvQvQvZlQvfOQvmJLfQvQvQvQvHpelQvQvQvLfQvQvQvQAQvQvQvQvHpQvLfQvQvQvQvQvQvQvQvfOQvQvQvmJMIQvuBQvmJQvQvQvHpQvLsQvfOQvQvfOQvLsLILsLsLfQvQvQvBRLsQvQvfOuBQvQvLILsLsMIQvQvQvLsLsLILsLsLsaZaXaXaXaYQvQvQvQvpVLsLsLsLsLskeLsaWLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsababababababqwqwqwqwqwqwZWqwYNqwYwqwqwabababababLsLsLsLsLBLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabRMyAyZyZyZyZyZJpyZyZyAtcFgJpKZyAjHRMRMRMRMababababRMQvZlQvfOQvpVQvmJQvQvsEMIQvpVQvQvpVQvmJQvQvQvQvmJQvQvMIQvQvqDQvLfelQvQvQvZlQvLfQvmJpVsEZlQvHpQvQvQvQvelQvQvQvQvpVQvLfLsLILsLsLsBRLsLsBRLsLsLsLsLsLsLsLsLILsLsQvQvLsLsLsLsaWLsLsLsLsLsLsLILsLsLsaZaXaXaXaYQvQvHpQvLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsabababababababqwqwqwXgYwqwqwqwXgqwqwqwqwabababababLsLsLILsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabRMFgyZyZyZyZFgqfjHUcMCRMRMRMRMRMRMRMababababababababababQvQvsEQvQvQvLfQvHpQvHpQvQvQvsEQvQvZlpVilqDQvZlQvnYQvQvsEuBQvQvpVQvmJQvsEQvqDQvQvQvQvLsLspVLsLfQvQvQvLfQvHpQvLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsLsLILsaZbgbgbgaYLsMIQvLsLsLsLsLsLsLILsLsLsLsLsLsLsLsBRLsLsLsLsLsLskeLsLsLsLsLsLsLILsababababababababqwqwqwqwqwYNqwqwqwqwqwqwabababababLsBRLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabRMJpjHtcUcyAKZlQRMRMRMRMabababababababababababababababQvQAQvHpQvMILfQvQvelQvQvmJQAQvqDQvuBQvQvQAQvQvQvmJQvpVQvQvQvQvfOQvQvQvLfuBQvQvQvLfQvLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLsabababLsabababLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLILsLsLILsLsLsLsaZaXaXaXaYLsLsLsLskeLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsabababababababababqwqwqwqwXgqwqwqwqwababababababLsLsLsLsLsBRLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabRMRMRMRMRMbsbtbuRMababababababababababababababababababQvQvMIQvQAQvQvQvmJQvpVQvQvQvQvLfQvHpmJQvQvQvpVQvQvQvQvQvLfZlQvQvLsLfLsQvQvHpfOQvQvLsLsLILsLsLsLsLsLILsLsaWLsLsLsLsLsLsLsabababababababLsLsBRLsLskeLsLsLsLsLsLsLsLsLsabababLsLsLsLsLsLsLsXHXHbfaXaXaXbhXHXHLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLBLsLsLsLsLskeLsLsLsababababababababababababqwqwqwqwabababababababLsLsLsLsLsLsLsLskeLsBRLsLsababababababababababababababababababababababababaaaa +aaaaabababababRMWCacacRMababababababababababababababababababfOQvQvmJQvQvfOQvQvQvilLfQvpVQvQvMIQvQvQvQvsEQvLfQvuBLsLsQvQvLsLsLIBRLsLsLsLsLsLsLILsLsLsLsLsLsababLsLsLsLsLsLsLsLsLsabababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsababababababLsLsLsLsLBLsaZaXaXaXaYLsLsLsLsLsaWLsLsababababababLsLsLsLsLILsLsLsLsLsLsLsLsLsBRLsLsLsLsLsabababababababababababababababababababababababLsLILsLsLsaWLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababRMRMacRMRMababababababababababababababababababQvsEQvqDZlQvuBQvLfmJLfQvsEQvQvmJQvQvLfQvpVQvLsLsLsLsBRLsLsBRLsLsLsLsabababababLsLsLsLsLsLILsabababLsLsLsBRLsLsLILsLsabababababababLsLILsLsLsaWLsLsLsLILsLsLsLsLsababababababababLsLILsLsLsLIaZaXaXaXaYLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLsBRLsLsLsLILsLsLsLsLsBRLsLsLsababababababababababababababababababababLsLsLsLsLsLsLsLsLsBRLsLsababababababababababababababababababababababababababaaaa aaaaabababababbvbvbwbvbvabababababababababababababababababQvQvuBZlQvQvmJQvQvQvMIQvQvZlQvQvQvQAQvqDQvQvLsLsLsLILsLsLsLsLsLskeLsLsabababababLsLsLsBRLsLsLsabababababLsLsLsLsLsLsLsLsLsababababababababLsLsLsLsLsLBLsLsLsLsLsLsababababababababLsLsLsXpLsLsaZaXaXaXaYLsXpLsLsLsLsLsLsababababababababLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababLsLsLsLsBRLsLsLsLILsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababbvbxbxbxbybybybybybyababababababababababababQvmJLfQvelQvQvsEQvfOQvLsLsLsLILsLsQvQvQvLsLskeLsLsLsLILsLsLsLsLsLsLsababababababababLsLsLskeLsLsababababLsLsLskeLsLsLILsLsLsababLsababababLsLsLsLsLsLsLsLsLsLILsabababababababababLsLsLsLsLsLsaZaXaXaXaYLsLsLsLILsLsababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsLsabababababababababababababababLsLskeLsLsLsLsLsLsLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababbybxbxbxbxbxbxbxbxbyababababababababababababQvpVQvQvQvpVQvQvLfQvQvLsLILsLsLsLsLsLsLBLsLsLsLsaWLsLsLsLsLILsLsLILsababababababLsLsLsLILsLsLsLsLsababLsLsLILsLsLsLsLskeLsLsababLsLsLskeLsLsLsLsLsLsLsLskeLsLsLsababababababababLsLsLsLsLskeLsbzbrbrbrbBLsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababbybxbxbxbxbxbxbxbxbyabababababababababababQvQvQAQvBRLILsLsBRZlLIkeLsLsLsLsLILsLsLsLILsLILsLsLsLsLsLsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLILsLsLsLsbzaXaXaXbBLsLsLskeLsLsLsLsLsLsLsLsababLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLskeLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa -aaaaabababababbybybybwbybybybxbxbyababababababababababababpVQvkeLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsbDaXaXaXaYXpLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababbybxbEbxbxbxbybxbxbyababababababababababababyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXbFbGbHbGbIyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXabababababababababababababababababababababababababababaaaa -aaaaabababababbybJbxbKbxbMbybxbxbyababababababababababababLILsLsLILsabababLsLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLILsLsLsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLILsLsLsaZaXaXaXaYLsLsLILsLsLskeLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLILsLsLsabLsLsLsLsLILsLsLILsLsLsLsLILsLsLsLsaWLsLsLsLILsLsLsLILsLsLsLsLsaWLskeLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaabababababbybxbNbObxbxbybxbxbyababababababababababababLsababababababababababLsLsLsLILsLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababLsLILsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLILsaZaXaXaXaYLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsLsLsLsLsLsLsabLsababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsabababLsabLsLsababLsLIabababababababababababababababababababababababababababababababaaaa -aaaaabababababbybMbEbKbxbMbybxbxbybybybyajajajababababababababababababajababababLILsLsLsLsLsLsLsLsLsLsLsababababLsababababababLsLsLskeLsLsaWLsLsLsLILsLsLsLsLsLILsLsabababpuCqCqCqpuLsLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLILsLskeLsLsLsLsLsaZaXaXaXaYLsLsXpLsaWLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababLsLILsLsLsLskeLsLsLsLILsabababababababababLIabababababababababLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababbybTbNbObxbxbybxbxbxbxbUakakakajajajabababababababababajajajabababababLsababababababababababababababababajajababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababpupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLssLsLsLsLsLLsLsLsLsLsLsababababababababababababababababLsLsaWLsLILsLsababababababababababababababababababababababLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababbybMbVbKbxbMbybxbxbxbxbxbxakamakakajajababababababababajakajajababababababababababababajajajajajajajajajajajababababLsLsLsLsLILsLsababLsLsLsLsabababababCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLssLsLsLsLsLLsLsLsPhPhPhPhPhaZaXaXaXaYsLsLsLsLsLLsLsLssLcscscssLLsLsLsLsLsLsababababababababababababababababLsabLsLsLsLsLsababababababababababababababababLsabababLsLsLsLsLsLILsabababababababababababababababababababababababababaaaa -aaaaabababababbybxbNbWbEbxbybybybybybybybyakakakakajababababababababajakakajajajajababababababababajajakakakakakakakakakajajababababababLsLsabababababababababababLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLILsLsLsaZaXaXaXaYsLVZcscssLLsXpLssLcsnmcssLLsLsLsXpLsabababababababababababababababababababLsababLsabababababababababababababLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa -aaaaabababababbybJbxbxbxbMbyababababababajajajbXakajajabababajajajajajakakalakajajajajajajajajajajajakakakakakakajajakakakajajabababababababababababababababababLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLsLsLsLsLsLsLILsXpLsLssLcsnmcscsLsLsLsLsLsLsLsLsaZcbaXaXaYcscsnmcssLLsLsLssLVZcscssLLsLsLsLsLsababababababababababLsLsabLsLsLsabababababababababababLsLsLsababababLsLsLILsLsLsLsLsLsLsLsLsLskeLsLsabLsLsabababababababababababababababababababababababaaaa -aaaaabababababbybYbEbZbxcabyababababababababajajajajajajabababajakakakakakakakakajajakakakakakakakakakakakakakajajajakakakakajabababababababababababLsabLsLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLssLVZcscssLLsXpLssLsLsLsLsLaZaXaXaXaYsLcscscssLLsLsLssLsLcssLsLLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLIDELsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababbybybybybybybyabababababababababababajajajajababajakakakakamakakakajajajakakakakakakajajajakakajajajakakakakakajabababababababababLsLsLsLsLsLsLILsLsCqCqCqOwCqCqzWCqCqOwCqCqCqLsLsLsLsLsLskeLsLsLskeLsLsLsLsLsLssLsLsLsLsLLsLsLssLcsVZcssLaZaXaXaXaYsLsLsLsLsLLsLsLsLsLsXpLsLsLsaWLsLsababababababLsLsLsLskeLsLsLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsDELsLsLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababajajajajajajakakakakakakakakakajajakakakakakakakajajakakakakakakakakakakajajababababababhshsLsLsLsLskeLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskesLcsnmcscsaZaXaXaXaYLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsabababababLsLsLsLILsLsLsDELsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsDELsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababajajakakakakakajakakakakakakakakakakakakamakakakakakamakakakakakakakakakajababababababCqhshsLsLsLILsLskeLsLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLskeLsLsLsLILsLsaWLsLsLssLsLsLsLsLLsLssLcscscssLaZaXaXaXaYsLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsLsababLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsDELsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajakakakakajajajakakakakakakakakakakakajajakakakakakakajakajakakakamakajajajajajababCqCqhshsLsLsLsLsaWLsLsLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLssLcscscssLLsLssLsLsLsLsLaZaXaXaXaYsLcscsVZsLLsLsLssLcscsVZsLLsLskeLsababLsLsLILsLsLseMLsLsLsLsLsLILskeLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajakakakajajakakakakakakakakakakajajajajakakakakajajajajajakakakakakakakakakajajCqCqCqCqhshsLskeLsLsLsLsLILsCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLILsLsLsLskeLsLsLsLsLsLsLsLssLcsnmVZsLLsLsLsXpLsLsPhaZaXcbaXaYcscsnmcssLLsLsLscscsnmcssLLsLILsLsababLsLsLshKLsLBLsLskeLsDELsLsLsLsdtdtLyGTLyPALyGTLyGTdtdtLsLskeLsLsLsLILsccccccccccccccccccLsLsLsababababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababajakakakakakakakakakajajajakakakakajajakakakakakakajajajajajakakakakakakakakajajCqCqawCqCqhshsLsLsLskeLsLsLsLspupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLssLcscscssLLsLsLsLsLsLsPhaZaXaXaXaYsLcscscssLLskeLssLcscsVZsLLsLsLsLsabababLseMLsLsDELILshKLsLsLseMLsdtdtPAGTGTGTGTGTGTGTGTPAdtdtLsLsLsLsLsLsLscccdcdcdcdcdcdcdccLsLsLsababababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajakakakakakakakakakakajakakamakakakakakakakakamakakakajajakakakakakakajajajajCqCqCqCqCqCqCqhsLsLsLsLsLsLsLsLsLspuCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLssLsLcssLsLLsLsPhPhPhPhPhaZaXaXaXaYsLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsababLsLsLsLsNNLseMLsNNLsnhLBLsdtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLscccdOiOiUGOiOicdccaWLsLsLsabababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajakakakamakakakakajajajakakakakakakakakajajakakakakakakakakakakakakakajaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUchaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaXaXaXaXaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUciaUckclcmckaUcmaUcnclckaUaUcodtGTGTVMGTGTcxOyCyEyGTGTVMGTGTdtdtdtdtdtdtdtcccdOiPCNkPCOicdccLsLsLsLsabababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababajakakakakakakakakajajakajakakakakakakajakakakakakakakakakakakajakakakajaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXcbaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbgaXcfaXaXaXcgaXcqcraXaXcqcraYIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTGTGTGTPAGTGTIUcccdUGcvRjDkUGcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababajajajakajajajakakakakakakakakakakakakajajakakakakakajakakamakajajajakakajaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXbpaXaXaXbraXaXaXaXcbaXaXaXaXaXaXaXaXaXaXaXbgaXaXaXctaXcucwcwcuaXcyaXaXcBdtrtGTdtrtGTnLGgavbcGTpddtGTGTGTGTGTGTGTKcdtcccdEIKnKnVyEIcdccLILskeLsLsLsLsababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababajajajabajakakakakakakakakajakakakajajakakakakajajajakakakakajakakakakaXaXaXaXczaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbgaXcfaXaXaXcfaXctaXcqaXaXcgaYIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTZqGTGTGTGTGTIUcccdEIMsYgMsEIcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababbvPRbxbxbybybybybybyababababababababababababQvmJLfQvelQvQvsEQvfOQvLsLsLsLILsLsQvQvQvLsBRkeLsLsLsLILsLsLsLsLsLsLsababababababababLsLsLskeLsLsababababLsLsLskeLsLsLILsLsLsababLsababababLsLsLsLsLsLsLsLsLsLILsabababababababababLsLsLsLsLsLsaZaXaXaXaYLsLsLsLILsLsababababababababababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsBRLsLsLsabababababababababababababababLsLskeLsLsLsLsBRLsLsLsLsBRLsLsabababababababababababababababababababababababababaaaa +aaaaabababababbybxZkbxbxbxPRbxZkbyababababababababababababQvpVQvQvQvpVQvQvLfQvQvLsLIBRLsLsBRLsLsLBLsLsLsLsaWLsLsLsLsLILsLsLILsababababababLsLsLsLILsLsLsLsLsababLsLsLILsLsLsLsLskeLsLsababLsLsLskeLsLsLsLsLsLsLsLskeLsLsLsababababababababLsLsLsLsLskeLsbzbrbrbrbBLsLsLsLsLsLsababababababababLsLsLsLsLsLsLsLsBRLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsabababababababababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababbybxPRbxPRbxbxbxPRbyabababababababababababQvQvQAQvBRLILsLsBRZlLIkeLsLsLsLsLILsLsLsLILsLILsLsLsLsLsLsLskeLsLsLsLsLsLsLsabLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababLsLsLILsLsLsLsbzaXaXaXbBLsLsLskeLsLsLsLsLsLsLsLsababLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsBRLsLsLsaWLsLsLskeLsLsLsLsLsLsababLsLsLsLsLsLsLsLsLILsLsLsLsBRLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa +aaaaabababababbybybybybybybybxbxbyababababababababababababpVQvkeLsLsLILsLsLsLsLsLsBRLsLsLsLsLsLsLsLsBRLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsbDaXaXaXaYXpLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababbybxPRbyababababababababababababyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXbFbGbHbGbIyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXabababababababababababababababababababababababababababaaaa +aaaaabababababababababababbyZkbxbyababababababababababababLILsLsLILsabababLsLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLILsLsLILsLsLsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLskeLsLsLsLILsLsLsLsLsLsLsLILsLsLsaZaXaXaXaYLsLsLILsLsLskeLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLILsLsLsabLsLsLsLsLILsLsLILsLsLsLsLILsLsLsLsaWLsLsLsLILsLsLsLILsLsLsLsLsaWLskeLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababbyPRbxbyababababababababababababLsababababababababababLsLsLsLILsLsLsLsLsLsLskeLsLILsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLsLsLsababLsLILsLsLsLsLskeLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLILsaZaXaXcbaYLsLsLsLsLsLsLsLsLILsLsLsLILsLskeLsLsLsLsLsLsLsabLsababababLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsabLsabababLsabLsLsababLsLIabababababababababababababababababababababababababababababababaaaa +aaaaabababababababababababbybxbxbybybybyajajajababababababababababababajababababLILsLsLsLsLsLsLsLsLsLsLsababababLsababababababLsLsLskeLsLsaWLsLsLsLILsLsLsLsLsLILsLsabababpuCqCqCqpuLsLsLsLsLsLskeLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsXpLsLILsLskeLsLsLsLsXpaZaXaXaXaYLsLsXpLsaWLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsabababababababababababababLsLILsLsLsLskeLsLsLsLILsabababababababababLIabababababababababLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababbybxbxbxPRbUakajajajajajabababababababababajajajabababababLsababababababababababababababababajajababababLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababpupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsaZaXaXaXaYLsLsLsLsLsLsLsLssLsLsLsLsLLsLsLsLsLsLsababababababababababababababababLsLsaWLsLILsLsababababababababababababababababababababababLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababababbybxPRbxbxakJPakajakakajajababababababababajakajajababababababababababababajajajajajajajajajajajababababLsLsLsLsLILsLsababLsLsLsLsabababababCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLssLsLsLsLsLLsXpLsPhPhPhPhPhaZaXaXaXaYsLsLsLsLsLLsLsLssLcscscssLLsLsLsLsLsLsababababababababababababababababLsabLsLsLsLsLsababababababababababababababababLsabababLsLsLsLsLsLILsabababababababababababababababababababababababababaaaa +aaaaabababababababababababbybybybybwbybybyajamakakajajabababababababajakakajajajajababababababababajajakakakakakakakakakajajababababababLsLsabababababababababababLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLILsLsLsaZaXaXaXaYsLVZcscssLLsXpLssLcsnmcssLLsLsLsXpLsabababababababababababababababababababLsababLsabababababababababababababLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsabababababababababababababababababababababababaaaa +aaaaababababababababababababbybxPRbxbxbxbyajajakakakajajababajajajajajakakakakajajajajajajajajajajajakakakakakakajajakakakajajabababababababababababababababababLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLsLsLsLsLsLsLILsXpLsLssLcsnmcscsLsLsLsLsLsLsLsLsaZcbaXaXaYcscsnmcssLLsLsLssLVZcscssLLsLsLsLsLsababababababababababLsLsabLsLsLsabababababababababababLsLsLsababababLsLsLILsLsLsLsLsLsLsLsLsLskeLsLsabLsLsabababababababababababababababababababababababaaaa +aaaaababababababababababababbyKubxzCZkuDbyabajajajakakajajababajakakakakakakakakajajakakakakakakakakakakakakakajajajakakakakajabababababababababababLsabLsLsLsLsLsCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsaWLsLsLsLsLsLsLsLsLsLsLsLsLssLVZcscssLLsXpLssLsLsLsLsLaZaXaXaXaYsLcscscssLLsXpLssLsLcssLsLLsLsLsLsLsabababababababLsLsLsLsLsLsLsLsLsabababababababLsLsLsLsLIDELsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababbybxWxrnbxbxbyabababajajamakajajabajamakakakamakakakajajajakakakakakakajajajakakajajajakakakakakajabababababababababLsLsLsLsLsLsLILsLsCqCqCqOwCqCqzWCqCqOwCqCqCqLsLsLsLsLsLskeLsLsLskeLsLsLsLsLsLssLsLsLsLsLLsLsLssLcsVZcssLaZaXaXaXaYsLsLsLsLsLLsLsLsLsLsXpLsLsLsaWLsLsababababababLsLsLsLskeLsLsLsLsLILsLsLsabLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsaWLsLsLsLsDELsLsLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababbyuDPRzCZkuDbyababababajajakakajajajakakakakakakakakakajajakakamakakakakajajakakakakakakakakakakajajababababababhshsLsLsLsLskeLsLsLsgJCqCqCqCqCqCqCqCqCqCqCqCqCqLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLsLsLsLsLsLsLskesLcsnmcscsaZaXcbaXaYLsLsLsLsLsLskeLsLILsLsLsLsLsLsXpLsabababababLsLsLsLILsLsLsDELsLsLsLsLsLsLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsDELsLsLsLILsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababbyLkfYrnbxbxbyabababababajajamakakakakakajakakakakakakakakakakakakamakakakakakamakakakakakakakakakajababababababCqhshsLsLsLIgJLskeLsLspupuQuCqOwCqCqCqOwCqQupupuLsLsLsLsLsLsLskeLsLsLsLILsLsaWLsLsLssLsLsLsLsLLsLssLcscscssLaZaXaXaXaYsLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsLsababLsLsLskeLsLsLsLsaWLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLILsLsLsLsDELsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaababababababababababababbyuDVlzCbxuDbyababababababajajakakakakajajajakakakamakakakakakakakajajakakakakakakajakajakakakamakajajajajajababCqCqhshsLsLsLsLsaWLsLsLspuCqCqCqCqOwCqCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLskeLssLcscscssLLsLssLsLsLsLsLaZaXaXaXaYsLcscsVZsLLsLsXpsLcscsVZsLLsLskeLsababLsLsLILsLsLseMLsLsLsLsLsLILskeLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababababaaaa +aaaaababababababababababababbybxWxVxPRbxbyabababababababajajakakakajajakakakakakakakakakakajajajajakakakakajajajajajakakakakakakakakakajajCqCqCqCqhshsLskeLsLsLsLsLIgJCqCqCqCqCqCqCqCqCqLsLsLsLskeLsLILsLsLsLskeLsLsLsLsLsLsLsLssLcsnmVZsLLsLsLsXpLsLsPhaZaXcbaXaYcscsnmcssLLsLsLscscsnmcssLLsLILsLsababLsLsLshKLsLBLsLskeLsDELsLsLsLsdtdtLyGTLyPALyGTLyGTdtdtLsLskeLsLsLsLILsccccccccccccccccccLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababbyKuZkbxbxuDbyababababababababajakakakakakakakakakajajajakakakakajajakakakakakakajajajajajakamakakakakakakajajCqCqCqCqCqhshsLsLsLskeLsLsLsLspupuCqQuCqpupuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsXpLssLcscscssLLsXpLsLsLsLsPhaZaXaXaXaYsLcscscssLLskeXpsLcscsVZsLLsLsLsLsabababLseMLsLsDELILshKLsLsLseMLsdtdtPAGTGTGTGTGTGTGTGTPAdtdtLsLsLsLsLsLsLscccdcdcdcdcdcdcdccLsLsLsababababababababababababababababababababababababababababaaaa +aaaaababababababababababababbyfCPRecZkHHbyabababababababajajakakakakakakakakakakajakakamakakakakakakakakamakakakajajakakakakakakajajajajCqCqCqCqCqCqCqhsLsLsgJLsLsgJgJLsLspuCqCqCqpuLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLssLsLcssLsLLsLsPhPhPhPhPhaZaXaXaXaYsLsLsLsLsLLsLsLssLsLsLsLsLLsLsLsLsababLsLsLsLsNNLseMLsNNLsnhLBLsdtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLscccdOiOiUGOiOicdTeaWLsLsLsabababababababababababababababababababababababababababaaaa +aaaaababababababababababababbybybybybybybyabababababababajajakakakamakakakakajajajakakakakakakakakajajakakakakakakakakakakakakakajaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUchaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaXcbaXaXaXaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUaUciaUckclcmckaUcmaUcnclckTCaUcodtGTGTVMGTGTcxOyCyEyGTGTVMGTGTdtdtdtdtdtdtdtcccdOiPCNkPCOicdccLsLsLsLsabababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababajakakakakakakakakajajakajakakakakakakajakakakakakakakakakakakajakakakajaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXcbaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbgaXcfaXgBaXcgaXSEcraXaXcqcraYIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTGTGThGPAGTGTIUccUMUGcvRjDkUGcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababajajajakajajajakakakakakakakakakamakakajajakakamakakajakakamakajajajakakajaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXaXaXaXaXaXaXaXaXaXaXaXaXbpaXaXaXbraXaXaXaXcbaXaXaXaXaXaXaXaXaXaXaXbgaXaXaXctaXcucwcwcuaXaXaXaXcBdtrtSudtrttDnLGgavbcGTpddtGTGTGTGTGTGTGTGTdtcccdEIKnKnVyEIcdccLILskeLsLsLsLsababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababajajajabajakakakakakakakakajakakakajajakakakakajajajakakakakajakakakakaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXbraXcbaXcbaXaXaXaXaXaXaXaXaXaXaXaXaXbraXcbaXaXaXaXaXcbaXcbaXaXaXaXaXaXbgaXcfaXaXaXcfaXctaXcqaXaXcgaYIUGTGTVMGTGTGTGTGTGTGTGTVMGTGTZqGThGGTGTGTIUcccdEIMsYgMsEIcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababababababababajajajakakakakakakajajakakakakakakakajajajakakakakakajakakakajbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcDbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcEbdbdbdcFcGbdcHcJbdbdcGcKbdbedtGTGTVMGTGTeaRbjRTMGTGTVMGTGTdtdtdtdtdtdtdtcccdOiOiOiOiOicdccLsDELsLILsLsabababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababajajakamakakajajajakakakakakakakakakakakakakakakakakakakajCqCqCqCqCqCqCqCqCqCqhsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsPhLsLsLsLssLsLcssLsLLsPhPhPhLssLsLcssLsLLssLsLcssLsLLsLsLsLsLILsLsLsLsababLsNNeMLsnhLsLseMLskiLsLBkidtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLscccdOiJBJBJBOicdccLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababajajakamakakajajajakakakakakakakakakakakakamakakakakakakajCqCqCqCqCqCqCqCqCqCqhsLsLsLsLsgJLsLsLsLsgJLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsPhLsLsLsLssLsLcssLsLLsPhPhPhLssLsLcssLsLLssLsLcssLsLLsLsLsLsLILsLsLsLsababLsNNeMLsnhLsrmeMLskiRfLBkidtdtGTGTGTSuGTGTGTGTGTGTGTGTdtdtLsLsLsLsLsLscccdOiJBJBJBOicdccLsLsLsLsLsLsLsababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababababababababajajajakakakajakajakamakakakakakakakajakakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLsLskeLsLskeLsLsLsLsLskeLsLsLsLsLsLsaWLsLsLsLsLsLsLsLsLskeLsLsLILsLsLsLsLsLsLssLVZcscssLLsLskeLsLssLVZcscssLLssLcscscssLLsLskeLsLsLsLsLsababababLsLsLskeLsLBLsLshKLseMLsLsdtdtZqGTGTGTGTGTGTGTGTZqdtdtLsLsLsLILsLsLscccdLPLPLPLPLPcdccLsLsLsaWLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababajakakakakakakakakakakakakakajajajakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLsLsLsLsLsLsaWLsLsLILsLsLsLILsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsXpLsLssLcsnmVZsLLsaWLsLsLssLcsnmcssLLssLcsnmcssLLILsLsLsLsabababababababababLBLshKLskiLsLskeLsLsDELsdtdtLyGTLyZqLyGTLyGTdtdtLsLsLskeLsLsLsLscccdcdcdcdcdcdcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababajajakakakakakajajajakakakakajajajajakakamakajajCqCqawCqCqCqCqCqCqhshsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLssLcscscssLLssLVZcscssLLsLsababababababababababababLsLsLsLsLsDELsLsLsLsLsLsLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLILsLsccccccccccccccccccLsLskeLsLsababababababababababababababababababababababababababaaaa -aaaaababababababababababababababababababababababababababababababababababababababajakakakajajajabajajajajajajajajakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLskeLsLsLsLsLskeLsLsLsLsLskeLsLsLsLsLsabLsLsLILsLsLsLsabLsLsLsLsLsLsLILsLsLsLsLsLsLssLsLsLsLsLLsLsLsababsLsLsLsLsLLssLsLsLsLsLabababababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLILsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababajakakakakakakakakakakakakakajajajakakakakakakajajCqCqCqCqCqCqCqCqCqhshsLsgJLsLsLsLsLsaWLsLsLILsLsLsLILsLskeLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsXpLsLsXpLsLssLcsnmVZsLLsaWXpLsXpsLcsnmcssLLssLcsnmcssLLILsLsLsLsabababababababababLBLshKLskiLsLskeLsLsDELsdtdtLyGTLyZqLyGTLyGTdtdtLsLsLskeLsLsLsLscccdcdcdcdcdcdcdccLsLsLsLsLsLsabababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababajajakakakakakajajajakakakakajajajajakakamakajajCqCqCqCqCqCqCqCqCqhshsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsLsLsLsLsLsLsLssLcscscssLLsLsLsLsLssLcscscssLLssLVZcscssLLsLsababababababababababababLsLsLsLsLsDELsLsLsLsLsLsLsdtdtdtdtdtdtdtdtdtdtLsLsLsLsLsLsLILsLsccccccTeccccccccccLsLskeLsLsababababababababababababababababababababababababababaaaa +aaaaababababababababababababababababababababababababababababababababababababababajakakakajajajabajajajajajajajajakakakakajajCqCqCqCqCqCqCqCqCqhshsLsLskeLsLsLsLsLskeLsLsgJLsLskeLsgJLsLsLsabLsLsLILsLsLsLsabLsLsLsLsLsLsLILsLsLsLsLsLsLssLsLsLsLsLLsLsLsababsLsLsLsLsLLssLsLsLsLsLabababababababababababababababLsLsLsLsLsLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsaWLsLsLILsaWLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababababababababababababababajajajajajababababababajabajajajajajajajajCqCqCqabCqCqCqCqCqhshsLsLsLsLsLsLsLsLsLsabLsLsLsLsLsLsLsLsLsabLsabLsLsLsLsababababababLsLsLsLsLsaWLsLskeLsLsLsLsLsLsLsLsLsabababababababLsLsLsabababababababababababababababababababababababLsLsLsaWLsLsLsLsLsLsaWLsLsLskeLsLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLILsLsDELsLsLILsLsLsababababababababababababababababababababababababababaaaa -aaaaabababababababababababababababababababababababababababababababababababababababajajabajabababababababababababajabajajajabababababababCqhshsLsLsLsLsLsLsabababababababLsLsLsababababababababLsLsabababababababLsLsLsabLsabLsLsLsLsLsLsLILsLsLsababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsDELsLsLsLsLsLsLsLsabLsLsabLsLsLskeLsLsDELsLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa +aaaaabababababababababababababababababababababababababababababababababababababababajajabajabababababababababababajabajajajabababababababCqhshsLsLsLsLsgJLsabababababababLsLsLsababababababababLsLsabababababababLsLsLsabLsabLsLsLsLsLsLsLILsXpLsababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsDELsLsLsLsLsLsLsLsabLsLsabLsLsLskeLsLsDELsLsLskeLsLsLsLsLsLsLsLsLsababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababajajababababababababhsLsLsababLsLsababababababababLsLsabababababababababababababababababababababababababababLsLsLsLsLsLsLsabababababababababababababababababababababababababababababababababababababababLsLsLsLsLsLsLsabLsLsabLsabababababLsLsLsLsLsLsLsLsLsLsLsLsLILsLsLsLsLsabababababababababababababababababababababababababababababaaaa aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsLsabababababababababababababababababababababababababababababababababababababababababababababLsabLsLsababababababababababababababababababababababababababababababababababababababababababLsLsababababababababababababLsLsLsLsLsLILsLsLsLsaWLsLsabababLsLsabababababababababababababababababababababababababababababaaaa aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababLsLsabLsLsLsLsLsababababababababababababababababababababababababababababababababababababababaaaa diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index dd28168c..8c4c9b7a 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -271,6 +271,14 @@ icon = 'icons/obj/statuelarge.dmi' icon_state = "venus" +/obj/structure/statue/sandstone/abs + max_integrity = 300 + anchored = TRUE + name = "ancient statue" + desc = "An ancient statue, representing one of the gods. It almost seems like it's alive." + icon = 'icons/obj/statue_egypty.dmi' + icon_state = "abs" + /////////////////////snow///////////////////////////////////////// /obj/structure/statue/snow diff --git a/icons/obj/statue_egypty.dmi b/icons/obj/statue_egypty.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3234f8bb46b4deff97e5f5a09aecbc6438975e52 GIT binary patch literal 30037 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

C2@Z>~VEWuOpf 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 Date: Tue, 6 Jul 2021 17:14:12 -0300 Subject: [PATCH 15/21] replaces the the omnilathe to a sci lathe --- _maps/RandomZLevels/away_mission/stargate.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/RandomZLevels/away_mission/stargate.dmm b/_maps/RandomZLevels/away_mission/stargate.dmm index 093e9616..65663d91 100644 --- a/_maps/RandomZLevels/away_mission/stargate.dmm +++ b/_maps/RandomZLevels/away_mission/stargate.dmm @@ -188,7 +188,7 @@ "jD" = (/turf/open/floor/carpet,/area/awaymission/stargate/building) "jF" = (/obj/structure/table/wood/fancy/black,/obj/item/clothing/head/nemes,/turf/open/floor/mineral/basaltstone_floor,/area/awaymission/stargate/building) "jH" = (/obj/structure/flora/ausbushes/reedbush,/turf/open/floor/plating/dirt/jungle,/area/awaymission/stargate) -"jR" = (/obj/machinery/rnd/production/protolathe,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) +"jR" = (/obj/machinery/rnd/production/protolathe/department/science,/turf/open/floor/mineral/bananium,/area/awaymission/stargate/building) "jX" = (/obj/structure/closet/crate/wooden,/obj/item/stack/sheet/glass/fifty,/obj/item/stack/sheet/glass/fifty,/turf/open/floor/wood,/area/awaymission/stargate/building) "jZ" = (/obj/structure/flora/grass/jungle,/turf/open/floor/plating/dirt/dark/jungle,/area/awaymission/stargate) "ke" = (/obj/structure/flora/tree/desertdead,/turf/open/floor/plating/asteroid,/area/awaymission/stargate) From 7c5ef7c91d65f42c55acaf2fd9712478ca0ee0fe Mon Sep 17 00:00:00 2001 From: Archie Date: Fri, 9 Jul 2021 22:45:59 -0300 Subject: [PATCH 16/21] typo fix --- code/modules/admin/IsBanned.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 13ee6a08..17b7668e 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -107,7 +107,7 @@ if(text2num(duration) > 0) expires = " The ban is for [duration] minutes and expires on [expiration] (server time)." else - expires = " The is a permanent ban." + expires = " This is a permanent ban." var/desc = "\nReason: You, or another user of this computer or connection ([pkey]) is banned from playing here. The ban reason is:\n[reason]\nThis ban (BanID #[banid]) was applied by [akey] on [bantime] during round ID [ban_round_id], [expires]" From 66de151703b1045528c86e251b69bb562e6ffd4d Mon Sep 17 00:00:00 2001 From: Dahlular <55758850+Dahlular@users.noreply.github.com> Date: Mon, 12 Jul 2021 15:37:56 -0600 Subject: [PATCH 17/21] >gets chaos 3.75 with 19 nonvotes, and 7 votes --- code/controllers/subsystem/vote.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index a6c3e787..d0d228ac 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -1,6 +1,6 @@ #define DYNAMIC_DEFAULT_CHAOS 1.0 //The default chaos value for low pop low vote rounds #define DYNAMIC_VOTE_NORMALIZATION 8 //If there are fewer than this many votes, the average will be skewed towards the default -#define DYNAMIC_NONVOTER_FACTOR 0.6 // 1 means they count for a full vote +#define DYNAMIC_NONVOTER_FACTOR 1 // 1 means they count for a full vote #define DYNAMIC_NONVOTER_VALUE 1.5 // The chaos value that non-voters should account for. SUBSYSTEM_DEF(vote) From ac101ac67e427a3eec9d03a6b175ed65852bd688 Mon Sep 17 00:00:00 2001 From: Archie Date: Mon, 12 Jul 2021 20:36:08 -0300 Subject: [PATCH 18/21] Removes voice of god prefbreak for something more... 'Family friendly' --- code/modules/surgery/organs/vocal_cords.dm | 11 ++++++++++- hyperstation/sound/misc/family.ogg | Bin 0 -> 34035 bytes 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 hyperstation/sound/misc/family.ogg diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 3f616d5a..309e554e 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -254,7 +254,8 @@ var/static/regex/clap_words = regex("clap|applaud") var/static/regex/honk_words = regex("ho+nk") //hooooooonk var/static/regex/multispin_words = regex("like a record baby|right round") - var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //CITADEL CHANGE + var/static/regex/family_friendly_words = regex("family") //Hyper change + //var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //CITADEL CHANGE var/static/regex/dab_words = regex("dab|mood") //CITADEL CHANGE var/static/regex/snap_words = regex("snap") //CITADEL CHANGE var/static/regex/bwoink_words = regex("what the fuck are you doing|bwoink|hey you got a moment?") //CITADEL CHANGE @@ -572,6 +573,7 @@ var/mob/living/L = V L.SpinAnimation(speed = 10, loops = 5) + /* Yeah nah fam. //CITADEL CHANGES //ORGASM else if((findtext(message, orgasm_words))) @@ -580,6 +582,13 @@ var/mob/living/carbon/human/H = V if(H.canbearoused && H.has_dna() && HAS_TRAIT(H, TRAIT_NYMPHO)) // probably a redundant check but for good measure H.mob_climax(forced_climax=TRUE) + */ + else if((findtext(message, family_friendly_words))) + cooldown = COOLDOWN_MEME + for(var/V in listeners) + var/mob/living/M = V + M.say(pick("You don't turn your back on family.","...Even when they do.")) + SEND_SOUND(M, sound('hyperstation/sound/misc/family.ogg',volume=75)) //DAB else if((findtext(message, dab_words))) diff --git a/hyperstation/sound/misc/family.ogg b/hyperstation/sound/misc/family.ogg new file mode 100644 index 0000000000000000000000000000000000000000..39c97e7e505c1311fbc5a0215d567d5e2df3efc8 GIT binary patch literal 34035 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 P6r&V>>AC4A>;U`^yRYzI literal 0 HcmV?d00001 From e47eb5af2e538e3bccc02bda31e045c009c8b3f1 Mon Sep 17 00:00:00 2001 From: Archie Date: Thu, 15 Jul 2021 02:29:28 -0300 Subject: [PATCH 19/21] Oh yes. --- code/game/objects/items/grenades/spawnergrenade.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index 466caf93..1d628751 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -48,4 +48,10 @@ icon_state = "clustaur" item_state = "clustaur" deliveryamt = 5 - spawner_type = /obj/item/reagent_containers/glass/beaker/waterbottle/wataur \ No newline at end of file + spawner_type = /obj/item/reagent_containers/glass/beaker/waterbottle/wataur + +/obj/item/grenade/spawnergrenade/mimics + desc = "Months after their first arrival, compression tests were already successful and thus Kinaris created the first mimic bioweapon, a simple payload to deliver a cluster of them to an area." + name = "mimic delivery grenade" + spawner_type = /mob/living/simple_animal/hostile/hs13mimic + deliveryamt = 10 From 1a5d5485da981cd22346df3834df83a4e57d604b Mon Sep 17 00:00:00 2001 From: Archie Date: Thu, 15 Jul 2021 02:29:55 -0300 Subject: [PATCH 20/21] eh --- code/game/objects/items/grenades/spawnergrenade.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index 1d628751..52ebe761 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -51,7 +51,7 @@ spawner_type = /obj/item/reagent_containers/glass/beaker/waterbottle/wataur /obj/item/grenade/spawnergrenade/mimics - desc = "Months after their first arrival, compression tests were already successful and thus Kinaris created the first mimic bioweapon, a simple payload to deliver a cluster of them to an area." + desc = "Months after their first arrival, compression tests were already successful and thus Kinaris created the first mimic bioweapon, a simple payload to quickly release a cluster of them." name = "mimic delivery grenade" spawner_type = /mob/living/simple_animal/hostile/hs13mimic deliveryamt = 10 From a24fe4445a357fa6a65d885ac359cd3345ff520e Mon Sep 17 00:00:00 2001 From: Winter Flare <7543955+Owai-Seek@users.noreply.github.com> Date: Thu, 15 Jul 2021 11:05:05 -0400 Subject: [PATCH 21/21] Update bags.dm --- code/game/objects/items/storage/bags.dm | 61 ++++++++++++------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 809e4bdb..6c3dbee7 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -295,7 +295,7 @@ * Trays - Agouri */ /obj/item/storage/bag/tray - name = "tray" + name = "serving tray" icon = 'icons/obj/food/containers.dmi' icon_state = "tray" desc = "A metal tray to lay food on." @@ -310,55 +310,54 @@ /obj/item/storage/bag/tray/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 15 //I want my sushi god damn it - STR.insert_preposition = "on" + STR.max_w_class = WEIGHT_CLASS_NORMAL //Allows stuff such as Bowls, and normal sized foods, to fit. STR.can_hold = typecacheof(list( /obj/item/reagent_containers/food, + /obj/item/reagent_containers/glass, + /obj/item/clothing/mask/cigarette, + /obj/item/storage/fancy, + /obj/item/storage/box/matches, + /obj/item/trash, + /obj/item/lighter, + /obj/item/rollingpaper, /obj/item/kitchen, - /obj/item/storage/box/donkpockets)) - -/obj/item/storage/bag/tray/pre_attack(atom/A, mob/living/user, params) - if(istype(A, /obj/structure/table) && user.a_intent == INTENT_HELP) //I want my tray god damn it - if(user.transferItemToLoc(src, get_turf(A))) - var/list/click_params = params2list(params) - if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) - return - pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) - return - ..() + /obj/item/organ, + )) //Should cover: Bottles, Beakers, Bowls, Booze, Glasses, Food, Food Containers, Food Trash, Organs, Tobacco Products, Lighters, and Kitchen Tools. + STR.insert_preposition = "on" + STR.max_items = 10 /obj/item/storage/bag/tray/attack(mob/living/M, mob/living/user) . = ..() // Drop all the things. All of them. var/list/obj/item/oldContents = contents.Copy() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.quick_empty() + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_QUICK_EMPTY) // Make each item scatter a bit for(var/obj/item/I in oldContents) - spawn() - for(var/i = 1, i <= rand(1,2), i++) - if(I) - step(I, pick(NORTH,SOUTH,EAST,WEST)) - sleep(rand(2,4)) + INVOKE_ASYNC(src, .proc/do_scatter, I) if(prob(50)) - playsound(M, 'sound/items/trayhit1.ogg', 50, 1) + playsound(M, 'sound/items/trayhit1.ogg', 50, TRUE) else - playsound(M, 'sound/items/trayhit2.ogg', 50, 1) + playsound(M, 'sound/items/trayhit2.ogg', 50, TRUE) - if(ishuman(M) || ismonkey(M)) + if(ishuman(M)) if(prob(10)) M.Knockdown(40) update_icon() -/obj/item/storage/bag/tray/update_icon() - cut_overlays() +/obj/item/storage/bag/tray/proc/do_scatter(obj/item/I) + for(var/i in 1 to rand(1,2)) + if(I) + step(I, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) + +/obj/item/storage/bag/tray/update_overlays() + . = ..() for(var/obj/item/I in contents) - var/mutable_appearance/MA = new (I) //I want my icons god damn it - MA.pixel_x = rand(-6, 6) - MA.pixel_y = rand(-6, 6) - add_overlay(MA) + var/mutable_appearance/I_copy = new(I) + I_copy.plane = FLOAT_PLANE + I_copy.layer = FLOAT_LAYER + . += I_copy /obj/item/storage/bag/tray/Entered() . = ..()