diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index dc05bae4431..56f05e84f10 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,15 +1,22 @@ Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255. -The latest database version is 4.6; The query to update the schema revision table is: +The latest database version is 4.7; The query to update the schema revision table is: -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 6); +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 7); or -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 6); +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 7); In any query remember to add a prefix to the table names if you use one. ---------------------------------------------------- +Version 4.7, 18 August 2018, by CitrusGender +Modified table `messages`, adding column `severity` to classify notes based on their severity. + +ALTER TABLE `messages` ADD `severity` enum('high','medium','minor','none') DEFAULT NULL AFTER `expire_timestamp` + +---------------------------------------------------- + Version 4.6, 11 August 2018, by Jordie0608 Modified table `messages`, adding column `expire_timestamp` to allow for auto-"deleting" messages. diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 18602cc52a9..dc0861220ae 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -254,6 +254,7 @@ CREATE TABLE `messages` ( `round_id` int(11) unsigned NOT NULL, `secret` tinyint(1) unsigned NOT NULL, `expire_timestamp` datetime DEFAULT NULL, + `severity` enum('high','medium','minor','none') DEFAULT NULL, `lasteditor` varchar(32) DEFAULT NULL, `edits` text, `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 938b293035a..5cb57a9582e 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -254,6 +254,7 @@ CREATE TABLE `SS13_messages` ( `round_id` int(11) unsigned NOT NULL, `secret` tinyint(1) unsigned NOT NULL, `expire_timestamp` datetime DEFAULT NULL, + `severity` enum('high','medium','minor','none') DEFAULT NULL, `lasteditor` varchar(32) DEFAULT NULL, `edits` text, `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', diff --git a/code/__DEFINES/MC.dm b/code/__DEFINES/MC.dm index 97ce6ef6fdd..161bb21d038 100644 --- a/code/__DEFINES/MC.dm +++ b/code/__DEFINES/MC.dm @@ -22,46 +22,46 @@ #define START_PROCESSING(Processor, Datum) if (!(Datum.datum_flags & DF_ISPROCESSING)) {Datum.datum_flags |= DF_ISPROCESSING;Processor.processing += Datum} #define STOP_PROCESSING(Processor, Datum) Datum.datum_flags &= ~DF_ISPROCESSING;Processor.processing -= Datum -//SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier) +//! SubSystem flags (Please design any new flags so that the default is off, to make adding flags to subsystems easier) -//subsystem does not initialize. +/// subsystem does not initialize. #define SS_NO_INIT 1 -//subsystem does not fire. -// (like can_fire = 0, but keeps it from getting added to the processing subsystems list) -// (Requires a MC restart to change) +/** subsystem does not fire. */ +/// (like can_fire = 0, but keeps it from getting added to the processing subsystems list) +/// (Requires a MC restart to change) #define SS_NO_FIRE 2 -//subsystem only runs on spare cpu (after all non-background subsystems have ran that tick) -// SS_BACKGROUND has its own priority bracket +/** subsystem only runs on spare cpu (after all non-background subsystems have ran that tick) */ +/// SS_BACKGROUND has its own priority bracket #define SS_BACKGROUND 4 -//subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background)) +/// subsystem does not tick check, and should not run unless there is enough time (or its running behind (unless background)) #define SS_NO_TICK_CHECK 8 -//Treat wait as a tick count, not DS, run every wait ticks. -// (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems) -// (implies all runlevels because of how it works) -// (overrides SS_BACKGROUND) -// This is designed for basically anything that works as a mini-mc (like SStimer) +/** Treat wait as a tick count, not DS, run every wait ticks. */ +/// (also forces it to run first in the tick, above even SS_NO_TICK_CHECK subsystems) +/// (implies all runlevels because of how it works) +/// (overrides SS_BACKGROUND) +/// This is designed for basically anything that works as a mini-mc (like SStimer) #define SS_TICKER 16 -//keep the subsystem's timing on point by firing early if it fired late last fire because of lag -// ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds. +/** keep the subsystem's timing on point by firing early if it fired late last fire because of lag */ +/// ie: if a 20ds subsystem fires say 5 ds late due to lag or what not, its next fire would be in 15ds, not 20ds. #define SS_KEEP_TIMING 32 -//Calculate its next fire after its fired. -// (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be) -// This flag overrides SS_KEEP_TIMING +/** Calculate its next fire after its fired. */ +/// (IE: if a 5ds wait SS takes 2ds to run, its next fire should be 5ds away, not 3ds like it normally would be) +/// This flag overrides SS_KEEP_TIMING #define SS_POST_FIRE_TIMING 64 -//SUBSYSTEM STATES -#define SS_IDLE 0 //aint doing shit. -#define SS_QUEUED 1 //queued to run -#define SS_RUNNING 2 //actively running -#define SS_PAUSED 3 //paused by mc_tick_check -#define SS_SLEEPING 4 //fire() slept. -#define SS_PAUSING 5 //in the middle of pausing +//! SUBSYSTEM STATES +#define SS_IDLE 0 /// aint doing shit. +#define SS_QUEUED 1 /// queued to run +#define SS_RUNNING 2 /// actively running +#define SS_PAUSED 3 /// paused by mc_tick_check +#define SS_SLEEPING 4 /// fire() slept. +#define SS_PAUSING 5 /// in the middle of pausing #define SUBSYSTEM_DEF(X) GLOBAL_REAL(SS##X, /datum/controller/subsystem/##X);\ /datum/controller/subsystem/##X/New(){\ diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm new file mode 100644 index 00000000000..e66d5186440 --- /dev/null +++ b/code/__DEFINES/footsteps.dm @@ -0,0 +1,66 @@ +#define FOOTSTEP_WOOD "wood" +#define FOOTSTEP_FLOOR "floor" +#define FOOTSTEP_PLATING "plating" +#define FOOTSTEP_CARPET "carpet" +#define FOOTSTEP_SAND "sand" +#define FOOTSTEP_GRASS "grass" +#define FOOTSTEP_WATER "water" +#define FOOTSTEP_LAVA "lava" + +/* + +id = list( +list(sounds), +base volume, +extra range addition +) + + +*/ + +GLOBAL_LIST_INIT(footstep, list( + FOOTSTEP_WOOD = list(list( + 'sound/effects/footstep/wood1.ogg', + 'sound/effects/footstep/wood2.ogg', + 'sound/effects/footstep/wood3.ogg', + 'sound/effects/footstep/wood4.ogg', + 'sound/effects/footstep/wood5.ogg'), 100, 0), + FOOTSTEP_FLOOR = list(list( + 'sound/effects/footstep/floor1.ogg', + 'sound/effects/footstep/floor2.ogg', + 'sound/effects/footstep/floor3.ogg', + 'sound/effects/footstep/floor4.ogg', + 'sound/effects/footstep/floor5.ogg'), 75, -1), + FOOTSTEP_PLATING = list(list( + 'sound/effects/footstep/plating1.ogg', + 'sound/effects/footstep/plating2.ogg', + 'sound/effects/footstep/plating3.ogg', + 'sound/effects/footstep/plating4.ogg', + 'sound/effects/footstep/plating5.ogg'), 100, 1), + FOOTSTEP_CARPET = list(list( + 'sound/effects/footstep/carpet1.ogg', + 'sound/effects/footstep/carpet2.ogg', + 'sound/effects/footstep/carpet3.ogg', + 'sound/effects/footstep/carpet4.ogg', + 'sound/effects/footstep/carpet5.ogg'), 75, -1), + FOOTSTEP_SAND = list(list( + 'sound/effects/footstep/asteroid1.ogg', + 'sound/effects/footstep/asteroid2.ogg', + 'sound/effects/footstep/asteroid3.ogg', + 'sound/effects/footstep/asteroid4.ogg', + 'sound/effects/footstep/asteroid5.ogg'), 75, 0), + FOOTSTEP_GRASS = list(list( + 'sound/effects/footstep/grass1.ogg', + 'sound/effects/footstep/grass2.ogg', + 'sound/effects/footstep/grass3.ogg', + 'sound/effects/footstep/grass4.ogg'), 75, 0), + FOOTSTEP_WATER = list(list( + 'sound/effects/footstep/water1.ogg', + 'sound/effects/footstep/water2.ogg', + 'sound/effects/footstep/water3.ogg', + 'sound/effects/footstep/water4.ogg'), 100, 1), + FOOTSTEP_LAVA = list(list( + 'sound/effects/footstep/lava1.ogg', + 'sound/effects/footstep/lava2.ogg', + 'sound/effects/footstep/lava3.ogg'), 100, 0), +)) \ No newline at end of file diff --git a/code/__DEFINES/logging.dm b/code/__DEFINES/logging.dm index e3f662dc3fd..55131a26ed8 100644 --- a/code/__DEFINES/logging.dm +++ b/code/__DEFINES/logging.dm @@ -32,6 +32,7 @@ #define LOG_OWNERSHIP (1 << 11) #define LOG_GAME (1 << 12) #define LOG_ADMIN_PRIVATE (1 << 13) +#define LOG_ASAY (1 << 14) //Individual logging panel pages #define INDIVIDUAL_ATTACK_LOG (LOG_ATTACK) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 8f274fcde46..4e306d224d5 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -457,3 +457,5 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE)) #define CAMERA_NO_GHOSTS 0 #define CAMERA_SEE_GHOSTS_BASIC 1 #define CAMERA_SEE_GHOSTS_ORBIT 2 + +#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (istype(I, /client) ? I : (istype(I, /datum/mind) ? I:current?:client : null))) diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index 056c5a45653..c8a583a55ea 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -14,13 +14,13 @@ // Shuttle return values #define SHUTTLE_CAN_DOCK "can_dock" -#define SHUTTLE_NOT_A_DOCKING_PORT "not_a_docking_port" -#define SHUTTLE_DWIDTH_TOO_LARGE "docking_width_too_large" -#define SHUTTLE_WIDTH_TOO_LARGE "width_too_large" -#define SHUTTLE_DHEIGHT_TOO_LARGE "docking_height_too_large" -#define SHUTTLE_HEIGHT_TOO_LARGE "height_too_large" -#define SHUTTLE_ALREADY_DOCKED "we_are_already_docked" -#define SHUTTLE_SOMEONE_ELSE_DOCKED "someone_else_docked" +#define SHUTTLE_NOT_A_DOCKING_PORT "not a docking port" +#define SHUTTLE_DWIDTH_TOO_LARGE "docking width too large" +#define SHUTTLE_WIDTH_TOO_LARGE "width too large" +#define SHUTTLE_DHEIGHT_TOO_LARGE "docking height too large" +#define SHUTTLE_HEIGHT_TOO_LARGE "height too large" +#define SHUTTLE_ALREADY_DOCKED "we are already docked" +#define SHUTTLE_SOMEONE_ELSE_DOCKED "someone else docked" //Launching Shuttles to CentCom #define NOLAUNCH -1 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 6f49344dc6b..b62febed7e2 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -1,7 +1,7 @@ //Update this whenever the db schema changes //make sure you add an update to the schema_version stable in the db changelog #define DB_MAJOR_VERSION 4 -#define DB_MINOR_VERSION 6 +#define DB_MINOR_VERSION 7 //Timing subsystem //Don't run if there is an identical unique timer active diff --git a/code/__DEFINES/vehicles.dm b/code/__DEFINES/vehicles.dm new file mode 100644 index 00000000000..0bcc14d0d71 --- /dev/null +++ b/code/__DEFINES/vehicles.dm @@ -0,0 +1,9 @@ +//Vehicle control flags + +#define VEHICLE_CONTROL_PERMISSION 1 +#define VEHICLE_CONTROL_DRIVE 2 +#define VEHICLE_CONTROL_KIDNAPPED 4 //Can't leave vehicle voluntarily, has to resist. + + +//Car trait flags +#define CAN_KIDNAP 1 \ No newline at end of file diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm index bfadbc9104b..96807214f2f 100644 --- a/code/_globalvars/lists/typecache.dm +++ b/code/_globalvars/lists/typecache.dm @@ -5,4 +5,8 @@ GLOBAL_LIST_INIT(typecache_mob, typecacheof(/mob)) +GLOBAL_LIST_INIT(typecache_living, typecacheof(/mob/living)) + +GLOBAL_LIST_INIT(typecache_stack, typecacheof(/obj/item/stack)) + GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery, /obj/structure))) diff --git a/code/datums/components/README.md b/code/datums/components/README.md index b617c8a25b1..05ce0577216 100644 --- a/code/datums/components/README.md +++ b/code/datums/components/README.md @@ -32,8 +32,12 @@ Stands have a lot of procs which mimic mob procs. Rather than inserting hooks fo 1. `/datum/var/list/datum_components` (private) * Lazy associated list of type -> component/list of components. -1. `/datum/component/var/enabled` (protected, boolean) - * If the component is enabled. If not, it will not react to signals +1. `/datum/var/list/comp_lookup` (private) + * Lazy associated list of signal -> registree/list of registrees +1. `/datum/var/list/signal_procs` (private) + * Associated lazy list of signals -> `/datum/callback`s that will be run when the parent datum receives that signal +1. `/datum/var/signal_enabled` (protected, boolean) + * If the datum is signal enabled. If not, it will not react to signals * `FALSE` by default, set to `TRUE` when a signal is registered 1. `/datum/component/var/dupe_mode` (protected, enum) * How duplicate component types are handled when added to the datum. @@ -45,14 +49,12 @@ Stands have a lot of procs which mimic mob procs. Rather than inserting hooks fo * Definition of a duplicate component type * `null` means exact match on `type` (default) * Any other type means that and all subtypes -1. `/datum/component/var/list/signal_procs` (private) - * Associated lazy list of signals -> `/datum/callback`s that will be run when the parent datum receives that signal 1. `/datum/component/var/datum/parent` (protected, read-only) * The datum this component belongs to * Never `null` in child procs -1. `report_signal_origin` (protected, boolean) - * If `TRUE`, will invoke the callback when signalled with the signal type as the first argument. - * `FALSE` by default. +1. `report_signal_origin` (protected, boolean) + * If `TRUE`, will invoke the callback when signalled with the signal type as the first argument. + * `FALSE` by default. ### Procs @@ -88,6 +90,14 @@ Stands have a lot of procs which mimic mob procs. Rather than inserting hooks fo 1. `/datum/proc/_SendSignal(signal, list/arguments)` (private, final) * Handles most of the actual signaling procedure * Will runtime if used on datums with an empty component list +1. `/datum/proc/RegisterSignal(datum/target, signal(string/list of strings), proc_ref(type), override(boolean))` (protected, final) + * If signal is a list it will be as if RegisterSignal was called for each of the entries with the same following arguments + * Makes the datum listen for the specified `signal` on it's `parent` datum. + * When that signal is received `proc_ref` will be called on the component, along with associated arguments + * Example proc ref: `.proc/OnEvent` + * If a previous registration is overwritten by the call, a runtime occurs. Setting `override` to TRUE prevents this + * These callbacks run asyncronously + * Returning `TRUE` from these callbacks will trigger a `TRUE` return from the `SendSignal()` that initiated it 1. `/datum/component/New(datum/parent, ...)` (private, final) * Runs internal setup for the component * Extra arguments are passed to `Initialize()` @@ -121,13 +131,5 @@ Stands have a lot of procs which mimic mob procs. Rather than inserting hooks fo 1. `/datum/component/proc/UnregisterFromParent` (abstract, no-sleep) * Counterpart to `RegisterWithParent()` * Used to unregister the signals that should only be on the `parent` object -1. `/datum/component/proc/RegisterSignal(datum/target, signal(string/list of strings), proc_ref(type), override(boolean))` (protected, final) - * If signal is a list it will be as if RegisterSignal was called for each of the entries with the same following arguments - * Makes a component listen for the specified `signal` on it's `parent` datum. - * When that signal is received `proc_ref` will be called on the component, along with associated arguments - * Example proc ref: `.proc/OnEvent` - * If a previous registration is overwritten by the call, a runtime occurs. Setting `override` to TRUE prevents this - * These callbacks run asyncronously - * Returning `TRUE` from these callbacks will trigger a `TRUE` return from the `SendSignal()` that initiated it ### See/Define signals and their arguments in __DEFINES\components.dm diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index 1b6e8a69268..b3d3b464348 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -1,8 +1,6 @@ /datum/component - var/enabled = FALSE var/dupe_mode = COMPONENT_DUPE_HIGHLANDER var/dupe_type - var/list/signal_procs var/datum/parent /datum/component/New(datum/P, ...) @@ -57,15 +55,11 @@ return /datum/component/Destroy(force=FALSE, silent=FALSE) - enabled = FALSE - var/datum/P = parent - if(!force) + if(!force && parent) _RemoveFromParent() if(!silent) - SEND_SIGNAL(P, COMSIG_COMPONENT_REMOVING, src) + SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src) parent = null - for(var/target in signal_procs) - UnregisterSignal(target, signal_procs[target]) return ..() /datum/component/proc/_RemoveFromParent() @@ -89,7 +83,7 @@ /datum/component/proc/UnregisterFromParent() return -/datum/component/proc/RegisterSignal(datum/target, sig_type_or_types, proc_or_callback, override = FALSE) +/datum/proc/RegisterSignal(datum/target, sig_type_or_types, proc_or_callback, override = FALSE) if(QDELETED(src) || QDELETED(target)) return @@ -122,9 +116,9 @@ else // Many other things have registered here lookup[sig_type][src] = TRUE - enabled = TRUE + signal_enabled = TRUE -/datum/component/proc/UnregisterSignal(datum/target, sig_type_or_types) +/datum/proc/UnregisterSignal(datum/target, sig_type_or_types) var/list/lookup = target.comp_lookup if(!signal_procs || !signal_procs[target] || !lookup) return @@ -174,15 +168,15 @@ /datum/proc/_SendSignal(sigtype, list/arguments) var/target = comp_lookup[sigtype] if(!length(target)) - var/datum/component/C = target - if(!C.enabled) + 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/component/C = I - if(!C.enabled) + var/datum/C = I + if(!C.signal_enabled) continue var/datum/callback/CB = C.signal_procs[src][sigtype] . |= CB.InvokeAsync(arglist(arguments)) diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm new file mode 100644 index 00000000000..2276e7cd274 --- /dev/null +++ b/code/datums/components/footstep.dm @@ -0,0 +1,39 @@ +/datum/component/footstep + var/steps = 0 + var/volume + var/e_range + +/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + volume = volume_ + e_range = e_range_ + RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep) + +/datum/component/footstep/proc/play_footstep() + var/turf/open/T = get_turf(parent) + if(!istype(T)) + return + var/mob/living/LM = parent + var/v = volume + var/e = e_range + if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing) + return + if(iscarbon(LM)) + var/mob/living/carbon/C = LM + if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG)) + return + if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK) + v /= 2 + e -= 5 + steps++ + if(steps >= 6) + steps = 0 + if(steps % 2) + return + if(!LM.has_gravity(T) && steps != 0) // don't need to step as often when you hop around + return + playsound(T, pick(GLOB.footstep[T.footstep][1]), + GLOB.footstep[T.footstep][2] * v, + TRUE, + GLOB.footstep[T.footstep][3] + e) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 759b07f8c68..202de771978 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -27,8 +27,13 @@ max_amount = max(0, max_amt) show_on_examine = _show_on_examine disable_attackby = _disable_attackby + if(allowed_types) - allowed_typecache = typecacheof(allowed_types) + if(ispath(allowed_types) && allowed_types == /obj/item/stack) + allowed_typecache = GLOB.typecache_stack + else + allowed_typecache = typecacheof(allowed_types) + precondition = _precondition after_insert = _after_insert diff --git a/code/datums/components/remote_materials.dm b/code/datums/components/remote_materials.dm index b69c15c3297..b746997bb72 100644 --- a/code/datums/components/remote_materials.dm +++ b/code/datums/components/remote_materials.dm @@ -57,7 +57,7 @@ handles linking back and forth. list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), local_size, FALSE, - list(/obj/item/stack)) + /obj/item/stack) /datum/component/remote_materials/proc/set_local_size(size) local_size = size diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 88608d21ba1..e74e30b5366 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -2,7 +2,9 @@ var/gc_destroyed //Time when this object was destroyed. var/list/active_timers //for SStimer var/list/datum_components //for /datum/components - var/list/comp_lookup //for /datum/components + var/list/comp_lookup //it used to be for looking up components which had registered a signal but now anything can register + var/list/signal_procs + var/signal_enabled = FALSE var/datum_flags = NONE var/datum/weakref/weak_reference @@ -31,6 +33,9 @@ continue qdel(timer) + //BEGIN: ECS SHIT + signal_enabled = FALSE + var/list/dc = datum_components if(dc) var/all_components = dc[/datum/component] @@ -56,6 +61,10 @@ comp.UnregisterSignal(src, sig) comp_lookup = lookup = null + for(var/target in signal_procs) + UnregisterSignal(target, signal_procs[target]) + //END: ECS SHIT + return QDEL_HINT_QUEUE #ifdef DATUMVAR_DEBUGGING_MODE diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 45a490fc732..57cdb9bcf51 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -16,7 +16,7 @@ var/emote_type = EMOTE_VISIBLE //Whether the emote is visible or audible var/restraint_check = FALSE //Checks if the mob is restrained before performing the emote var/muzzle_ignore = FALSE //Will only work if the emote is EMOTE_AUDIBLE - var/list/mob_type_allowed_typecache = list(/mob) //Types that are allowed to use that emote + var/list/mob_type_allowed_typecache = /mob //Types that are allowed to use that emote var/list/mob_type_blacklist_typecache //Types that are NOT allowed to use that emote var/list/mob_type_ignore_stat_typecache var/stat_allowed = CONSCIOUS @@ -25,7 +25,16 @@ /datum/emote/New() if(key_third_person) emote_list[key_third_person] = src - mob_type_allowed_typecache = typecacheof(mob_type_allowed_typecache) + if (ispath(mob_type_allowed_typecache)) + switch (mob_type_allowed_typecache) + if (/mob) + mob_type_allowed_typecache = GLOB.typecache_mob + if (/mob/living) + mob_type_allowed_typecache = GLOB.typecache_living + else + mob_type_allowed_typecache = typecacheof(mob_type_allowed_typecache) + else + mob_type_allowed_typecache = typecacheof(mob_type_allowed_typecache) mob_type_blacklist_typecache = typecacheof(mob_type_blacklist_typecache) mob_type_ignore_stat_typecache = typecacheof(mob_type_ignore_stat_typecache) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 169f74eb32d..af5d400d15b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -62,6 +62,8 @@ var/unconvertable = FALSE var/late_joiner = FALSE + var/force_escaped = FALSE // Set by Into The Sunset command of the shuttle manipulator + /datum/mind/New(var/key) src.key = key soulOwner = src diff --git a/code/game/atoms.dm b/code/game/atoms.dm index d801b4d1750..b5d85eebded 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -613,6 +613,8 @@ log_admin(log_text) if(LOG_ADMIN_PRIVATE) log_admin_private(log_text) + if(LOG_ASAY) + log_adminsay(log_text) if(LOG_OWNERSHIP) log_game(log_text) if(LOG_GAME) diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index bf401e5ad2d..a3440fad39a 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -74,7 +74,7 @@ . = ..() AddComponent(/datum/component/slippery, 60, GALOSHES_DONT_HELP) GET_COMPONENT(slipper, /datum/component/slippery) - slipper.enabled = active + slipper.signal_enabled = active /obj/item/melee/transforming/energy/sword/bananium/attack(mob/living/M, mob/living/user) ..() @@ -99,7 +99,7 @@ /obj/item/melee/transforming/energy/sword/bananium/transform_weapon(mob/living/user, supress_message_text) ..() GET_COMPONENT(slipper, /datum/component/slippery) - slipper.enabled = active + slipper.signal_enabled = active /obj/item/melee/transforming/energy/sword/bananium/ignition_effect(atom/A, mob/user) return "" @@ -131,12 +131,12 @@ . = ..() AddComponent(/datum/component/slippery, 60, GALOSHES_DONT_HELP) GET_COMPONENT(slipper, /datum/component/slippery) - slipper.enabled = active + slipper.signal_enabled = active /obj/item/shield/energy/bananium/attack_self(mob/living/carbon/human/user) ..() GET_COMPONENT(slipper, /datum/component/slippery) - slipper.enabled = active + slipper.signal_enabled = active /obj/item/shield/energy/bananium/throw_at(atom/target, range, speed, mob/thrower, spin=1) if(active) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 5c37dd18c2b..69394a643ca 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -20,6 +20,8 @@ /datum/objective/proc/considered_escaped(datum/mind/M) if(!considered_alive(M)) return FALSE + if(M.force_escaped) + return TRUE if(SSticker.force_ending || SSticker.mode.station_was_nuked) // Just let them win. return TRUE if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) @@ -154,7 +156,7 @@ if(!target || !considered_alive(target) || considered_afk(target)) return TRUE var/turf/T = get_turf(target.current) - return T && !is_station_level(T.z) + return !T || !is_station_level(T.z) /datum/objective/mutiny/update_explanation_text() ..() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index c5e26c98eed..7a10e4122c0 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -25,10 +25,10 @@ var/list/chem_buttons //Used when emagged to scramble which chem is used, eg: antitoxin -> morphine var/scrambled_chems = FALSE //Are chem buttons scrambled? used as a warning var/enter_message = "You feel cool air surround you. You go numb as your senses turn inward." - occupant_typecache = list(/mob/living) /obj/machinery/sleeper/Initialize() . = ..() + occupant_typecache = GLOB.typecache_living update_icon() reset_chem_buttons() diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index ffe7961534f..7c92c158b37 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -50,7 +50,7 @@ /obj/machinery/droneDispenser/Initialize() . = ..() - var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, list(/obj/item/stack)) + var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/stack) materials.insert_amount(starting_amount) materials.precise_insertion = TRUE using_materials = list(MAT_METAL=metal_cost, MAT_GLASS=glass_cost) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index c1f41ac5c5f..01e304872f1 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -36,7 +36,7 @@ /obj/machinery/mecha_part_fabricator/Initialize() var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, - TRUE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + TRUE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE stored_research = new return ..() diff --git a/code/game/sound.dm b/code/game/sound.dm index 39ed83a765c..6bd53aba7ab 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -160,9 +160,9 @@ if("gun_remove_empty_magazine") soundin = pick('sound/weapons/gun_magazine_remove_empty_1.ogg', 'sound/weapons/gun_magazine_remove_empty_2.ogg', 'sound/weapons/gun_magazine_remove_empty_3.ogg', 'sound/weapons/gun_magazine_remove_empty_4.ogg') if("gun_slide_lock") - soundin = pick('sound/weapons/gun_slide_lock_1.ogg', 'sound/weapons/gun_slide_lock_2.ogg', 'sound/weapons/gun_slide_lock_3.ogg', 'sound/weapons/gun_slide_lock_4.ogg', 'sound/weapons/gun_slide_lock_5.ogg') + soundin = pick('sound/weapons/gun_slide_lock_1.ogg', 'sound/weapons/gun_slide_lock_2.ogg', 'sound/weapons/gun_slide_lock_3.ogg', 'sound/weapons/gun_slide_lock_4.ogg', 'sound/weapons/gun_slide_lock_5.ogg') if("law") - soundin = pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg') + soundin = pick('sound/voice/beepsky/god.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/beepsky/secureday.ogg', 'sound/voice/beepsky/radio.ogg', 'sound/voice/beepsky/insult.ogg', 'sound/voice/beepsky/creep.ogg') if("honkbot_e") - soundin = pick('sound/items/bikehorn.ogg', 'sound/items/AirHorn2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/items/AirHorn.ogg', 'sound/effects/reee.ogg', 'sound/items/WEEOO1.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bcreep.ogg','sound/magic/Fireball.ogg' ,'sound/effects/pray.ogg', 'sound/voice/hiss1.ogg','sound/machines/buzz-sigh.ogg', 'sound/machines/ping.ogg', 'sound/weapons/flashbang.ogg', 'sound/weapons/bladeslice.ogg') + soundin = pick('sound/items/bikehorn.ogg', 'sound/items/AirHorn2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/items/AirHorn.ogg', 'sound/effects/reee.ogg', 'sound/items/WEEOO1.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/beepsky/creep.ogg','sound/magic/Fireball.ogg' ,'sound/effects/pray.ogg', 'sound/voice/hiss1.ogg','sound/machines/buzz-sigh.ogg', 'sound/machines/ping.ogg', 'sound/weapons/flashbang.ogg', 'sound/weapons/bladeslice.ogg') return soundin diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 8bbf8ed2224..77c658419c7 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -7,6 +7,8 @@ var/list/archdrops var/wet + var/footstep = null + /turf/open/ComponentInitialize() . = ..() if(wet) @@ -18,6 +20,7 @@ name = "floor" icon = 'icons/turf/floors.dmi' icon_state = "floor" + footstep = FOOTSTEP_FLOOR tiled_dirt = TRUE /turf/open/indestructible/Melt() @@ -32,6 +35,7 @@ /turf/open/indestructible/sound name = "squeaky floor" + footstep = null var/sound /turf/open/indestructible/sound/Entered(var/mob/AM) @@ -46,6 +50,7 @@ icon_state = "necro1" baseturfs = /turf/open/indestructible/necropolis initial_gas_mix = LAVALAND_DEFAULT_ATMOS + footstep = FOOTSTEP_LAVA tiled_dirt = FALSE /turf/open/indestructible/necropolis/Initialize() @@ -82,6 +87,7 @@ name = "notebook floor" desc = "A floor made of invulnerable notebook paper." icon_state = "paperfloor" + footstep = null tiled_dirt = FALSE /turf/open/indestructible/binary @@ -89,6 +95,7 @@ CanAtmosPass = ATMOS_PASS_NO baseturfs = /turf/open/indestructible/binary icon_state = "binary" + footstep = null /turf/open/indestructible/airblock icon_state = "bluespace" @@ -100,6 +107,7 @@ desc = "Brass plating that gently radiates heat. For some reason, it reminds you of blood." icon_state = "reebe" baseturfs = /turf/open/indestructible/clock_spawn_room + footstep = FOOTSTEP_PLATING /turf/open/indestructible/clock_spawn_room/Entered() ..() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 582afb78006..777cbedd26a 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -6,6 +6,8 @@ icon = 'icons/turf/floors.dmi' baseturfs = /turf/open/floor/plating + footstep = FOOTSTEP_FLOOR + var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default var/icon_plating = "plating" thermal_conductivity = 0.040 diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 5dc12acb890..3d574d48b47 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -12,6 +12,7 @@ icon_state = "wood" floor_tile = /obj/item/stack/tile/wood broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7") + footstep = FOOTSTEP_WOOD tiled_dirt = FALSE /turf/open/floor/wood/examine(mob/user) @@ -69,6 +70,7 @@ broken_states = list("sand") flags_1 = NONE bullet_bounce_sound = null + footstep = FOOTSTEP_GRASS var/ore_type = /obj/item/stack/ore/glass var/turfverb = "uproot" tiled_dirt = FALSE @@ -98,6 +100,7 @@ initial_gas_mix = "o2=22;n2=82;TEMP=180" slowdown = 2 bullet_sizzle = TRUE + footstep = FOOTSTEP_SAND /turf/open/floor/grass/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return @@ -130,6 +133,7 @@ ore_type = /obj/item/stack/ore/glass/basalt turfverb = "dig up" slowdown = 0 + footstep = FOOTSTEP_SAND /turf/open/floor/grass/fakebasalt/Initialize() . = ..() @@ -149,6 +153,7 @@ canSmoothWith = list(/turf/open/floor/carpet) flags_1 = NONE bullet_bounce_sound = null + footstep = FOOTSTEP_CARPET tiled_dirt = FALSE /turf/open/floor/carpet/examine(mob/user) diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 6916b61e0c8..f7bebce4685 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -144,6 +144,7 @@ desc = "Tightly-pressed brass tiles. They emit minute vibration." icon_state = "plating" baseturfs = /turf/open/floor/clockwork + footstep = FOOTSTEP_PLATING var/uses_overlay = TRUE var/obj/effect/clockwork/overlay/floor/realappearence diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index eeed31bd9ff..9d2adbdfba2 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -12,6 +12,8 @@ icon_state = "plating" intact = FALSE baseturfs = /turf/open/space + footstep = FOOTSTEP_PLATING + var/attachment_holes = TRUE /turf/open/floor/plating/examine(mob/user) diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index a57213a4f97..b8da9350a48 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -9,6 +9,7 @@ icon_state = "asteroid" icon_plating = "asteroid" postdig_icon_change = TRUE + footstep = FOOTSTEP_SAND var/environment_type = "asteroid" var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal var/floor_variance = 20 //probability floor has a different icon state @@ -298,6 +299,7 @@ icon_state = "snow-ice" icon_plating = "snow-ice" environment_type = "snow_cavern" + footstep = FOOTSTEP_FLOOR /turf/open/floor/plating/asteroid/snow/ice/burn_tile() return FALSE diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm index 25778a52248..dc865634f4b 100644 --- a/code/game/turfs/simulated/floor/plating/dirt.dm +++ b/code/game/turfs/simulated/floor/plating/dirt.dm @@ -8,6 +8,7 @@ initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE attachment_holes = FALSE + footstep = FOOTSTEP_SAND tiled_dirt = FALSE /turf/open/floor/plating/dirt/dark diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm index ebfba4f54c5..f86ab3c03c5 100644 --- a/code/game/turfs/simulated/floor/plating/misc_plating.dm +++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm @@ -46,6 +46,7 @@ initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE attachment_holes = FALSE + footstep = FOOTSTEP_SAND tiled_dirt = FALSE /turf/open/floor/plating/ashplanet/Initialize() @@ -77,6 +78,7 @@ smooth_icon = 'icons/turf/floors/rocky_ash.dmi' layer = MID_TURF_LAYER canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed) + footstep = FOOTSTEP_FLOOR /turf/open/floor/plating/ashplanet/wateryrock gender = PLURAL @@ -84,6 +86,7 @@ smooth = null icon_state = "wateryrock" slowdown = 2 + footstep = FOOTSTEP_FLOOR /turf/open/floor/plating/ashplanet/wateryrock/Initialize() icon_state = "[icon_state][rand(1, 9)]" @@ -96,6 +99,7 @@ flags_1 = NONE attachment_holes = FALSE bullet_bounce_sound = null + footstep = FOOTSTEP_SAND /turf/open/floor/plating/beach/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return @@ -136,6 +140,7 @@ gender = PLURAL name = "iron sand" desc = "Like sand, but more metal." + footstep = FOOTSTEP_SAND /turf/open/floor/plating/ironsand/Initialize() . = ..() @@ -159,6 +164,7 @@ slowdown = 1 attachment_holes = FALSE bullet_sizzle = TRUE + footstep = FOOTSTEP_FLOOR /turf/open/floor/plating/ice/Initialize() . = ..() @@ -195,6 +201,7 @@ temperature = 180 attachment_holes = FALSE planetary_atmos = TRUE + footstep = FOOTSTEP_SAND /turf/open/floor/plating/snowed/cavern initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120" diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index 34cea3d1b71..e677de8c5c8 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -6,6 +6,7 @@ thermal_conductivity = 0.025 heat_capacity = INFINITY floor_tile = /obj/item/stack/rods + footstep = FOOTSTEP_PLATING tiled_dirt = FALSE /turf/open/floor/engine/examine(mob/user) diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index b6f862cab57..b9e355b1229 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -12,6 +12,8 @@ light_color = LIGHT_COLOR_LAVA bullet_bounce_sound = 'sound/items/welder2.ogg' + footstep = FOOTSTEP_LAVA + /turf/open/lava/ex_act(severity, target) contents_explosion(severity, target) diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index 777a9b15fbb..b46dd1d06c9 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -11,3 +11,4 @@ bullet_sizzle = TRUE bullet_bounce_sound = null //needs a splashing sound one day. + footstep = FOOTSTEP_WATER diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 0420f86ab3f..8a426b9115f 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -412,6 +412,12 @@ output += "IP: " output += "Computer id: " output += "Duration: " + output += "Severity:" output += "" for(var/j in get_all_jobs()) diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index fefcf003fe6..7905a8d155e 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -123,9 +123,9 @@ GLOBAL_PROTECT(Banlist) if (temp) WRITE_FILE(GLOB.Banlist["minutes"], bantimestamp) if(!temp) - create_message("note", key, bannedby, "Permanently banned - [reason]", null, null, 0, 0, null, 0) + create_message("note", key, bannedby, "Permanently banned - [reason]", null, null, 0, 0, null, 0, 0) else - create_message("note", key, bannedby, "Banned for [minutes] minutes - [reason]", null, null, 0, 0, null, 0) + create_message("note", key, bannedby, "Banned for [minutes] minutes - [reason]", null, null, 0, 0, null, 0, 0) return 1 /proc/RemoveBan(foldername) diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 1332118a7ad..45a643dcacd 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -1,4 +1,4 @@ -/proc/create_message(type, target_key, admin_ckey, text, timestamp, server, secret, logged = 1, browse, expiry) +/proc/create_message(type, target_key, admin_ckey, text, timestamp, server, secret, logged = 1, browse, expiry, note_severity) if(!SSdbcore.Connect()) to_chat(usr, "Failed to establish database connection.") return @@ -72,7 +72,12 @@ return expiry = query_validate_expire_time.item[1] qdel(query_validate_expire_time) - var/datum/DBQuery/query_create_message = SSdbcore.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, server_ip, server_port, round_id, secret, expire_timestamp) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]','[secret]', [expiry ? "'[expiry]'" : "NULL"])") + if(type == "note" && isnull(note_severity)) + note_severity = input("Set the severity of the note.", "Severity", null, null) as null|anything in list("High", "Medium", "Minor", "None") + if(!note_severity) + return + note_severity = sanitizeSQL(note_severity) + var/datum/DBQuery/query_create_message = SSdbcore.NewQuery("INSERT INTO [format_table_name("messages")] (type, targetckey, adminckey, text, timestamp, server, server_ip, server_port, round_id, secret, expire_timestamp, severity) VALUES ('[type]', '[target_ckey]', '[admin_ckey]', '[text]', '[timestamp]', '[server]', INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]', '[GLOB.round_id]','[secret]', [expiry ? "'[expiry]'" : "NULL"], [note_severity ? "'[note_severity]'" : "NULL"])") var/pm = "[key_name(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""]: [text]" var/header = "[key_name_admin(usr)] has created a [type][(type == "note" || type == "message" || type == "watchlist entry") ? " for [target_key]" : ""]" if(!query_create_message.warn_execute()) @@ -222,6 +227,45 @@ browse_messages(target_ckey = ckey(target_key), agegate = TRUE) qdel(query_find_edit_expiry_message) +/proc/edit_message_severity(message_id) + if(!SSdbcore.Connect()) + to_chat(usr, "Failed to establish database connection.") + return + message_id = text2num(message_id) + if(!message_id) + return + var/kn = key_name(usr) + var/kna = key_name_admin(usr) + var/datum/DBQuery/query_find_edit_note_severity = SSdbcore.NewQuery("SELECT type, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), targetckey), IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), adminckey), severity FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") + if(!query_find_edit_note_severity.warn_execute()) + qdel(query_find_edit_note_severity) + return + if(query_find_edit_note_severity.NextRow()) + var/type = query_find_edit_note_severity.item[1] + var/target_key = query_find_edit_note_severity.item[2] + var/admin_key = query_find_edit_note_severity.item[3] + var/old_severity = query_find_edit_note_severity.item[4] + if(!old_severity) + old_severity = "NA" + var/editor_key = sanitizeSQL(usr.key) + var/editor_ckey = sanitizeSQL(usr.ckey) + var/new_severity = input("Set the severity of the note.", "Severity", null, null) as null|anything in list("high", "medium", "minor", "none") //lowercase for edit log consistency + if(!new_severity) + qdel(query_find_edit_note_severity) + return + new_severity = sanitizeSQL(new_severity) + var/edit_text = sanitizeSQL("Note severity edited by [editor_key] on [SQLtime()] from [old_severity] to [new_severity]
") + var/datum/DBQuery/query_edit_note_severity = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET severity = '[new_severity]', lasteditor = '[editor_ckey]', edits = CONCAT(IFNULL(edits,''),'[edit_text]') WHERE id = [message_id] AND deleted = 0") + if(!query_edit_note_severity.warn_execute(async = TRUE)) + qdel(query_edit_note_severity) + qdel(qdel(query_find_edit_note_severity)) + return + qdel(query_edit_note_severity) + log_admin_private("[kn] has edited the severity of a [type] for [target_key] made by [admin_key] from [old_severity] to [new_severity]") + message_admins("[kna] has edited the severity time of a [type] for [target_key] made by [admin_key] from [old_severity] to [new_severity]") + browse_messages(target_ckey = ckey(target_key), agegate = TRUE) + qdel(query_find_edit_note_severity) + /proc/toggle_message_secrecy(message_id) if(!SSdbcore.Connect()) to_chat(usr, "Failed to establish database connection.") @@ -260,10 +304,10 @@ return var/list/output = list() var/ruler = "
" - var/list/navbar = list("\[All\]|\[#\]") + var/list/navbar = list("All#") for(var/letter in GLOB.alphabet) - navbar += "|\[[letter]\]" - navbar += "|\[Memos\]|\[Watchlist\]" + navbar += "[letter]" + navbar += "MemosWatchlist" navbar += "
\ \ [HrefTokenFormField()]\ @@ -274,14 +318,14 @@ if(type == "memo" || type == "watchlist entry") if(type == "memo") output += "

Admin memos

" - output += "\[Add memo\]" + output += "Add memo" else if(type == "watchlist entry") output += "

Watchlist entries

" - output += "\[Add watchlist entry\]" + output += "Add watchlist entry" if(filter) - output += "|\[Unfilter clients\]" + output += "Unfilter clients" else - output += "|\[Filter offline clients\]" + output += "Filter offline clients" output += ruler var/datum/DBQuery/query_get_type_messages = SSdbcore.NewQuery("SELECT id, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), targetckey), targetckey, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), adminckey), text, timestamp, server, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor), lasteditor), expire_timestamp FROM [format_table_name("messages")] WHERE type = '[type]' AND deleted = 0 AND (expire_timestamp > NOW() OR expire_timestamp IS NULL)") if(!query_get_type_messages.warn_execute()) @@ -308,9 +352,9 @@ if(expire_timestamp) output += " | Expires [expire_timestamp]" output += "" - output += " \[Change Expiry Time\]" - output += " \[Delete\]" - output += " \[Edit\]" + output += " Change Expiry Time" + output += " Delete" + output += " Edit" if(editor_key) output += " Last edit by [editor_key] (Click here to see edit log)" output += "
[text]
" @@ -318,7 +362,7 @@ if(target_ckey) target_ckey = sanitizeSQL(target_ckey) var/target_key - var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), adminckey), text, timestamp, server, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor), lasteditor), DATEDIFF(NOW(), timestamp), IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), targetckey), expire_timestamp FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 AND (expire_timestamp > NOW() OR expire_timestamp IS NULL) ORDER BY timestamp DESC") + var/datum/DBQuery/query_get_messages = SSdbcore.NewQuery("SELECT type, secret, id, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = adminckey), adminckey), text, timestamp, server, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = lasteditor), lasteditor), DATEDIFF(NOW(), timestamp), IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), targetckey), expire_timestamp, severity FROM [format_table_name("messages")] WHERE type <> 'memo' AND targetckey = '[target_ckey]' AND deleted = 0 AND (expire_timestamp > NOW() OR expire_timestamp IS NULL) ORDER BY timestamp DESC") if(!query_get_messages.warn_execute()) qdel(query_get_messages) return @@ -344,6 +388,7 @@ var/age = text2num(query_get_messages.item[9]) target_key = query_get_messages.item[10] var/expire_timestamp = query_get_messages.item[11] + var/severity = query_get_messages.item[12] var/alphatext = "" var/nsd = CONFIG_GET(number/note_stale_days) var/nfd = CONFIG_GET(number/note_fresh_days) @@ -357,25 +402,33 @@ alpha = 10 skipped = TRUE alphatext = "filter: alpha(opacity=[alpha]); opacity: [alpha/100];" - - var/list/data = list("

[timestamp] | [server] | [admin_key]") + var/list/data = list("

") + if(severity) + data += " " + data += "[timestamp] | [server] | [admin_key][secret ? " | - Secret" : ""]" if(expire_timestamp) data += " | Expires [expire_timestamp]" - data += "" + data += "

" if(!linkless) - data += " \[Change Expiry Time\]" - data += " \[Delete\]" if(type == "note") - data += " [secret ? "\[Secret\]" : "\[Not secret\]"]" + if(severity) + data += "[severity=="none" ? "No" : "[capitalize(severity)]"] Severity" + else + data += "N/A Severity" + data += " Change Expiry Time" + data += " Delete" + if(type == "note") + data += " [secret ? "Secret" : "Not secret"]" if(type == "message sent") data += " Message has been sent" if(editor_key) data += "|" else - data += " \[Edit\]" + data += " Edit" if(editor_key) data += " Last edit by [editor_key] (Click here to see edit log)" - data += "
[text]


" + data += "
" + data += "

[text]


" switch(type) if("message") messagedata += data @@ -396,34 +449,33 @@ qdel(query_get_message_key) output += "

[target_key]

" if(!linkless) - output += "\[Add note\]" - output += " \[Add message\]" - output += " \[Add to watchlist\]" - output += " \[Refresh page\]
" + output += "Add note" + output += " Add message" + output += " Add to watchlist" + output += " Refresh page" else - output += " \[Refresh page\]" + output += " Refresh page" output += ruler if(messagedata) - output += "

Messages

" + output += "

Messages

" output += messagedata if(watchdata) - output += "

Watchlist

" + output += "

Watchlist

" output += watchdata if(notedata) - output += "

Notes

" + output += "

Notes

" output += notedata if(!linkless) if (agegate) if (skipped) //the first skipped message is still shown so that we can put this link over it. - output += "
\[Show [skipped] hidden messages\]
" + output += "
Show [skipped] hidden messages
" else - output += "
\[Show All\]
" - + output += "
Show All
" else - output += "
\[Hide Old\]
" + output += "
Hide Old
" if(index) var/search - output += "
\[Add message\]\[Add watchlist entry\]\[Add note\]
" + output += "
Add messageAdd watchlist entryAdd note
" output += ruler if(!isnum(index)) index = sanitizeSQL(index) @@ -448,9 +500,13 @@ output += "[index_key]
" qdel(query_list_messages) else if(!type && !target_ckey && !index) - output += "
\[Add message\]\[Add watchlist entry\]\[Add note\]
" + output += "
Add messageAdd watchlist entryAdd note
" output += ruler - usr << browse({"[jointext(output, "")]"}, "window=browse_messages;size=900x500") + var/datum/browser/browser = new(usr, "Note panel", "Manage player notes", 1000, 500) + var/datum/asset/notes_assets = get_asset_datum(/datum/asset/simple/notes) + notes_assets.send(src) + browser.set_content(jointext(output, "")) + browser.open() /proc/get_message_output(type, target_ckey) if(!SSdbcore.Connect()) @@ -523,7 +579,7 @@ timestamp = query_convert_time.item[1] qdel(query_convert_time) if(ckey && notetext && timestamp && admin_ckey && server) - create_message("note", ckey, admin_ckey, notetext, timestamp, server, 1, 0, null, 0) + create_message("note", ckey, admin_ckey, notetext, timestamp, server, 1, 0, null, 0, 0) notesfile.cd = "/" notesfile.dir.Remove(ckey) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 5b295f384dd..43d9c06388f 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -213,37 +213,38 @@ var/banduration = text2num(href_list["dbbaddduration"]) var/banjob = href_list["dbbanaddjob"] var/banreason = href_list["dbbanreason"] + var/banseverity = href_list["dbbanaddseverity"] switch(bantype) if(BANTYPE_PERMA) - if(!banckey || !banreason) - to_chat(usr, "Not enough parameters (Requires ckey and reason).") + if(!banckey || !banreason || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity, and reason).") return banduration = null banjob = null if(BANTYPE_TEMP) - if(!banckey || !banreason || !banduration) - to_chat(usr, "Not enough parameters (Requires ckey, reason and duration).") + if(!banckey || !banreason || !banduration || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, reason, severity and duration).") return banjob = null if(BANTYPE_JOB_PERMA) - if(!banckey || !banreason || !banjob) - to_chat(usr, "Not enough parameters (Requires ckey, reason and job).") + if(!banckey || !banreason || !banjob || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity, reason and job).") return banduration = null if(BANTYPE_JOB_TEMP) - if(!banckey || !banreason || !banjob || !banduration) - to_chat(usr, "Not enough parameters (Requires ckey, reason and job).") + if(!banckey || !banreason || !banjob || !banduration || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity, reason and job).") return if(BANTYPE_ADMIN_PERMA) - if(!banckey || !banreason) - to_chat(usr, "Not enough parameters (Requires ckey and reason).") + if(!banckey || !banreason || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity and reason).") return banduration = null banjob = null if(BANTYPE_ADMIN_TEMP) - if(!banckey || !banreason || !banduration) - to_chat(usr, "Not enough parameters (Requires ckey, reason and duration).") + if(!banckey || !banreason || !banduration || !banseverity) + to_chat(usr, "Not enough parameters (Requires ckey, severity, reason and duration).") return banjob = null @@ -268,7 +269,7 @@ if(!DB_ban_record(bantype, playermob, banduration, banreason, banjob, bankey, banip, bancid )) to_chat(usr, "Failed to apply ban.") return - create_message("note", bankey, null, banreason, null, null, 0, 0, null, 0) + create_message("note", bankey, null, banreason, null, null, 0, 0, null, 0, banseverity) else if(href_list["editrightsbrowser"]) edit_admin_permissions(0) @@ -597,6 +598,9 @@ var/reason = input(usr,"Please State Reason.","Reason") as message|null if(!reason) return + var/severity = input("Set the severity of the note/ban.", "Severity", null, null) as null|anything in list("High", "Medium", "Minor", "None") + if(!severity) + return if(!DB_ban_record(BANTYPE_JOB_PERMA, M, -1, reason, "appearance")) to_chat(usr, "Failed to apply ban.") return @@ -604,7 +608,7 @@ jobban_buildcache(M.client) ban_unban_log_save("[key_name(usr)] appearance banned [key_name(M)]. reason: [reason]") log_admin_private("[key_name(usr)] appearance banned [key_name(M)]. \nReason: [reason]") - create_message("note", M.key, null, "Appearance banned - [reason]", null, null, 0, 0, null, 0) + create_message("note", M.key, null, "Appearance banned - [reason]", null, null, 0, 0, null, 0, severity) message_admins("[key_name_admin(usr)] appearance banned [key_name_admin(M)].") to_chat(M, "You have been appearance banned by [usr.client.key].") to_chat(M, "The reason is: [reason]") @@ -967,6 +971,7 @@ //Banning comes first if(notbannedlist.len) //at least 1 unbanned job exists in joblist so we have stuff to ban. + var/severity = null switch(alert("Temporary Ban for [M.key]?",,"Yes","No", "Cancel")) if("Yes") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null @@ -976,7 +981,9 @@ var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null if(!reason) return - + severity = input("Set the severity of the note/ban.", "Severity", null, null) as null|anything in list("High", "Medium", "Minor", "None") + if(!severity) + return var/msg for(var/job in notbannedlist) if(!DB_ban_record(BANTYPE_JOB_TEMP, M, mins, reason, job)) @@ -990,7 +997,7 @@ msg = job else msg += ", [job]" - create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0) + create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0, severity) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg] for [mins] minutes.") to_chat(M, "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg].") to_chat(M, "The reason is: [reason]") @@ -999,6 +1006,9 @@ return 1 if("No") var/reason = input(usr,"Please State Reason For Banning [M.key].","Reason") as message|null + severity = input("Set the severity of the note/ban.", "Severity", null, null) as null|anything in list("High", "Medium", "Minor", "None") + if(!severity) + return if(reason) var/msg for(var/job in notbannedlist) @@ -1013,7 +1023,7 @@ msg = job else msg += ", [job]" - create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0) + create_message("note", M.key, null, "Banned from [msg] - [reason]", null, null, 0, 0, null, 0, severity) message_admins("[key_name_admin(usr)] banned [key_name_admin(M)] from [msg].") to_chat(M, "You have been [(msg == ("ooc" || "appearance")) ? "banned" : "jobbanned"] by [usr.client.key] from: [msg].") to_chat(M, "The reason is: [reason]") @@ -1150,6 +1160,12 @@ var/message_id = href_list["editmessageexpiryempty"] edit_message_expiry(message_id, browse = 1) + else if(href_list["editmessageseverity"]) + if(!check_rights(R_ADMIN)) + return + var/message_id = href_list["editmessageseverity"] + edit_message_severity(message_id) + else if(href_list["secretmessage"]) if(!check_rights(R_ADMIN)) return @@ -1214,7 +1230,9 @@ if(query_get_message_edits.NextRow()) var/edit_log = query_get_message_edits.item[1] if(!QDELETED(usr)) - usr << browse(edit_log,"window=noteedits") + var/datum/browser/browser = new(usr, "Note edits", "Note edits") + browser.set_content(jointext(edit_log, "")) + browser.open() qdel(query_get_message_edits) else if(href_list["newban"]) diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 92c07b1fcc9..7adb1282396 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -9,7 +9,7 @@ if(!msg) return - mob.log_talk(msg, LOG_ADMIN_PRIVATE) + mob.log_talk(msg, LOG_ASAY) msg = keywords_lookup(msg) msg = "ADMIN: [key_name(usr, 1)] [ADMIN_FLW(mob)]: [msg]" diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index ec921e78bc6..6295d4be43e 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -21,18 +21,17 @@ var/mob/living/silicon/robot/borg var/user -/datum/borgpanel/New(user, mob/living/silicon/robot/borg) - if(!istype(borg)) +/datum/borgpanel/New(to_user, mob/living/silicon/robot/to_borg) + if(!istype(to_borg)) CRASH("Borg panel is only available for borgs") qdel(src) - if (istype(user, /mob)) - var/mob/M = user - if (!M.client) - CRASH("Borg panel attempted to open to a mob without a client") - src.user = M.client - else - src.user = user - src.borg = borg + + user = CLIENT_FROM_VAR(to_user) + + if (!user) + CRASH("Borg panel attempted to open to a mob without a client") + + borg = to_borg /datum/borgpanel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 0a99615e11c..ca60ef5c083 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -87,7 +87,7 @@ if(isturf(target_loc) || (ismob(target_loc) && isturf(target_loc.loc))) return viewers(range, get_turf(target_loc)) else - return typecache_filter_list(target_loc.GetAllContents(), typecacheof(list(/mob/living))) + return typecache_filter_list(target_loc.GetAllContents(), GLOB.typecache_living) /obj/item/assembly/flash/proc/try_use_flash(mob/user = null) if(crit_fail || (world.time < last_trigger + cooldown)) diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index bb44da2091f..3e6bf0315b4 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -158,22 +158,11 @@ var/list/dead_barricades = list() - var/static/ctf_object_typecache var/static/arena_reset = FALSE var/static/list/people_who_want_to_play = list() /obj/machinery/capture_the_flag/Initialize() . = ..() - if(!ctf_object_typecache) - ctf_object_typecache = typecacheof(list( - /turf, - /mob, - /area, - /obj/machinery, - /obj/structure, - /obj/effect/ctf, - /obj/item/twohanded/ctf - )) GLOB.poi_list |= src /obj/machinery/capture_the_flag/Destroy() @@ -342,12 +331,20 @@ /obj/machinery/capture_the_flag/proc/reset_the_arena() var/area/A = get_area(src) + var/list/ctf_object_typecache = typecacheof(list( + /obj/machinery, + /obj/effect/ctf, + /obj/item/twohanded/ctf + )) for(var/atm in A) - if(!is_type_in_typecache(atm, ctf_object_typecache)) - qdel(atm) + if (isturf(A) || ismob(A) || isarea(A)) + continue if(isstructure(atm)) var/obj/structure/S = atm S.obj_integrity = S.max_integrity + else if(!is_type_in_typecache(atm, ctf_object_typecache)) + qdel(atm) + /obj/machinery/capture_the_flag/proc/stop_ctf() ctf_enabled = FALSE diff --git a/code/modules/cargo/bounties/botany.dm b/code/modules/cargo/bounties/botany.dm index b4e188b732e..34906b321af 100644 --- a/code/modules/cargo/bounties/botany.dm +++ b/code/modules/cargo/bounties/botany.dm @@ -172,7 +172,7 @@ /datum/bounty/item/botany/nettles_death name = "Death Nettles" - wanted_types = list(/obj/item/grown/nettle/death) + wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/nettle/death) multiplier = 2 bonus_desc = "Wear protection when handling them." foodtype = "cheese" diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 88d08260e20..7c08a3332ce 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -551,6 +551,14 @@ GLOBAL_LIST_EMPTY(asset_datums) "padlock.png" = 'html/padlock.png' ) +/datum/asset/simple/notes + assets = list( + "high_button.png" = 'html/high_button.png', + "medium_button.png" = 'html/medium_button.png', + "minor_button.png" = 'html/minor_button.png', + "none_button.png" = 'html/none_button.png', + ) + //this exists purely to avoid meta by pre-loading all language icons. /datum/asset/language/register() for(var/path in typesof(/datum/language)) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index e5468b5e1c2..b5b7719220c 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -682,7 +682,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) qdel(query_get_notes) return qdel(query_get_notes) - create_message("note", key, system_ckey, message, null, null, 0, 0, null, 0) + create_message("note", key, system_ckey, message, null, null, 0, 0, null, 0, 0) /client/proc/check_ip_intel() diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm index 3dc80e0dede..b6348948050 100644 --- a/code/modules/clothing/shoes/bananashoes.dm +++ b/code/modules/clothing/shoes/bananashoes.dm @@ -10,7 +10,7 @@ /obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize() . = ..() - AddComponent(/datum/component/material_container, list(MAT_BANANIUM), 200000, TRUE, list(/obj/item/stack)) + AddComponent(/datum/component/material_container, list(MAT_BANANIUM), 200000, TRUE, /obj/item/stack) AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75) if(always_noslip) clothing_flags |= NOSLIP diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 2899a190c3c..b8ae56d6150 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -795,7 +795,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( if("alarm") target.playsound_local(source, 'sound/machines/alarm.ogg', 100, 0) if("beepsky") - target.playsound_local(source, 'sound/voice/bfreeze.ogg', 35, 0) + target.playsound_local(source, 'sound/voice/beepsky/freeze.ogg', 35, 0) if("mech") var/mech_dir = pick(GLOB.cardinals) for(var/i in 1 to rand(4,9)) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index de3a4e730cd..f2b195c32d5 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -1,3 +1,33 @@ +/** # Snacks + +Items in the "Snacks" subcategory are food items that people actually eat. The key points are that they are created +already filled with reagents and are destroyed when empty. Additionally, they make a "munching" noise when eaten. + +Notes by Darem: Food in the "snacks" subtype can hold a maximum of 50 units. Generally speaking, you don't want to go over 40 +total for the item because you want to leave space for extra condiments. If you want effect besides healing, add a reagent for +it. Try to stick to existing reagents when possible (so if you want a stronger healing effect, just use omnizine). On use +effect (such as the old officer eating a donut code) requires a unique reagent (unless you can figure out a better way). + +The nutriment reagent and bitesize variable replace the old heal_amt and amount variables. Each unit of nutriment is equal to +2 of the old heal_amt variable. Bitesize is the rate at which the reagents are consumed. So if you have 6 nutriment and a +bitesize of 2, then it'll take 3 bites to eat. Unlike the old system, the contained reagents are evenly spread among all +the bites. No more contained reagents = no more bites. + +Here is an example of the new formatting for anyone who wants to add more food items. +``` +/obj/item/reagent_containers/food/snacks/xenoburger //Identification path for the object. + name = "Xenoburger" //Name that displays in the UI. + desc = "Smells caustic. Tastes like heresy." //Duh + icon_state = "xburger" //Refers to an icon in food.dmi +/obj/item/reagent_containers/food/snacks/xenoburger/Initialize() //Don't mess with this. | nO I WILL MESS WITH THIS + . = ..() //Same here. + reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste + reagents.add_reagent("nutriment", 2) //this line of code for all the contents. + bitesize = 3 //This is the amount each bite consumes. +``` + +All foods are distributed among various categories. Use common sense. +*/ /obj/item/reagent_containers/food/snacks name = "snack" desc = "Yummy." @@ -294,40 +324,8 @@ M.emote("me", 1, "[sattisfaction_text]") qdel(src) - -////////////////////////////////////////////////// -////////////////////////////////////////////Snacks -////////////////////////////////////////////////// -//Items in the "Snacks" subcategory are food items that people actually eat. The key points are that they are created -// already filled with reagents and are destroyed when empty. Additionally, they make a "munching" noise when eaten. - -//Notes by Darem: Food in the "snacks" subtype can hold a maximum of 50 units Generally speaking, you don't want to go over 40 -// total for the item because you want to leave space for extra condiments. If you want effect besides healing, add a reagent for -// it. Try to stick to existing reagents when possible (so if you want a stronger healing effect, just use omnizine). On use -// effect (such as the old officer eating a donut code) requires a unique reagent (unless you can figure out a better way). - -//The nutriment reagent and bitesize variable replace the old heal_amt and amount variables. Each unit of nutriment is equal to -// 2 of the old heal_amt variable. Bitesize is the rate at which the reagents are consumed. So if you have 6 nutriment and a -// bitesize of 2, then it'll take 3 bites to eat. Unlike the old system, the contained reagents are evenly spread among all -// the bites. No more contained reagents = no more bites. - -//Here is an example of the new formatting for anyone who wants to add more food items. -///obj/item/reagent_containers/food/snacks/xenoburger //Identification path for the object. -// name = "Xenoburger" //Name that displays in the UI. -// desc = "Smells caustic. Tastes like heresy." //Duh -// icon_state = "xburger" //Refers to an icon in food.dmi -///obj/item/reagent_containers/food/snacks/xenoburger/Initialize() //Don't mess with this. | nO I WILL MESS WITH THIS -// . = ..() //Same here. -// reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste -// reagents.add_reagent("nutriment", 2) //this line of code for all the contents. -// bitesize = 3 //This is the amount each bite consumes. - -//All foods are distributed among various categories. Use common sense. - -/////////////////////////////////////////////////Store//////////////////////////////////////// -// All the food items that can store an item inside itself, like bread or cake. - - +// //////////////////////////////////////////////Store//////////////////////////////////////// +/// All the food items that can store an item inside itself, like bread or cake. /obj/item/reagent_containers/food/snacks/store w_class = WEIGHT_CLASS_NORMAL var/stored_item = 0 diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm index 267f5f84278..76a5a640967 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm @@ -33,7 +33,7 @@ reqs = list( /datum/reagent/water = 10, /obj/item/reagent_containers/glass/bowl = 1, - /obj/item/grown/nettle = 1, + /obj/item/reagent_containers/food/snacks/grown/nettle = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/reagent_containers/food/snacks/boiledegg = 1 ) diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 55d5a806bd1..ba50a8396ea 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -175,29 +175,23 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic log_world("\[[time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")]\] Client: [(src.owner.key ? src.owner.key : src.owner)] triggered JS error: [error]") //Global chat procs - /proc/to_chat(target, message, handle_whitespace=TRUE) if(!target) return //Ok so I did my best but I accept that some calls to this will be for shit like sound and images //It stands that we PROBABLY don't want to output those to the browser output so just handle them here - if (istype(message, /image) || istype(message, /sound) || istype(target, /savefile)) + if (istype(target, /savefile)) CRASH("Invalid message! [message]") if(!istext(message)) + if (istype(message, /image) || istype(message, /sound)) + CRASH("Invalid message! [message]") return if(target == world) target = GLOB.clients - var/list/targets - if(!islist(target)) - targets = list(target) - else - targets = target - if(!targets.len) - return var/original_message = message //Some macros remain in the string even after parsing and fuck up the eventual output message = replacetext(message, "\improper", "") @@ -206,34 +200,43 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic message = replacetext(message, "\n", "
") message = replacetext(message, "\t", "[GLOB.TAB][GLOB.TAB]") - for(var/I in targets) - //Grab us a client if possible - var/client/C - if (ismob(I)) - var/mob/M = I - if(M.client) - C = M.client - else if(istype(I, /client)) - C = I - else if(istype(I, /datum/mind)) - var/datum/mind/M = I - if(M.current && M.current.client) - C = M.current.client - + if(islist(target)) + // Do the double-encoding outside the loop to save nanoseconds + var/twiceEncoded = url_encode(url_encode(message)) + for(var/I in target) + var/client/C = CLIENT_FROM_VAR(I) //Grab us a client if possible + + if (!C) + continue + + //Send it to the old style output window. + SEND_TEXT(C, original_message) + + if(!C.chatOutput || C.chatOutput.broken) // A player who hasn't updated his skin file. + continue + + if(!C.chatOutput.loaded) + //Client still loading, put their messages in a queue + C.chatOutput.messageQueue += message + continue + + C << output(twiceEncoded, "browseroutput:output") + else + var/client/C = CLIENT_FROM_VAR(target) //Grab us a client if possible if (!C) - continue + return //Send it to the old style output window. SEND_TEXT(C, original_message) if(!C.chatOutput || C.chatOutput.broken) // A player who hasn't updated his skin file. - continue + return if(!C.chatOutput.loaded) //Client still loading, put their messages in a queue C.chatOutput.messageQueue += message - continue + return // url_encode it TWICE, this way any UTF-8 characters are able to be decoded by the Javascript. C << output(url_encode(url_encode(message)), "browseroutput:output") diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index cf238024f2a..e3f8c254ac1 100644 --- a/code/modules/hydroponics/grown/nettle.dm +++ b/code/modules/hydroponics/grown/nettle.dm @@ -4,7 +4,7 @@ icon_state = "seed-nettle" species = "nettle" plantname = "Nettles" - product = /obj/item/grown/nettle/basic + product = /obj/item/reagent_containers/food/snacks/grown/nettle lifespan = 30 endurance = 40 // tuff like a toiger yield = 4 @@ -19,7 +19,7 @@ icon_state = "seed-deathnettle" species = "deathnettle" plantname = "Death Nettles" - product = /obj/item/grown/nettle/death + product = /obj/item/reagent_containers/food/snacks/grown/nettle/death endurance = 25 maturation = 8 yield = 2 @@ -28,7 +28,8 @@ reagents_add = list("facid" = 0.5, "sacid" = 0.5) rarity = 20 -/obj/item/grown/nettle //abstract type +/obj/item/reagent_containers/food/snacks/grown/nettle // "snack" + seed = /obj/item/seeds/nettle name = "nettle" desc = "It's probably not wise to touch it with bare hands..." icon = 'icons/obj/items_and_weapons.dmi' @@ -43,13 +44,12 @@ throw_speed = 1 throw_range = 3 attack_verb = list("stung") - grind_results = list("sacid" = 0) -/obj/item/grown/nettle/suicide_act(mob/user) +/obj/item/reagent_containers/food/snacks/grown/nettle/suicide_act(mob/user) user.visible_message("[user] is eating some of [src]! It looks like [user.p_theyre()] trying to commit suicide!") return (BRUTELOSS|TOXLOSS) -/obj/item/grown/nettle/pickup(mob/living/user) +/obj/item/reagent_containers/food/snacks/grown/nettle/pickup(mob/living/user) ..() if(!iscarbon(user)) return FALSE @@ -66,7 +66,7 @@ to_chat(C, "The nettle burns your bare hand!") return TRUE -/obj/item/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity) +/obj/item/reagent_containers/food/snacks/grown/nettle/afterattack(atom/A as mob|obj, mob/user,proximity) . = ..() if(!proximity) return @@ -76,33 +76,32 @@ to_chat(usr, "All the leaves have fallen off the nettle from violent whacking.") qdel(src) -/obj/item/grown/nettle/basic +/obj/item/reagent_containers/food/snacks/grown/nettle/basic seed = /obj/item/seeds/nettle -/obj/item/grown/nettle/basic/add_juice() +/obj/item/reagent_containers/food/snacks/grown/nettle/basic/add_juice() ..() force = round((5 + seed.potency / 5), 1) -/obj/item/grown/nettle/death +/obj/item/reagent_containers/food/snacks/grown/nettle/death seed = /obj/item/seeds/nettle/death name = "deathnettle" desc = "The glowing nettle incites rage in you just from looking at it!" icon_state = "deathnettle" force = 30 throwforce = 15 - grind_results = list("facid" = 1, "sacid" = 1) -/obj/item/grown/nettle/death/add_juice() +/obj/item/reagent_containers/food/snacks/grown/nettle/death/add_juice() ..() force = round((5 + seed.potency / 2.5), 1) -/obj/item/grown/nettle/death/pickup(mob/living/carbon/user) +/obj/item/reagent_containers/food/snacks/grown/nettle/death/pickup(mob/living/carbon/user) if(..()) if(prob(50)) user.Knockdown(100) to_chat(user, "You are stunned by the Deathnettle as you try picking it up!") -/obj/item/grown/nettle/death/attack(mob/living/carbon/M, mob/user) +/obj/item/reagent_containers/food/snacks/grown/nettle/death/attack(mob/living/carbon/M, mob/user) if(!..()) return if(isliving(M)) diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index c1609cfb3d4..5a9acfa0f2a 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -609,7 +609,7 @@ /obj/item/integrated_circuit/manipulation/matman/Initialize() var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, - FALSE, list(/obj/item/stack), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + FALSE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.max_amount =100000 materials.precise_insertion = TRUE .=..() @@ -673,4 +673,4 @@ /obj/item/integrated_circuit/manipulation/matman/Destroy() GET_COMPONENT(materials, /datum/component/material_container) materials.retrieve_all() - .=..() \ No newline at end of file + .=..() diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index e93cb23b30f..0ad2714e283 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -34,6 +34,33 @@ else stuff_to_display = replacetext("[I.data]", eol , "
") +/obj/item/integrated_circuit/output/screen/large + name = "large screen" + desc = "Takes any data type as an input and displays it to anybody near the device when pulsed. \ + It can also be examined to see the last thing it displayed." + icon_state = "screen_medium" + power_draw_per_use = 20 + +/obj/item/integrated_circuit/output/screen/large/do_work() + ..() + + if(isliving(assembly.loc))//this whole block just returns if the assembly is neither in a mobs hands or on the ground + var/mob/living/H = assembly.loc + if(H.get_active_held_item() != assembly && H.get_inactive_held_item() != assembly) + return + else + if(!isturf(assembly.loc)) + return + + var/list/nearby_things = range(0, get_turf(src)) + for(var/mob/M in nearby_things) + var/obj/O = assembly ? assembly : src + to_chat(M, "[icon2html(O.icon, world, O.icon_state)] [stuff_to_display]") + if(assembly) + assembly.investigate_log("displayed \"[html_encode(stuff_to_display)]\" with [type].", INVESTIGATE_CIRCUIT) + else + investigate_log("displayed \"[html_encode(stuff_to_display)]\" as [type].", INVESTIGATE_CIRCUIT) + /obj/item/integrated_circuit/output/light name = "light" desc = "A basic light which can be toggled on/off when pulsed." @@ -151,14 +178,14 @@ name = "securitron sound circuit" desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is similar to those used in Securitrons." sounds = list( - "creep" = 'sound/voice/bcreep.ogg', - "criminal" = 'sound/voice/bcriminal.ogg', - "freeze" = 'sound/voice/bfreeze.ogg', - "god" = 'sound/voice/bgod.ogg', - "i am the law" = 'sound/voice/biamthelaw.ogg', - "insult" = 'sound/voice/binsult.ogg', - "radio" = 'sound/voice/bradio.ogg', - "secure day" = 'sound/voice/bsecureday.ogg', + "creep" = 'sound/voice/beepsky/creep.ogg', + "criminal" = 'sound/voice/beepsky/criminal.ogg', + "freeze" = 'sound/voice/beepsky/freeze.ogg', + "god" = 'sound/voice/beepsky/god.ogg', + "i am the law" = 'sound/voice/beepsky/iamthelaw.ogg', + "insult" = 'sound/voice/beepsky/insult.ogg', + "radio" = 'sound/voice/beepsky/radio.ogg', + "secure day" = 'sound/voice/beepsky/secureday.ogg', ) spawn_flags = IC_SPAWN_RESEARCH @@ -166,21 +193,21 @@ name = "medbot sound circuit" desc = "Takes a sound name as an input, and will play said sound when pulsed. This circuit is often found in medical robots." sounds = list( - "surgeon" = 'sound/voice/msurgeon.ogg', - "radar" = 'sound/voice/mradar.ogg', - "feel better" = 'sound/voice/mfeelbetter.ogg', - "patched up" = 'sound/voice/mpatchedup.ogg', - "injured" = 'sound/voice/minjured.ogg', - "insult" = 'sound/voice/minsult.ogg', - "coming" = 'sound/voice/mcoming.ogg', - "help" = 'sound/voice/mhelp.ogg', - "live" = 'sound/voice/mlive.ogg', - "lost" = 'sound/voice/mlost.ogg', - "flies" = 'sound/voice/mflies.ogg', - "catch" = 'sound/voice/mcatch.ogg', - "delicious" = 'sound/voice/mdelicious.ogg', - "apple" = 'sound/voice/mapple.ogg', - "no" = 'sound/voice/mno.ogg', + "surgeon" = 'sound/voice/medbot/surgeon.ogg', + "radar" = 'sound/voice/medbot/radar.ogg', + "feel better" = 'sound/voice/medbot/feelbetter.ogg', + "patched up" = 'sound/voice/medbot/patchedup.ogg', + "injured" = 'sound/voice/medbot/injured.ogg', + "insult" = 'sound/voice/medbot/insult.ogg', + "coming" = 'sound/voice/medbot/coming.ogg', + "help" = 'sound/voice/medbot/help.ogg', + "live" = 'sound/voice/medbot/live.ogg', + "lost" = 'sound/voice/medbot/lost.ogg', + "flies" = 'sound/voice/medbot/flies.ogg', + "catch" = 'sound/voice/medbot/catch.ogg', + "delicious" = 'sound/voice/medbot/delicious.ogg', + "apple" = 'sound/voice/medbot/apple.ogg', + "no" = 'sound/voice/medbot/no.ogg', ) spawn_flags = IC_SPAWN_RESEARCH diff --git a/code/modules/keybindings/readme.md b/code/modules/keybindings/readme.md index 6c0369d7c7f..f57d8d55ffa 100644 --- a/code/modules/keybindings/readme.md +++ b/code/modules/keybindings/readme.md @@ -1,7 +1,8 @@ # In-code keypress handling system This whole system is heavily based off of forum_account's keyboard library. -Thanks to forum_account for saving the day, the library can be found [here](https://secure.byond.com/developer/Forum_account/Keyboard)! +Thanks to forum_account for saving the day, the library can be found +[here](https://secure.byond.com/developer/Forum_account/Keyboard)! .dmf macros have some very serious shortcomings. For example, they do not allow reusing parts of one macro in another, so giving cyborgs their own shortcuts to swap active module couldn't @@ -30,10 +31,11 @@ pressed. No client-set keybindings at this time, but it shouldn't be too hard if someone wants. -Notes about certain keys -`Tab` has client-sided behavior but acts normally -`T`, `O`, and `M` move focus to the input when pressed. This fires the keyUp macro right away. -`\` needs to be escaped in the dmf so any usage is `\\` +Notes about certain keys: + +* `Tab` has client-sided behavior but acts normally +* `T`, `O`, and `M` move focus to the input when pressed. This fires the keyUp macro right away. +* `\` needs to be escaped in the dmf so any usage is `\\` You cannot `TICK_CHECK` or check `world.tick_usage` inside of procs called by key down and up events. They happen outside of a byond tick and have no meaning there. Key looping diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index e9233923cc5..91eab536c96 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -134,7 +134,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also shuttleId = "mining" //The base can only be dropped once, so this gives the console a new purpose. possible_destinations = "mining_home;mining_away;landing_zone_dock;mining_public" -/obj/machinery/computer/auxillary_base/proc/set_landing_zone(turf/T, mob/user, var/no_restrictions) +/obj/machinery/computer/auxillary_base/proc/set_landing_zone(turf/T, mob/user, no_restrictions) var/obj/docking_port/mobile/auxillary_base/base_dock = locate(/obj/docking_port/mobile/auxillary_base) in SSshuttle.mobile if(!base_dock) //Not all maps have an Aux base. This object is useless in that case. to_chat(user, "This station is not equipped with an auxillary base. Please contact your Nanotrasen contractor.") @@ -151,8 +151,8 @@ interface with the mining shuttle at the landing site if a mobile beacon is also if(!is_mining_level(T.z)) return BAD_ZLEVEL - var/colony_radius = CEILING(max(base_dock.width, base_dock.height)*0.5, 1) - var/list/colony_turfs = block(locate(T.x - colony_radius, T.y - colony_radius, T.z), locate(T.x + colony_radius, T.y + colony_radius, T.z)) + + var/list/colony_turfs = base_dock.return_ordered_turfs(T.x,T.y,T.z,base_dock.dir) for(var/i in 1 to colony_turfs.len) CHECK_TICK var/turf/place = colony_turfs[i] @@ -354,7 +354,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also qdel(Mport) return - if(!mining_shuttle.canDock(Mport)) + if(mining_shuttle.canDock(Mport) != SHUTTLE_CAN_DOCK) to_chat(user, "Unable to secure a valid docking zone. Please try again in an open area near, but not within the aux. mining base.") SSshuttle.stationary.Remove(Mport) qdel(Mport) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 026170da09e..a004a6ae0d0 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -82,7 +82,7 @@ /obj/machinery/mineral/processing_unit/Initialize() . = ..() proximity_monitor = new(src, 1) - AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, list(/obj/item/stack)) + AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), INFINITY, TRUE, /obj/item/stack) stored_research = new /datum/techweb/specialized/autounlocking/smelter /obj/machinery/mineral/processing_unit/Destroy() diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index 8207df78822..bd1da0a90f7 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), INFINITY, FALSE, - list(/obj/item/stack), + /obj/item/stack, null, null, TRUE) diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index 66b6b94d6c8..6b03be610d7 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -15,7 +15,7 @@ /obj/machinery/mineral/mint/Initialize() . = ..() - AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_DIAMOND, MAT_BANANIUM), MINERAL_MATERIAL_AMOUNT * 50, FALSE, list(/obj/item/stack)) + AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_DIAMOND, MAT_BANANIUM), MINERAL_MATERIAL_AMOUNT * 50, FALSE, /obj/item/stack) /obj/machinery/mineral/mint/process() var/turf/T = get_step(src, input_dir) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index edd6d903df4..b1f53a69672 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -19,6 +19,9 @@ QDEL_NULL(dna) GLOB.carbon_list -= src +/mob/living/carbon/initialize_footstep() + AddComponent(/datum/component/footstep, 1, 2) + /mob/living/carbon/relaymove(mob/user, direction) if(user in src.stomach_contents) if(prob(40)) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index c728b8c982f..61ce1c2bc3a 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -1,7 +1,7 @@ /* EMOTE DATUMS */ /datum/emote/living - mob_type_allowed_typecache = list(/mob/living) + mob_type_allowed_typecache = /mob/living mob_type_blacklist_typecache = list(/mob/living/simple_animal/slime, /mob/living/brain) /datum/emote/living/blush diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 112c8b44383..d011d6ad7b5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -9,7 +9,10 @@ diag_hud.add_to_hud(src) faction += "[REF(src)]" GLOB.mob_living_list += src + initialize_footstep() +/mob/living/proc/initialize_footstep() + AddComponent(/datum/component/footstep) /mob/living/prepare_huds() ..() diff --git a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm index 6fde8cede83..0378b0b9ee9 100644 --- a/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm +++ b/code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm @@ -116,7 +116,7 @@ target = C oldtarget_name = C.name speak("Level [threatlevel] infraction alert!") - playsound(src, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, FALSE) + playsound(src, pick('sound/voice/beepsky/criminal.ogg', 'sound/voice/beepsky/justice.ogg', 'sound/voice/beepsky/freeze.ogg'), 50, FALSE) playsound(src,'sound/weapons/saberon.ogg',50,TRUE,-1) visible_message("[src] ignites his energy swords!") icon_state = "grievous-c" diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index e092a411dbc..d172aec83ff 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -44,6 +44,8 @@ var/cell_type = /obj/item/stock_parts/cell var/vest_type = /obj/item/clothing/suit/armor/vest + do_footstep = TRUE + /mob/living/simple_animal/bot/ed209/Initialize(mapload,created_name,created_lasercolor) . = ..() diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 35f1d266f69..7167d87bde5 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -261,7 +261,7 @@ if(assess_patient(H)) last_found = world.time if((last_newpatient_speak + 300) < world.time) //Don't spam these messages! - var/list/messagevoice = list("Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/mcoming.ogg',"Wait [H.name]! I want to help!" = 'sound/voice/mhelp.ogg',"[H.name], you appear to be injured!" = 'sound/voice/minjured.ogg') + var/list/messagevoice = list("Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/coming.ogg',"Wait [H.name]! I want to help!" = 'sound/voice/medbot/help.ogg',"[H.name], you appear to be injured!" = 'sound/voice/medbot/injured.ogg') var/message = pick(messagevoice) speak(message) playsound(loc, messagevoice[message], 50, 0) @@ -289,7 +289,7 @@ if(QDELETED(patient)) if(!shut_up && prob(1)) - var/list/messagevoice = list("Radar, put a mask on!" = 'sound/voice/mradar.ogg',"There's always a catch, and I'm the best there is." = 'sound/voice/mcatch.ogg',"I knew it, I should've been a plastic surgeon." = 'sound/voice/msurgeon.ogg',"What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/mflies.ogg',"Delicious!" = 'sound/voice/mdelicious.ogg') + var/list/messagevoice = list("Radar, put a mask on!" = 'sound/voice/medbot/radar.ogg',"There's always a catch, and I'm the best there is." = 'sound/voice/medbot/catch.ogg',"I knew it, I should've been a plastic surgeon." = 'sound/voice/medbot/surgeon.ogg',"What kind of medbay is this? Everyone's dropping like flies." = 'sound/voice/medbot/flies.ogg',"Delicious!" = 'sound/voice/medbot/delicious.ogg') var/message = pick(messagevoice) speak(message) playsound(loc, messagevoice[message], 50, 0) @@ -422,7 +422,7 @@ return if(C.stat == DEAD || (C.has_trait(TRAIT_FAKEDEATH))) - var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/mno.ogg',"Live, damnit! LIVE!" = 'sound/voice/mlive.ogg',"I...I've never lost a patient before. Not today, I mean." = 'sound/voice/mlost.ogg') + var/list/messagevoice = list("No! Stay with me!" = 'sound/voice/medbot/no.ogg',"Live, damnit! LIVE!" = 'sound/voice/medbot/live.ogg',"I...I've never lost a patient before. Not today, I mean." = 'sound/voice/medbot/lost.ogg') var/message = pick(messagevoice) speak(message) playsound(loc, messagevoice[message], 50, 0) @@ -476,7 +476,7 @@ if(!reagent_id) //If they don't need any of that they're probably cured! if(C.maxHealth - C.health < heal_threshold) to_chat(src, "[C] is healthy! Your programming prevents you from injecting anyone without at least [heal_threshold] damage of any one type ([heal_threshold + 15] for oxygen damage.)") - var/list/messagevoice = list("All patched up!" = 'sound/voice/mpatchedup.ogg',"An apple a day keeps me away." = 'sound/voice/mapple.ogg',"Feel better soon!" = 'sound/voice/mfeelbetter.ogg') + var/list/messagevoice = list("All patched up!" = 'sound/voice/medbot/patchedup.ogg',"An apple a day keeps me away." = 'sound/voice/medbot/apple.ogg',"Feel better soon!" = 'sound/voice/medbot/feelbetter.ogg') var/message = pick(messagevoice) speak(message) playsound(loc, messagevoice[message], 50, 0) @@ -540,7 +540,7 @@ drop_part(robot_arm, Tsec) if(emagged && prob(25)) - playsound(loc, 'sound/voice/minsult.ogg', 50, 0) + playsound(loc, 'sound/voice/medbot/insult.ogg', 50, 0) do_sparks(3, TRUE, src) ..() diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index 862435fde7a..f94d4d0a773 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -390,7 +390,7 @@ Auto Patrol: []"}, target = C oldtarget_name = C.name speak("Level [threatlevel] infraction alert!") - playsound(src, pick('sound/voice/bcriminal.ogg', 'sound/voice/bjustice.ogg', 'sound/voice/bfreeze.ogg'), 50, FALSE) + playsound(loc, pick('sound/voice/beepsky/criminal.ogg', 'sound/voice/beepsky/justice.ogg', 'sound/voice/beepsky/freeze.ogg'), 50, FALSE) visible_message("[src] points at [C.name]!") mode = BOT_HUNT INVOKE_ASYNC(src, .proc/handle_automated_action) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 75e7b668ea5..9a08276999c 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -32,6 +32,8 @@ gold_core_spawnable = FRIENDLY_SPAWN collar_type = "cat" + do_footstep = TRUE + /mob/living/simple_animal/pet/cat/Initialize() . = ..() verbs += /mob/living/proc/lay_down diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 99c598f95f7..abe275cddf7 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -14,6 +14,8 @@ speak_chance = 1 turns_per_move = 10 + do_footstep = TRUE + //Corgis and pugs are now under one dog subtype /mob/living/simple_animal/pet/dog/corgi diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 9423cf9df6f..564fae48adf 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -30,6 +30,8 @@ blood_volume = BLOOD_VOLUME_NORMAL var/obj/item/udder/udder = null + do_footstep = TRUE + /mob/living/simple_animal/hostile/retaliate/goat/Initialize() udder = new() . = ..() @@ -130,6 +132,8 @@ gold_core_spawnable = FRIENDLY_SPAWN blood_volume = BLOOD_VOLUME_NORMAL + do_footstep = TRUE + /mob/living/simple_animal/cow/Initialize() udder = new() . = ..() @@ -206,6 +210,8 @@ mob_size = MOB_SIZE_TINY gold_core_spawnable = FRIENDLY_SPAWN + do_footstep = TRUE + /mob/living/simple_animal/chick/Initialize() . = ..() pixel_x = rand(-6, 6) @@ -262,6 +268,8 @@ gold_core_spawnable = FRIENDLY_SPAWN var/static/chicken_count = 0 + do_footstep = TRUE + /mob/living/simple_animal/chicken/Initialize() . = ..() if(!body_color) diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index a0e9f08a823..28b66c26ee1 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -19,6 +19,8 @@ response_harm = "kicks" gold_core_spawnable = FRIENDLY_SPAWN + do_footstep = TRUE + //Captain fox /mob/living/simple_animal/pet/fox/Renault name = "Renault" diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm index 3d2d9bc1242..78768219de5 100644 --- a/code/modules/mob/living/simple_animal/friendly/gondola.dm +++ b/code/modules/mob/living/simple_animal/friendly/gondola.dm @@ -26,6 +26,8 @@ health = 200 del_on_death = TRUE + //Gondolas don't make footstep sounds + /mob/living/simple_animal/pet/gondola/Initialize() . = ..() CreateGondola() diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm index 7f69be2d96b..9835840dbfe 100644 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm @@ -15,6 +15,8 @@ turns_per_move = 10 icon = 'icons/mob/penguins.dmi' + do_footstep = TRUE + /mob/living/simple_animal/pet/penguin/emperor name = "Emperor penguin" real_name = "penguin" diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm index f112b3f98e9..324fa107fab 100644 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm @@ -23,6 +23,8 @@ speed = 10 glide_size = 2 + do_footstep = TRUE + //Cargo Sloth /mob/living/simple_animal/sloth/paperwork diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 762b662de71..3d92912f9c9 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -36,6 +36,8 @@ death_sound = 'sound/voice/hiss6.ogg' deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." + do_footstep = TRUE + /mob/living/simple_animal/hostile/alien/drone name = "alien drone" icon_state = "aliend" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index b09b3e768b2..acd8da9618d 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -39,6 +39,8 @@ faction = list("russian") gold_core_spawnable = HOSTILE_SPAWN + do_footstep = TRUE + //SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!! /mob/living/simple_animal/hostile/bear/Hudson name = "Hudson" diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index 1b766a51d61..d31af79c19f 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -23,6 +23,8 @@ attack_sound = 'sound/hallucinations/growl1.ogg' var/list/copies = list() + do_footstep = TRUE + //Summon Ability //Lets the wizard summon his art to fight for him diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index d267da624fd..4e7cb0ac70a 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -34,6 +34,8 @@ faction = list("faithless") gold_core_spawnable = HOSTILE_SPAWN + do_footstep = TRUE + /mob/living/simple_animal/hostile/faithless/AttackingTarget() . = ..() if(. && prob(12) && iscarbon(target)) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 163213c16f1..cfdf302d6bf 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -52,6 +52,8 @@ var/datum/action/innate/spider/lay_web/lay_web var/directive = "" //Message passed down to children, to relay the creator's orders + do_footstep = TRUE + /mob/living/simple_animal/hostile/poison/giant_spider/Initialize() . = ..() lay_web = new diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index 6d7983fc878..5d1db8d35e1 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -38,6 +38,8 @@ var/list/gorilla_overlays[GORILLA_TOTAL_LAYERS] var/oogas = 0 + do_footstep = TRUE + // Gorillas like to dismember limbs from unconcious mobs. // Returns null when the target is not an unconcious carbon mob; a list of limbs (possibly empty) otherwise. /mob/living/simple_animal/hostile/gorilla/proc/target_bodyparts(atom/the_target) diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 3f0c468d264..93284fe6664 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -29,6 +29,8 @@ del_on_death = 1 loot = list(/obj/effect/decal/cleanable/robot_debris) + do_footstep = TRUE + /mob/living/simple_animal/hostile/hivebot/Initialize() . = ..() deathmessage = "[src] blows apart!" diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm index ea5b7e5a1bb..d1e8f1f49ed 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/leaper.dm @@ -26,6 +26,8 @@ var/hop_cooldown = 0 //Strictly for player controlled leapers var/projectile_ready = FALSE //Stopping AI leapers from firing whenever they want, and only doing it after a hop has finished instead + do_footstep = TRUE + /obj/item/projectile/leaper name = "leaper bubble" icon_state = "leaper" diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm index 616c9025b93..607db5d54ff 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm @@ -24,6 +24,8 @@ projectilesound = 'sound/weapons/pierce.ogg' alpha = 50 + do_footstep = TRUE + /mob/living/simple_animal/hostile/jungle/mega_arachnid/Life() ..() if(target && ranged_cooldown > world.time && iscarbon(target)) diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm index 1fde4a9cd44..29f48c72951 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/mook.dm @@ -31,6 +31,8 @@ var/attack_state = MOOK_ATTACK_NEUTRAL var/struck_target_leap = FALSE + do_footstep = TRUE + /mob/living/simple_animal/hostile/jungle/mook/CanPass(atom/movable/O) if(istype(O, /mob/living/simple_animal/hostile/jungle/mook)) var/mob/living/simple_animal/hostile/jungle/mook/M = O diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 3895951b3c1..97dede3d2fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -53,6 +53,8 @@ Difficulty: Medium deathmessage = "falls to the ground, decaying into glowing particles." death_sound = "bodyfall" + do_footstep = TRUE + /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/guidance guidance = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 08ced3a6dbe..3f68c15dc2b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -52,6 +52,8 @@ Difficulty: Hard deathmessage = "sinks into a pool of blood, fleeing the battle. You've won, for now... " death_sound = 'sound/magic/enter_blood.ogg' + do_footstep = TRUE + /obj/item/gps/internal/bubblegum icon_state = null gpstag = "Bloody Signal" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 28e8260bed6..fac14eeb0ef 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -63,6 +63,8 @@ Difficulty: Medium death_sound = 'sound/magic/demon_dies.ogg' var/datum/action/small_sprite/smallsprite = new/datum/action/small_sprite/drake() + do_footstep = TRUE + /mob/living/simple_animal/hostile/megafauna/dragon/Initialize() smallsprite.Grant(src) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index 0c660dd1cd4..f74f9a436c1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -33,6 +33,8 @@ var/pre_attack_icon = "Goliath_preattack" loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) + do_footstep = TRUE + /mob/living/simple_animal/hostile/asteroid/goliath/Life() . = ..() handle_preattack() diff --git a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm index b170ae05747..543ffe6131c 100644 --- a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm +++ b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm @@ -31,6 +31,8 @@ speak = list("Stop resisting!", "I AM THE LAW!", "Face the wrath of the golden bolt!", "Stop breaking the law, asshole!") search_objects = 1 + do_footstep = TRUE + /mob/living/simple_animal/hostile/nanotrasen/Aggro() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index 0991c8922ae..db02919d323 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -34,7 +34,7 @@ /mob/living/simple_animal/hostile/netherworld/migo/Initialize() . = ..() - migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/carhorn.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/megaphone.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/items/geiger/high1.ogg', 'sound/items/geiger/high2.ogg', 'sound/voice/bcreep.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/mpatchedup.ogg', 'sound/voice/mfeelbetter.ogg', 'sound/voice/human/manlaugh1.ogg', 'sound/voice/human/womanlaugh.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/clockcultalr.ogg', 'sound/ambience/antag/ling_aler.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/ambience/antag/monkey.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clockcult_gateway_disrupted.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/curse1.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosion_distant.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/effects/his_grace_awaken.ogg', 'sound/effects/pai_boot.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/ratvar_reveal.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/misc/airraid.ogg', 'sound/misc/bang.ogg','sound/misc/highlander.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/misc/splort.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/beam_sniper.ogg', 'sound/weapons/chainsawhit.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshot_silenced.ogg', 'sound/weapons/gunshot2.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/clockcult/steam_whoosh.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlockclose.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlockopen.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/cryo_warning.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/machines/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/triple_beep.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg') //hahahaha fuck you code divers + migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/carhorn.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/megaphone.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/items/geiger/high1.ogg', 'sound/items/geiger/high2.ogg', 'sound/voice/beepsky/creep.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/medbot/patchedup.ogg', 'sound/voice/medbot/feelbetter.ogg', 'sound/voice/human/manlaugh1.ogg', 'sound/voice/human/womanlaugh.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/clockcultalr.ogg', 'sound/ambience/antag/ling_aler.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/ambience/antag/monkey.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clockcult_gateway_disrupted.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/curse1.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosion_distant.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/effects/his_grace_awaken.ogg', 'sound/effects/pai_boot.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/ratvar_reveal.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/misc/airraid.ogg', 'sound/misc/bang.ogg','sound/misc/highlander.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/misc/splort.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/beam_sniper.ogg', 'sound/weapons/chainsawhit.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshot_silenced.ogg', 'sound/weapons/gunshot2.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/clockcult/steam_whoosh.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlockclose.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlockopen.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/cryo_warning.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/machines/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/triple_beep.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg') //hahahaha fuck you code divers /mob/living/simple_animal/hostile/netherworld/migo/say(message) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 9939834fecb..be40518d703 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -41,6 +41,8 @@ attack_sound = 'sound/weapons/blade1.ogg' var/obj/effect/light_emitter/red_energy_sword/sord + do_footstep = TRUE + /mob/living/simple_animal/hostile/pirate/melee/space name = "Space Pirate Swashbuckler" icon_state = "piratespace" diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index cd7acc6f5a1..cd978b70665 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -33,6 +33,8 @@ maxbodytemp = 370 unsuitable_atmos_damage = 10 + do_footstep = TRUE + /mob/living/simple_animal/hostile/retaliate/clown/handle_temperature_damage() if(bodytemperature < minbodytemp) adjustBruteLoss(10) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm index a1325037860..c50ace8871c 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm @@ -24,6 +24,8 @@ environment_smash = ENVIRONMENT_SMASH_NONE del_on_death = 0 + do_footstep = TRUE + /mob/living/simple_animal/hostile/retaliate/nanotrasenpeace //this should be in a different file name = "Nanotrasen Private Security Officer" desc = "An officer part of Nanotrasen's private security force." diff --git a/code/modules/mob/living/simple_animal/hostile/russian.dm b/code/modules/mob/living/simple_animal/hostile/russian.dm index 1b4067196d0..82ce5c8b3e0 100644 --- a/code/modules/mob/living/simple_animal/hostile/russian.dm +++ b/code/modules/mob/living/simple_animal/hostile/russian.dm @@ -29,6 +29,8 @@ status_flags = CANPUSH del_on_death = 1 + do_footstep = TRUE + /mob/living/simple_animal/hostile/russian/ranged icon_state = "russianranged" diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index fca6afd4a67..d0ae01f4436 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -34,6 +34,8 @@ del_on_death = 1 loot = list(/obj/effect/decal/remains/human) + do_footstep = TRUE + /mob/living/simple_animal/hostile/skeleton/eskimo name = "undead eskimo" desc = "The reanimated remains of some poor traveler." diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 6ef1741a341..2c45743c55c 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -49,6 +49,8 @@ dodging = TRUE rapid_melee = 2 + do_footstep = TRUE + ///////////////Melee//////////// /mob/living/simple_animal/hostile/syndicate/space diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm index 921bd5959be..a946cbf45b0 100644 --- a/code/modules/mob/living/simple_animal/hostile/wizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/wizard.dm @@ -37,6 +37,8 @@ var/next_cast = 0 + do_footstep = TRUE + /mob/living/simple_animal/hostile/wizard/Initialize() . = ..() fireball = new /obj/effect/proc_holder/spell/aimed/fireball diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 44104070e8d..435ca40066f 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -91,6 +91,8 @@ var/my_z // I don't want to confuse this with client registered_z + var/do_footstep = FALSE + /mob/living/simple_animal/Initialize() . = ..() GLOB.simple_animals[AIStatus] += src @@ -118,6 +120,10 @@ return ..() +/mob/living/simple_animal/initialize_footstep() + if(do_footstep) + ..() + /mob/living/simple_animal/updatehealth() ..() health = CLAMP(health, 0, maxHealth) diff --git a/code/modules/modular_computers/documentation.md b/code/modules/modular_computers/documentation.md index 88d8602729d..246da7c3d9c 100644 --- a/code/modules/modular_computers/documentation.md +++ b/code/modules/modular_computers/documentation.md @@ -1,32 +1,62 @@ +# Modular computer programs - -#Modular computer programs Ok. so a quick rundown on how to make a program. This is kind of a shitty documentation, but oh well I was asked to. - ## Base setup -This is how the base program is setup. the rest is mostly tgui stuff. I'll use the ntnetmonitor as a base +This is how the base program is setup. the rest is mostly tgui stuff. I'll use the ntnetmonitor as a base ```DM /datum/computer_file/program/ntnetmonitor - filename = "ntmonitor" //This is obviously the name of the file itself. not much to be said - filedesc = "NTNet Diagnostics and Monitoring" // This is sort of the official name. it's what shows up on the main menu - program_icon_state = "comm_monitor" // This is what the screen will look like when the program is active - extended_desc = "This program is a dummy. // This is a sort of a description, visible when looking on the ntnet - size = 12 // size of the program. Big programs need more hard drive space. Don't make it too big though. - requires_ntnet = 1 // If this is set, the program will not run without an ntnet connection, and will close if the connection is lost. Mainly for primarily online programs. - required_access = access_network //This is access required to run the program itself. ONLY SET THIS FOR SUPER SECURE SHIT. This also acts as transfer_access as well. - transfer_access = access_change_ids // This is the access needed to download from ntnet or host on the ptp program. This is what you want to use most of the time. - available_on_ntnet = 1 //If it's available to download on ntnet. pretty self explanatory. - available_on_syndinet = 0 // ditto but on emagged syndie net. Use this for antag programs - usage_flags = PROGRAM_ALL // Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL - //^^- The comment above sorta explains it. Use this to limit what kind of machines can run the program. For example, comms program should be limited to consoles and laptops. - var/ui_header = "downloader_finished.gif" //This one is kinda cool. If you have the program minimized, this will show up in the header of the computer screen. - //you can even have the program change what the header is based on the situation! see alarm.dm for an example. + /// This is obviously the name of the file itself. not much to be said + filename = "ntmonitor" + + /// This is sort of the official name. it's what shows up on the main menu + filedesc = "NTNet Diagnostics and Monitoring" + + /// This is what the screen will look like when the program is active + program_icon_state = "comm_monitor" + + /// This is a sort of a description, visible when looking on the ntnet + extended_desc = "This program is a dummy." + + /// size of the program. Big programs need more hard drive space. Don't + /// make it too big though. + size = 12 + + /// If this is set, the program will not run without an ntnet connection, + /// and will close if the connection is lost. Mainly for primarily online + /// programs. + requires_ntnet = 1 + + /// This is access required to run the program itself. ONLY SET THIS FOR + /// SUPER SECURE SHIT. This also acts as transfer_access as well. + required_access = access_network + + /// This is the access needed to download from ntnet or host on the ptp + /// program. This is what you want to use most of the time. + transfer_access = access_change_ids + + /// If it's available to download on ntnet. pretty self explanatory. + available_on_ntnet = 1 + + /// ditto but on emagged syndie net. Use this for antag programs + available_on_syndinet = 0 + + /// Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) + /// or PROGRAM_ALL. Use this to limit what kind of machines can run the + /// program. For example, comms program should be limited to consoles and laptops. + usage_flags = PROGRAM_ALL + + /// This one is kinda cool. If you have the program minimized, this will + /// show up in the header of the computer screen. You can even have the + /// program change what the header is based on the situation! See `alarm.dm` + /// for an example. + var/ui_header = "downloader_finished.gif" ``` -##Preinstalls +## Preinstalls + Now. for pre-installing stuff. Primarily done for consoles, there's an install_programs() proc in the console presets file in the machines folder. @@ -42,4 +72,3 @@ Basically, you want to do cpu.hard_drive.store_file(new/*program path here*()) Probably pretty self explanatory, but just in case. Will probably be expanded when new features come around or I get asked to mention something. - diff --git a/code/modules/research/nanites/nanite_chamber.dm b/code/modules/research/nanites/nanite_chamber.dm index 6f58cb2ad90..5c5e8b442f4 100644 --- a/code/modules/research/nanites/nanite_chamber.dm +++ b/code/modules/research/nanites/nanite_chamber.dm @@ -9,7 +9,6 @@ density = TRUE idle_power_usage = 50 active_power_usage = 300 - occupant_typecache = list(/mob/living) var/obj/machinery/computer/nanite_chamber_control/console var/locked = FALSE @@ -20,6 +19,10 @@ var/busy_message var/message_cooldown = 0 +/obj/machinery/nanite_chamber/Initialize() + . = ..() + occupant_typecache = GLOB.typecache_living + /obj/machinery/nanite_chamber/RefreshParts() scan_level = 0 for(var/obj/item/stock_parts/scanning_module/P in component_parts) @@ -224,4 +227,4 @@ /obj/machinery/nanite_chamber/MouseDrop_T(mob/target, mob/user) if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) return - close_machine(target) \ No newline at end of file + close_machine(target) diff --git a/code/modules/research/nanites/public_chamber.dm b/code/modules/research/nanites/public_chamber.dm index 89c99a9c72e..32a7bdcdbc5 100644 --- a/code/modules/research/nanites/public_chamber.dm +++ b/code/modules/research/nanites/public_chamber.dm @@ -9,7 +9,6 @@ density = TRUE idle_power_usage = 50 active_power_usage = 300 - occupant_typecache = list(/mob/living) var/cloud_id = 1 var/locked = FALSE @@ -18,6 +17,10 @@ var/busy_icon_state var/message_cooldown = 0 +/obj/machinery/public_nanite_chamber/Initialize() + . = ..() + occupant_typecache = GLOB.typecache_living + /obj/machinery/public_nanite_chamber/RefreshParts() var/obj/item/circuitboard/machine/public_nanite_chamber/board = circuit if(board) @@ -171,4 +174,4 @@ /obj/machinery/public_nanite_chamber/MouseDrop_T(mob/target, mob/user) if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) return - close_machine(target) \ No newline at end of file + close_machine(target) diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index 4fefc82cd31..12e82e42121 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -10,7 +10,7 @@ callTime = INFINITY ignitionTime = 50 - + movement_force = list("KNOCKDOWN" = 3, "THROW" = 0) var/sound_played @@ -20,6 +20,7 @@ var/obj/machinery/requests_console/console var/force_depart = FALSE var/perma_docked = FALSE //highlander with RESPAWN??? OH GOD!!! + var/obj/docking_port/stationary/target_dock // for badminry /obj/docking_port/mobile/arrivals/Initialize(mapload) . = ..() @@ -177,7 +178,10 @@ if(mode == SHUTTLE_IDLE) if(console) console.say(pickingup ? "Departing immediately for new employee pickup." : "Shuttle departing.") - request(SSshuttle.getDock("arrivals_stationary")) //we will intentionally never return SHUTTLE_ALREADY_DOCKED + var/obj/docking_port/stationary/target = target_dock + if(QDELETED(target)) + target = SSshuttle.getDock("arrivals_stationary") + request(target) //we will intentionally never return SHUTTLE_ALREADY_DOCKED /obj/docking_port/mobile/arrivals/proc/RequireUndocked(mob/user) if(mode == SHUTTLE_CALL || damaged) diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index a33676de291..86132cf834f 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -5,7 +5,7 @@ width = 7 height = 7 -/obj/docking_port/mobile/assault_pod/request() +/obj/docking_port/mobile/assault_pod/request(obj/docking_port/stationary/S) if(!(z in SSmapping.levels_by_trait(ZTRAIT_STATION))) //No launching pods that have already launched return ..() diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm index d8813960921..a0bc530aedc 100644 --- a/code/modules/shuttle/docking.dm +++ b/code/modules/shuttle/docking.dm @@ -1,4 +1,4 @@ -//this is the main proc. It instantly moves our mobile port to stationary port new_dock +/// This is the main proc. It instantly moves our mobile port to stationary port `new_dock`. /obj/docking_port/mobile/proc/initiate_docking(obj/docking_port/stationary/new_dock, movement_direction, force=FALSE) // Crashing this ship with NO SURVIVORS diff --git a/code/modules/shuttle/elevator.dm b/code/modules/shuttle/elevator.dm index 4584cd59587..de5d88ee17c 100644 --- a/code/modules/shuttle/elevator.dm +++ b/code/modules/shuttle/elevator.dm @@ -7,4 +7,4 @@ movement_force = list("KNOCKDOWN" = 0, "THROW" = 0) /obj/docking_port/mobile/elevator/request(obj/docking_port/stationary/S) //No transit, no ignition, just a simple up/down platform - initiate_docking(S, TRUE) \ No newline at end of file + initiate_docking(S, force=TRUE) diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 20606de6bfd..cbc6810143e 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -427,11 +427,11 @@ height = 4 launch_status = UNLAUNCHED -/obj/docking_port/mobile/pod/request() - var/obj/machinery/computer/shuttle/S = getControlConsole() - if(!istype(S, /obj/machinery/computer/shuttle/pod)) +/obj/docking_port/mobile/pod/request(obj/docking_port/stationary/S) + var/obj/machinery/computer/shuttle/C = getControlConsole() + if(!istype(C, /obj/machinery/computer/shuttle/pod)) return ..() - if(GLOB.security_level >= SEC_LEVEL_RED || (S && (S.obj_flags & EMAGGED))) + if(GLOB.security_level >= SEC_LEVEL_RED || (C && (C.obj_flags & EMAGGED))) if(launch_status == UNLAUNCHED) launch_status = EARLY_LAUNCHED return ..() diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index 61895c041b6..dcfb0793b55 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -111,17 +111,23 @@ data["shuttles"] = list() for(var/i in SSshuttle.mobile) var/obj/docking_port/mobile/M = i + var/timeleft = M.timeLeft(1) var/list/L = list() L["name"] = M.name L["id"] = M.id L["timer"] = M.timer L["timeleft"] = M.getTimerStr() - var/can_fast_travel = FALSE - if(M.timer && M.timeLeft() >= 50) - can_fast_travel = TRUE - L["can_fast_travel"] = can_fast_travel - L["mode"] = capitalize(shuttlemode2str(M.mode)) - L["status"] = M.getStatusText() + if (timeleft > 1 HOURS) + L["timeleft"] = "Infinity" + L["can_fast_travel"] = M.timer && timeleft >= 50 + L["can_fly"] = TRUE + if(istype(M, /obj/docking_port/mobile/emergency)) + L["can_fly"] = FALSE + else if(!M.destination) + L["can_fast_travel"] = FALSE + if (M.mode != SHUTTLE_IDLE) + L["mode"] = capitalize(shuttlemode2str(M.mode)) + L["status"] = M.getDbgStatusText() if(M == existing_shuttle) data["existing_shuttle"] = L @@ -153,10 +159,19 @@ user.forceMove(get_turf(M)) . = TRUE break + + if("fly") + for(var/i in SSshuttle.mobile) + var/obj/docking_port/mobile/M = i + if(M.id == params["id"]) + . = TRUE + M.admin_fly_shuttle(user) + break + if("fast_travel") for(var/i in SSshuttle.mobile) var/obj/docking_port/mobile/M = i - if(M.id == params["id"] && M.timer && M.timeLeft() >= 50) + if(M.id == params["id"] && M.timer && M.timeLeft(1) >= 50) M.setTimer(50) . = TRUE message_admins("[key_name_admin(usr)] fast travelled [M]") @@ -291,3 +306,68 @@ if(preview_shuttle) preview_shuttle.jumpToNullSpace() preview_shuttle = null + +/obj/docking_port/mobile/proc/admin_fly_shuttle(mob/user) + var/list/options = list() + + for(var/port in SSshuttle.stationary) + if (istype(port, /obj/docking_port/stationary/transit)) + continue // please don't do this + var/obj/docking_port/stationary/S = port + if (canDock(S) == SHUTTLE_CAN_DOCK) + options[S.name || S.id] = S + + options += "--------" + options += "Infinite Transit" + options += "Delete Shuttle" + options += "Into The Sunset (delete & greentext 'escape')" + + var/selection = input(user, "Select where to fly [name || id]:", "Fly Shuttle") as null|anything in options + if(!selection) + return + + switch(selection) + if("Infinite Transit") + destination = null + mode = SHUTTLE_IGNITING + setTimer(ignitionTime) + + if("Delete Shuttle") + if(alert(user, "Really delete [name || id]?", "Delete Shuttle", "Cancel", "Really!") != "Really!") + return + jumpToNullSpace() + + if("Into The Sunset (delete & greentext 'escape')") + if(alert(user, "Really delete [name || id] and greentext escape objectives?", "Delete Shuttle", "Cancel", "Really!") != "Really!") + return + intoTheSunset() + + else + if(options[selection]) + request(options[selection]) + +/obj/docking_port/mobile/emergency/admin_fly_shuttle(mob/user) + return // use the existing verbs for this + +/obj/docking_port/mobile/arrivals/admin_fly_shuttle(mob/user) + switch(alert(user, "Would you like to fly the arrivals shuttle once or change its destination?", "Fly Shuttle", "Fly", "Retarget", "Cancel")) + if("Cancel") + return + if("Fly") + return ..() + + var/list/options = list() + + for(var/port in SSshuttle.stationary) + if (istype(port, /obj/docking_port/stationary/transit)) + continue // please don't do this + var/obj/docking_port/stationary/S = port + if (canDock(S) == SHUTTLE_CAN_DOCK) + options[S.name || S.id] = S + + var/selection = input(user, "Select the new arrivals destination:", "Fly Shuttle") as null|anything in options + if(!selection) + return + target_dock = options[selection] + if(!QDELETED(target_dock)) + destination = target_dock diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index e6176b4770f..c07d382474a 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -409,8 +409,9 @@ mode = SHUTTLE_IDLE return previous = null -// if(!destination) -// return + if(!destination) + // sent to transit with no destination -> unlimited timer + timer = INFINITY var/obj/docking_port/stationary/S0 = get_docked() var/obj/docking_port/stationary/S1 = assigned_transit if(S1) @@ -462,6 +463,22 @@ qdel(src, force=TRUE) +/obj/docking_port/mobile/proc/intoTheSunset() + // Loop over mobs + for(var/t in return_turfs()) + var/turf/T = t + for(var/mob/living/M in T.GetAllContents()) + // If they have a mind and they're not in the brig, they escaped + if(M.mind && !istype(t, /turf/open/floor/plasteel/shuttle/red) && !istype(t, /turf/open/floor/mineral/plastitanium/red/brig)) + M.mind.force_escaped = TRUE + // Ghostize them and put them in nullspace stasis (for stat & possession checks) + M.notransform = TRUE + M.ghostize(FALSE) + M.moveToNullspace() + + // Now that mobs are stowed, delete the shuttle + jumpToNullSpace() + /obj/docking_port/mobile/proc/create_ripples(obj/docking_port/stationary/S1, animate_time) var/list/turfs = ripple_area(S1) for(var/t in turfs) @@ -658,6 +675,25 @@ . += " towards [dst ? dst.name : "unknown location"] ([timeLeft(600)] minutes)" +/obj/docking_port/mobile/proc/getDbgStatusText() + var/obj/docking_port/stationary/dockedAt = get_docked() + . = (dockedAt && dockedAt.name) ? dockedAt.name : "unknown" + if(istype(dockedAt, /obj/docking_port/stationary/transit)) + var/obj/docking_port/stationary/dst + if(mode == SHUTTLE_RECALL) + dst = previous + else + dst = destination + if(dst) + . = "(transit to) [dst.name || dst.id]" + else + . = "(transit to) nowhere" + else if(dockedAt) + . = dockedAt.name || dockedAt.id + else + . = "unknown" + + // attempts to locate /obj/machinery/computer/shuttle with matching ID inside the shuttle /obj/docking_port/mobile/proc/getControlConsole() for(var/place in shuttle_areas) diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 0b7f6c9ea96..b54fceb3e7a 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -62,7 +62,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( return FALSE return TRUE -/obj/docking_port/mobile/supply/request() +/obj/docking_port/mobile/supply/request(obj/docking_port/stationary/S) if(mode != SHUTTLE_IDLE) return 2 return ..() diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 31ba9a4c75e..54cedf46ab1 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1472,6 +1472,17 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 15 restricted_roles = list("Clown") +/datum/uplink_item/role_restricted/clowncar + name = "Clown Car" + desc = "The Clown Car is the ultimate transportation method for any worthy clown! \ + Simply insert your bikehorn and get in, and get ready to have the funniest ride of your life! \ + You can ram any spacemen you come across and stuff them into your car, kidnapping them and locking them inside until \ + someone saves them or they manage to crawl out. Be sure not to ram into any walls or vending machines, as the springloaded seats \ + are very sensetive. Now with our included lube defense mechanism which will protect you against any angry shitcurity!" + item = /obj/vehicle/sealed/car/clowncar + cost = 18 + restricted_roles = list("Clown") + // Pointless /datum/uplink_item/badass category = "(Pointless) Badassery" diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 11118991f6e..be59a6df658 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -1,6 +1,3 @@ -#define VEHICLE_CONTROL_PERMISSION 1 -#define VEHICLE_CONTROL_DRIVE 2 - /obj/vehicle name = "generic vehicle" desc = "Yell at coderbus." @@ -72,8 +69,8 @@ return FALSE occupants[M] = NONE add_control_flags(M, control_flags) - grant_passenger_actions(M) after_add_occupant(M) + grant_passenger_actions(M) return TRUE /obj/vehicle/proc/after_add_occupant(mob/M) @@ -119,8 +116,12 @@ step(trailer, dir_to_move) return did_move else + after_move(direction) return step(src, direction) +/obj/vehicle/proc/after_move(direction) + return + /obj/vehicle/proc/add_control_flags(mob/controller, flags) if(!istype(controller) || !flags) return FALSE @@ -142,7 +143,7 @@ /obj/vehicle/Bump(atom/movable/M) . = ..() if(emulate_door_bumps) - if(istype(M, /obj/machinery/door) && has_buckled_mobs()) + if(istype(M, /obj/machinery/door)) for(var/m in occupants) M.Bumped(m) diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm new file mode 100644 index 00000000000..510242b9dbd --- /dev/null +++ b/code/modules/vehicles/cars/car.dm @@ -0,0 +1,68 @@ +/obj/vehicle/sealed/car + layer = ABOVE_MOB_LAYER + anchored = TRUE + var/car_traits = NONE //Bitflag for special behavior such as kidnapping + var/engine_sound = 'sound/vehicles/carrev.ogg' + var/last_enginesound_time + var/engine_sound_length = 20 //Set this to the length of the engine sound + var/escape_time = 200 //Time it takes to break out of the car + +/obj/vehicle/sealed/car/generate_actions() + . = ..() + initialize_controller_action_type(/datum/action/vehicle/sealed/remove_key, VEHICLE_CONTROL_DRIVE) + if(car_traits & CAN_KIDNAP) + initialize_controller_action_type(/datum/action/vehicle/sealed/DumpKidnappedMobs, VEHICLE_CONTROL_DRIVE) + +/obj/vehicle/sealed/car/MouseDrop_T(atom/dropping, mob/M) + if(!M.canmove || M.stat || M.restrained()) + return FALSE + if(ismob(dropping) && M != dropping) + var/mob/D = dropping + M.visible_message("[M] starts forcing [D] into [src]!") + mob_try_forced_enter(M, D) + return ..() + +/obj/vehicle/sealed/car/mob_try_exit(mob/M, mob/user, silent = FALSE) + if(M == user && (occupants[M] & VEHICLE_CONTROL_KIDNAPPED)) + to_chat(user, "You push against the back of [src] trunk to try and get out.") + if(!do_after(user, escape_time, target = src)) + return FALSE + to_chat(user,"[user] gets out of [src]") + mob_exit(M, silent) + return TRUE + mob_exit(M, silent) + return TRUE + +/obj/vehicle/sealed/car/after_move(direction) + if(world.time < last_enginesound_time + engine_sound_length) + return + last_enginesound_time = world.time + playsound(src, engine_sound, 100, TRUE) + +/obj/vehicle/sealed/car/attack_hand(mob/living/user) + . = ..() + if(!(car_traits & CAN_KIDNAP)) + return + to_chat(user, "You start opening [src]'s trunk.") + if(do_after(user, 30)) + if(return_amount_of_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED)) + to_chat(user, "The people stuck in [src]'s trunk all come tumbling out.") + DumpSpecificMobs(VEHICLE_CONTROL_KIDNAPPED) + else + to_chat(user, "It seems [src]'s trunk was empty.") + +/obj/vehicle/sealed/car/proc/mob_try_forced_enter(mob/forcer, mob/M, silent = FALSE) + if(!istype(M)) + return FALSE + if(occupant_amount() >= max_occupants) + return FALSE + if(do_mob(forcer, get_enter_delay(M), target = src)) + mob_forced_enter(M, silent) + return TRUE + return FALSE + +/obj/vehicle/sealed/car/proc/mob_forced_enter(mob/M, silent = FALSE) + if(!silent) + M.visible_message("[M] is forced into \the [src]!") + M.forceMove(src) + add_occupant(M, VEHICLE_CONTROL_KIDNAPPED) diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm new file mode 100644 index 00000000000..a0621a43376 --- /dev/null +++ b/code/modules/vehicles/cars/clowncar.dm @@ -0,0 +1,53 @@ +/obj/vehicle/sealed/car/clowncar + name = "clown car" + desc = "How someone could even fit in there is beyond me." + icon_state = "clowncar" + max_integrity = 500 + armor = list("melee" = 70, "bullet" = 40, "laser" = 40, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + enter_delay = 20 + max_occupants = 50 + movedelay = 0.6 + car_traits = CAN_KIDNAP + key_type = /obj/item/bikehorn + key_type_exact = FALSE + +/obj/vehicle/sealed/car/clowncar/generate_actions() + . = ..() + initialize_controller_action_type(/datum/action/vehicle/sealed/horn/clowncar, VEHICLE_CONTROL_DRIVE) + +/obj/vehicle/sealed/car/clowncar/auto_assign_occupant_flags(mob/M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.mind && H.mind.assigned_role == "Clown") //Ensures only clowns can drive the car. (Including more at once) + add_control_flags(M, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_PERMISSION) + return + add_control_flags(M, VEHICLE_CONTROL_KIDNAPPED) + +/obj/vehicle/sealed/car/clowncar/mob_forced_enter(mob/M, silent = FALSE) + . = ..() + playsound(src, pick('sound/vehicles/clowncar_load1.ogg', 'sound/vehicles/clowncar_load2.ogg'), 75) + +/obj/vehicle/sealed/car/clowncar/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + if(prob(33)) + visible_message("[src] spews out a ton of space lube!/span>/span>") + new /obj/effect/particle_effect/foam(loc) //YEET + +/obj/vehicle/sealed/car/clowncar/Bump(atom/movable/M) + ..() + if(iscarbon(M)) + var/mob/living/carbon/C = M + C.Knockdown(50) + C.visible_message("[src] rams into [C] and sucks him up!") //fuck off shezza this isn't ERP. + mob_forced_enter(C) + + playsound(src, pick('sound/vehicles/clowncar_ram1.ogg', 'sound/vehicles/clowncar_ram2.ogg', 'sound/vehicles/clowncar_ram3.ogg'), 75) + else if(istype(M, /turf/closed)) + visible_message("[src] rams into [M] and crashes!") + playsound(src, pick('sound/vehicles/clowncar_crash1.ogg', 'sound/vehicles/clowncar_crash2.ogg'), 75) + playsound(src, 'sound/vehicles/clowncar_crashpins.ogg', 75) + DumpMobs(TRUE) + +/obj/vehicle/sealed/car/clowncar/deconstruct(disassembled = TRUE) + . = ..() + playsound(src, 'sound/vehicles/clowncar_fart.ogg', 100) diff --git a/code/modules/vehicles/entered.dm b/code/modules/vehicles/entered.dm index d0fb93f7f04..f25de2d89fc 100644 --- a/code/modules/vehicles/entered.dm +++ b/code/modules/vehicles/entered.dm @@ -35,22 +35,73 @@ if(!istype(M)) return FALSE if(!silent) - M.visible_message("[M] climbs into \the [src]!") + M.visible_message("[M] climbs into \the [src]!") M.forceMove(src) add_occupant(M) return TRUE -/obj/vehicle/sealed/proc/mob_try_exit(mob/M, mob/user, silent = FALSE) - mob_exit(M, silent) +/obj/vehicle/sealed/proc/mob_try_exit(mob/M, mob/user, silent = FALSE, randomstep = FALSE) + mob_exit(M, silent, randomstep) -/obj/vehicle/sealed/proc/mob_exit(mob/M, silent = FALSE) +/obj/vehicle/sealed/proc/mob_exit(mob/M, silent = FALSE, randomstep = FALSE) if(!istype(M)) return FALSE remove_occupant(M) M.forceMove(exit_location(M)) + if(randomstep) + var/turf/target_turf = get_step(exit_location(M), pick(GLOB.cardinals)) + M.throw_at(target_turf, 5, 10) + if(!silent) - M.visible_message("[M] drops out of \the [src]!") + M.visible_message("[M] drops out of \the [src]!") return TRUE /obj/vehicle/sealed/proc/exit_location(M) return drop_location() + +/obj/vehicle/sealed/attackby(obj/item/I, mob/user, params) + if(key_type && !is_key(inserted_key) && is_key(I)) + if(user.transferItemToLoc(I, src)) + to_chat(user, "You insert [I] into [src].") + if(inserted_key) //just in case there's an invalid key + inserted_key.forceMove(drop_location()) + inserted_key = I + else + to_chat(user, "[I] seems to be stuck to your hand!") + return + return ..() + +/obj/vehicle/sealed/proc/remove_key(mob/user) + if(!inserted_key) + to_chat(user, "There is no key in [src]!") + return + if(!is_occupant(user) || !(occupants[user] & VEHICLE_CONTROL_DRIVE)) + to_chat(user, "You must be driving [src] to remove [src]'s key!") + return + to_chat(user, "You remove [inserted_key] from [src].") + inserted_key.forceMove(drop_location()) + user.put_in_hands(inserted_key) + inserted_key = null + +/obj/vehicle/sealed/deconstruct(disassembled = TRUE) + . = ..() + DumpMobs() + explosion(loc, 0, 1, 2, 3, 0) + +/obj/vehicle/sealed/proc/DumpMobs(randomstep = TRUE) + for(var/i in occupants) + if(iscarbon(i)) + var/mob/living/carbon/Carbon = i + mob_exit(Carbon, null, randomstep) + Carbon.Knockdown(40) + +/obj/vehicle/sealed/proc/DumpSpecificMobs(flag, randomstep = TRUE) + for(var/i in occupants) + if((occupants[i] & flag) && iscarbon(i)) + var/mob/living/carbon/C = i + mob_exit(C, null, randomstep) + C.Knockdown(40) + + +/obj/vehicle/sealed/AllowDrop() + return FALSE \ No newline at end of file diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm index 905be5b3ba1..82d64de41d3 100644 --- a/code/modules/vehicles/vehicle_actions.dm +++ b/code/modules/vehicles/vehicle_actions.dm @@ -103,6 +103,7 @@ /datum/action/vehicle/sealed/climb_out name = "Climb Out" desc = "Climb out of your vehicle!" + button_icon_state = "car_eject" /datum/action/vehicle/sealed/climb_out/Trigger() if(..() && istype(vehicle_entered_target)) @@ -110,3 +111,45 @@ /datum/action/vehicle/ridden var/obj/vehicle/ridden/vehicle_ridden_target + +/datum/action/vehicle/sealed/remove_key + name = "Remove key" + desc = "Take your key out of the vehicle's ignition" + button_icon_state = "car_removekey" + +/datum/action/vehicle/sealed/remove_key/Trigger() + vehicle_entered_target.remove_key(owner) + +//CLOWN CAR ACTION DATUMS +/datum/action/vehicle/sealed/horn + name = "Honk Horn" + desc = "Honk your classy horn." + button_icon_state = "car_horn" + var/hornsound = 'sound/items/carhorn.ogg' + var/last_honk_time + +/datum/action/vehicle/sealed/horn/Trigger() + if(world.time - last_honk_time > 20) + vehicle_entered_target.visible_message("[vehicle_entered_target] loudly honks") + to_chat(owner, "You press the vehicle's horn.") + playsound(vehicle_entered_target, hornsound, 75) + last_honk_time = world.time + +/datum/action/vehicle/sealed/horn/clowncar/Trigger() + if(world.time - last_honk_time > 20) + vehicle_entered_target.visible_message("[vehicle_entered_target] loudly honks") + to_chat(owner, "You press the vehicle's horn.") + last_honk_time = world.time + if(vehicle_target.inserted_key) + vehicle_target.inserted_key.attack_self(owner) //The key plays a sound + else + playsound(vehicle_entered_target, hornsound, 75) + +/datum/action/vehicle/sealed/DumpKidnappedMobs + name = "Dump kidnapped mobs" + desc = "Dump all objects and people in your car on the floor." + button_icon_state = "car_dump" + +/datum/action/vehicle/sealed/DumpKidnappedMobs/Trigger() + vehicle_entered_target.visible_message("[vehicle_entered_target] starts dumping the people inside of it.") + vehicle_entered_target.DumpSpecificMobs(VEHICLE_CONTROL_KIDNAPPED) diff --git a/html/browser/common.css b/html/browser/common.css index 5f74c5581f4..0883a2df92f 100644 --- a/html/browser/common.css +++ b/html/browser/common.css @@ -396,3 +396,17 @@ ul.sparse { .slider.round:before { border-radius: 50%; } + +.severity { + margin:0px; + padding: 1px 8px 1px 8px; + border-radius: 25px; + border: 1px solid #161616; + background: #40628a; + color: #ffffff; +} + +.severity img { + display: inline-block; + vertical-align: middle; +} diff --git a/html/changelog.html b/html/changelog.html index e19cd0a6a82..69e65414c08 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,34 @@ -->
+

26 August 2018

+

Floyd / Qustinnus (Credits to KMC for the sprites) updated:

+
    +
  • The Clown Car, your 18TC clown-only solution to asshole co-workers
  • +
  • Regular car implementation (makes it easier to add more cars if someone actually feels like adding those)
  • +
+

JJRcop updated:

+
    +
  • Asay logs show "ADMINPRIVATE: ASAY:" again instead of just "ADMINPRIVATE:"
  • +
+

Naksu updated:

+
    +
  • living and stack typecaches now use a shared instance where it makes sense, giving small memory savings
  • +
+

SpaceManiac updated:

+
    +
  • The shuttle manipulator now allows flying any shuttle to any port which will fit it.
  • +
  • The shuttle manipulator now allows fast-travelling shuttles with 5s remaining, down from 50s.
  • +
+

intrnlerr updated:

+
    +
  • Refactored nettles to be reagent_containers
  • +
+

nicbn updated:

+
    +
  • Nanotrasen shoes no longer contain Silencium. Now footsteps make noise! Sounds from Baystation.
  • +
+

25 August 2018

Denton updated:

    @@ -1483,29 +1511,6 @@
    • You should now receive your destroy AI objectives properly during IAA
    - -

    24 June 2018

    -

    CitrusGender updated:

    -
      -
    • Fixed cyborgs not getting their names at round start
    • -
    • Fixed cyborgs and A.I.s being able to bypass appearance bans
    • -
    -

    SpaceManiac updated:

    -
      -
    • The "Save Logs" option in the chat now actually works (IE 10+ only).
    • -
    -

    Time-Green updated:

    -
      -
    • Soda is no longer intangible to the laws of physics
    • -
    -

    cinder1992 updated:

    -
      -
    • The Captain can now go down with their station in style! Suicide animation added to the Officer's Sabre.
    • -
    -

    kevinz000 updated:

    -
      -
    • Cyborgs now drop keys on deconstruction/detonation
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 8f75061e400..4480390e69c 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -19724,3 +19724,23 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - code_imp: Refactored gift code to fix a minor inefficiency. XDTM: - bugfix: Fixed chest and head augmentation not working properly. +2018-08-26: + Floyd / Qustinnus (Credits to KMC for the sprites): + - rscadd: The Clown Car, your 18TC clown-only solution to asshole co-workers + - rscadd: Regular car implementation (makes it easier to add more cars if someone + actually feels like adding those) + JJRcop: + - admin: 'Asay logs show "ADMINPRIVATE: ASAY:" again instead of just "ADMINPRIVATE:"' + Naksu: + - code_imp: living and stack typecaches now use a shared instance where it makes + sense, giving small memory savings + SpaceManiac: + - admin: The shuttle manipulator now allows flying any shuttle to any port which + will fit it. + - bugfix: The shuttle manipulator now allows fast-travelling shuttles with 5s remaining, + down from 50s. + intrnlerr: + - refactor: Refactored nettles to be reagent_containers + nicbn: + - soundadd: Nanotrasen shoes no longer contain Silencium. Now footsteps make noise! + Sounds from Baystation. diff --git a/html/changelogs/AutoChangeLog-pr-39632.yml b/html/changelogs/AutoChangeLog-pr-39632.yml new file mode 100644 index 00000000000..d6482c3d595 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-39632.yml @@ -0,0 +1,4 @@ +author: "PKPenguin321" +delete-after: True +changes: + - rscadd: "Integrated circuit medium screens have been readded. They are now called large screens. They now only work from your hands or on the ground when you're standing on top of them (NOT from pockets, lockers, backpacks, etc)." diff --git a/html/changelogs/AutoChangeLog-pr-39808.yml b/html/changelogs/AutoChangeLog-pr-39808.yml new file mode 100644 index 00000000000..d53b034852c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-39808.yml @@ -0,0 +1,7 @@ +author: "CitrusGender" +delete-after: True +changes: + - admin: "Added note severity to [most] bans and the notes associated with them" + - admin: "Banning panel now has a severity option +UI: Changed the UI of the note panel +UI: Changed the UI again, added some icons, removed brackets in urls, fading out notes cannot be selected to expand the browser anymore" diff --git a/html/high_button.png b/html/high_button.png new file mode 100644 index 00000000000..6cbae7271b9 Binary files /dev/null and b/html/high_button.png differ diff --git a/html/medium_button.png b/html/medium_button.png new file mode 100644 index 00000000000..7a9fc286fdc Binary files /dev/null and b/html/medium_button.png differ diff --git a/html/minor_button.png b/html/minor_button.png new file mode 100644 index 00000000000..ae141e16443 Binary files /dev/null and b/html/minor_button.png differ diff --git a/html/none_button.png b/html/none_button.png new file mode 100644 index 00000000000..2438f2c926b Binary files /dev/null and b/html/none_button.png differ diff --git a/icons/mob/actions/actions_vehicle.dmi b/icons/mob/actions/actions_vehicle.dmi index 62b995ef9bc..c8044ec51f9 100644 Binary files a/icons/mob/actions/actions_vehicle.dmi and b/icons/mob/actions/actions_vehicle.dmi differ diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index 873f16fa612..5e3757cedd2 100644 Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ diff --git a/sound/effects/footstep/asteroid1.ogg b/sound/effects/footstep/asteroid1.ogg new file mode 100644 index 00000000000..1cb215dc782 Binary files /dev/null and b/sound/effects/footstep/asteroid1.ogg differ diff --git a/sound/effects/footstep/asteroid2.ogg b/sound/effects/footstep/asteroid2.ogg new file mode 100644 index 00000000000..331d0ef2417 Binary files /dev/null and b/sound/effects/footstep/asteroid2.ogg differ diff --git a/sound/effects/footstep/asteroid3.ogg b/sound/effects/footstep/asteroid3.ogg new file mode 100644 index 00000000000..90fbf251a0e Binary files /dev/null and b/sound/effects/footstep/asteroid3.ogg differ diff --git a/sound/effects/footstep/asteroid4.ogg b/sound/effects/footstep/asteroid4.ogg new file mode 100644 index 00000000000..186ff17a439 Binary files /dev/null and b/sound/effects/footstep/asteroid4.ogg differ diff --git a/sound/effects/footstep/asteroid5.ogg b/sound/effects/footstep/asteroid5.ogg new file mode 100644 index 00000000000..0ea4c962d0d Binary files /dev/null and b/sound/effects/footstep/asteroid5.ogg differ diff --git a/sound/effects/footstep/carpet1.ogg b/sound/effects/footstep/carpet1.ogg new file mode 100644 index 00000000000..2735a9bf3dc Binary files /dev/null and b/sound/effects/footstep/carpet1.ogg differ diff --git a/sound/effects/footstep/carpet2.ogg b/sound/effects/footstep/carpet2.ogg new file mode 100644 index 00000000000..07e5f2320aa Binary files /dev/null and b/sound/effects/footstep/carpet2.ogg differ diff --git a/sound/effects/footstep/carpet3.ogg b/sound/effects/footstep/carpet3.ogg new file mode 100644 index 00000000000..edb0193f6e2 Binary files /dev/null and b/sound/effects/footstep/carpet3.ogg differ diff --git a/sound/effects/footstep/carpet4.ogg b/sound/effects/footstep/carpet4.ogg new file mode 100644 index 00000000000..c9598e2b736 Binary files /dev/null and b/sound/effects/footstep/carpet4.ogg differ diff --git a/sound/effects/footstep/carpet5.ogg b/sound/effects/footstep/carpet5.ogg new file mode 100644 index 00000000000..076818323ae Binary files /dev/null and b/sound/effects/footstep/carpet5.ogg differ diff --git a/sound/effects/footstep/catwalk1.ogg b/sound/effects/footstep/catwalk1.ogg new file mode 100644 index 00000000000..5d6ad7b4a00 Binary files /dev/null and b/sound/effects/footstep/catwalk1.ogg differ diff --git a/sound/effects/footstep/catwalk2.ogg b/sound/effects/footstep/catwalk2.ogg new file mode 100644 index 00000000000..07a624dbe49 Binary files /dev/null and b/sound/effects/footstep/catwalk2.ogg differ diff --git a/sound/effects/footstep/catwalk3.ogg b/sound/effects/footstep/catwalk3.ogg new file mode 100644 index 00000000000..acff22e3864 Binary files /dev/null and b/sound/effects/footstep/catwalk3.ogg differ diff --git a/sound/effects/footstep/catwalk4.ogg b/sound/effects/footstep/catwalk4.ogg new file mode 100644 index 00000000000..7235a6b9feb Binary files /dev/null and b/sound/effects/footstep/catwalk4.ogg differ diff --git a/sound/effects/footstep/catwalk5.ogg b/sound/effects/footstep/catwalk5.ogg new file mode 100644 index 00000000000..c33f248acd6 Binary files /dev/null and b/sound/effects/footstep/catwalk5.ogg differ diff --git a/sound/effects/footstep/floor1.ogg b/sound/effects/footstep/floor1.ogg new file mode 100644 index 00000000000..1e3e1558399 Binary files /dev/null and b/sound/effects/footstep/floor1.ogg differ diff --git a/sound/effects/footstep/floor2.ogg b/sound/effects/footstep/floor2.ogg new file mode 100644 index 00000000000..cce5a25d829 Binary files /dev/null and b/sound/effects/footstep/floor2.ogg differ diff --git a/sound/effects/footstep/floor3.ogg b/sound/effects/footstep/floor3.ogg new file mode 100644 index 00000000000..16ab67f729c Binary files /dev/null and b/sound/effects/footstep/floor3.ogg differ diff --git a/sound/effects/footstep/floor4.ogg b/sound/effects/footstep/floor4.ogg new file mode 100644 index 00000000000..9ef15430ff8 Binary files /dev/null and b/sound/effects/footstep/floor4.ogg differ diff --git a/sound/effects/footstep/floor5.ogg b/sound/effects/footstep/floor5.ogg new file mode 100644 index 00000000000..0f6a66057de Binary files /dev/null and b/sound/effects/footstep/floor5.ogg differ diff --git a/sound/effects/footstep/grass1.ogg b/sound/effects/footstep/grass1.ogg new file mode 100644 index 00000000000..357547cd77a Binary files /dev/null and b/sound/effects/footstep/grass1.ogg differ diff --git a/sound/effects/footstep/grass2.ogg b/sound/effects/footstep/grass2.ogg new file mode 100644 index 00000000000..75bf8657e8d Binary files /dev/null and b/sound/effects/footstep/grass2.ogg differ diff --git a/sound/effects/footstep/grass3.ogg b/sound/effects/footstep/grass3.ogg new file mode 100644 index 00000000000..04f82872b1d Binary files /dev/null and b/sound/effects/footstep/grass3.ogg differ diff --git a/sound/effects/footstep/grass4.ogg b/sound/effects/footstep/grass4.ogg new file mode 100644 index 00000000000..6d736f2fb2d Binary files /dev/null and b/sound/effects/footstep/grass4.ogg differ diff --git a/sound/effects/footstep/lava1.ogg b/sound/effects/footstep/lava1.ogg new file mode 100644 index 00000000000..e26dbaf8bda Binary files /dev/null and b/sound/effects/footstep/lava1.ogg differ diff --git a/sound/effects/footstep/lava2.ogg b/sound/effects/footstep/lava2.ogg new file mode 100644 index 00000000000..90b73f840b2 Binary files /dev/null and b/sound/effects/footstep/lava2.ogg differ diff --git a/sound/effects/footstep/lava3.ogg b/sound/effects/footstep/lava3.ogg new file mode 100644 index 00000000000..34363815106 Binary files /dev/null and b/sound/effects/footstep/lava3.ogg differ diff --git a/sound/effects/footstep/plating1.ogg b/sound/effects/footstep/plating1.ogg new file mode 100644 index 00000000000..0df770e6638 Binary files /dev/null and b/sound/effects/footstep/plating1.ogg differ diff --git a/sound/effects/footstep/plating2.ogg b/sound/effects/footstep/plating2.ogg new file mode 100644 index 00000000000..314b9133d25 Binary files /dev/null and b/sound/effects/footstep/plating2.ogg differ diff --git a/sound/effects/footstep/plating3.ogg b/sound/effects/footstep/plating3.ogg new file mode 100644 index 00000000000..5c571d77eb6 Binary files /dev/null and b/sound/effects/footstep/plating3.ogg differ diff --git a/sound/effects/footstep/plating4.ogg b/sound/effects/footstep/plating4.ogg new file mode 100644 index 00000000000..5953262764b Binary files /dev/null and b/sound/effects/footstep/plating4.ogg differ diff --git a/sound/effects/footstep/plating5.ogg b/sound/effects/footstep/plating5.ogg new file mode 100644 index 00000000000..4676a637a6d Binary files /dev/null and b/sound/effects/footstep/plating5.ogg differ diff --git a/sound/effects/footstep/water1.ogg b/sound/effects/footstep/water1.ogg new file mode 100644 index 00000000000..f22cbf28482 Binary files /dev/null and b/sound/effects/footstep/water1.ogg differ diff --git a/sound/effects/footstep/water2.ogg b/sound/effects/footstep/water2.ogg new file mode 100644 index 00000000000..e2a47650c63 Binary files /dev/null and b/sound/effects/footstep/water2.ogg differ diff --git a/sound/effects/footstep/water3.ogg b/sound/effects/footstep/water3.ogg new file mode 100644 index 00000000000..97ce152a5ce Binary files /dev/null and b/sound/effects/footstep/water3.ogg differ diff --git a/sound/effects/footstep/water4.ogg b/sound/effects/footstep/water4.ogg new file mode 100644 index 00000000000..5778a52560d Binary files /dev/null and b/sound/effects/footstep/water4.ogg differ diff --git a/sound/effects/footstep/wood1.ogg b/sound/effects/footstep/wood1.ogg new file mode 100644 index 00000000000..c76fc423fc2 Binary files /dev/null and b/sound/effects/footstep/wood1.ogg differ diff --git a/sound/effects/footstep/wood2.ogg b/sound/effects/footstep/wood2.ogg new file mode 100644 index 00000000000..71dc1aa9679 Binary files /dev/null and b/sound/effects/footstep/wood2.ogg differ diff --git a/sound/effects/footstep/wood3.ogg b/sound/effects/footstep/wood3.ogg new file mode 100644 index 00000000000..bf86889006e Binary files /dev/null and b/sound/effects/footstep/wood3.ogg differ diff --git a/sound/effects/footstep/wood4.ogg b/sound/effects/footstep/wood4.ogg new file mode 100644 index 00000000000..44734425ce6 Binary files /dev/null and b/sound/effects/footstep/wood4.ogg differ diff --git a/sound/effects/footstep/wood5.ogg b/sound/effects/footstep/wood5.ogg new file mode 100644 index 00000000000..5ad4fa81e77 Binary files /dev/null and b/sound/effects/footstep/wood5.ogg differ diff --git a/sound/vehicles/carrev.ogg b/sound/vehicles/carrev.ogg new file mode 100644 index 00000000000..ef03830d32f Binary files /dev/null and b/sound/vehicles/carrev.ogg differ diff --git a/sound/vehicles/clowncar_crash1.ogg b/sound/vehicles/clowncar_crash1.ogg new file mode 100644 index 00000000000..34a6c0c7c76 Binary files /dev/null and b/sound/vehicles/clowncar_crash1.ogg differ diff --git a/sound/vehicles/clowncar_crash2.ogg b/sound/vehicles/clowncar_crash2.ogg new file mode 100644 index 00000000000..5bcbd326104 Binary files /dev/null and b/sound/vehicles/clowncar_crash2.ogg differ diff --git a/sound/vehicles/clowncar_crashpins.ogg b/sound/vehicles/clowncar_crashpins.ogg new file mode 100644 index 00000000000..7503c8caf2d Binary files /dev/null and b/sound/vehicles/clowncar_crashpins.ogg differ diff --git a/sound/vehicles/clowncar_fart.ogg b/sound/vehicles/clowncar_fart.ogg new file mode 100644 index 00000000000..05d9d546387 Binary files /dev/null and b/sound/vehicles/clowncar_fart.ogg differ diff --git a/sound/vehicles/clowncar_load1.ogg b/sound/vehicles/clowncar_load1.ogg new file mode 100644 index 00000000000..2adb41129f6 Binary files /dev/null and b/sound/vehicles/clowncar_load1.ogg differ diff --git a/sound/vehicles/clowncar_load2.ogg b/sound/vehicles/clowncar_load2.ogg new file mode 100644 index 00000000000..5315e1f3b33 Binary files /dev/null and b/sound/vehicles/clowncar_load2.ogg differ diff --git a/sound/vehicles/clowncar_ram1.ogg b/sound/vehicles/clowncar_ram1.ogg new file mode 100644 index 00000000000..86e0653a2df Binary files /dev/null and b/sound/vehicles/clowncar_ram1.ogg differ diff --git a/sound/vehicles/clowncar_ram2.ogg b/sound/vehicles/clowncar_ram2.ogg new file mode 100644 index 00000000000..88b54155853 Binary files /dev/null and b/sound/vehicles/clowncar_ram2.ogg differ diff --git a/sound/vehicles/clowncar_ram3.ogg b/sound/vehicles/clowncar_ram3.ogg new file mode 100644 index 00000000000..a19bda8a4c2 Binary files /dev/null and b/sound/vehicles/clowncar_ram3.ogg differ diff --git a/sound/voice/bcreep.ogg b/sound/voice/beepsky/creep.ogg similarity index 100% rename from sound/voice/bcreep.ogg rename to sound/voice/beepsky/creep.ogg diff --git a/sound/voice/bcriminal.ogg b/sound/voice/beepsky/criminal.ogg similarity index 100% rename from sound/voice/bcriminal.ogg rename to sound/voice/beepsky/criminal.ogg diff --git a/sound/voice/bfreeze.ogg b/sound/voice/beepsky/freeze.ogg similarity index 100% rename from sound/voice/bfreeze.ogg rename to sound/voice/beepsky/freeze.ogg diff --git a/sound/voice/bgod.ogg b/sound/voice/beepsky/god.ogg similarity index 100% rename from sound/voice/bgod.ogg rename to sound/voice/beepsky/god.ogg diff --git a/sound/voice/biamthelaw.ogg b/sound/voice/beepsky/iamthelaw.ogg similarity index 100% rename from sound/voice/biamthelaw.ogg rename to sound/voice/beepsky/iamthelaw.ogg diff --git a/sound/voice/binsult.ogg b/sound/voice/beepsky/insult.ogg similarity index 100% rename from sound/voice/binsult.ogg rename to sound/voice/beepsky/insult.ogg diff --git a/sound/voice/bjustice.ogg b/sound/voice/beepsky/justice.ogg similarity index 100% rename from sound/voice/bjustice.ogg rename to sound/voice/beepsky/justice.ogg diff --git a/sound/voice/bradio.ogg b/sound/voice/beepsky/radio.ogg similarity index 100% rename from sound/voice/bradio.ogg rename to sound/voice/beepsky/radio.ogg diff --git a/sound/voice/bsecureday.ogg b/sound/voice/beepsky/secureday.ogg similarity index 100% rename from sound/voice/bsecureday.ogg rename to sound/voice/beepsky/secureday.ogg diff --git a/sound/voice/mapple.ogg b/sound/voice/medbot/apple.ogg similarity index 100% rename from sound/voice/mapple.ogg rename to sound/voice/medbot/apple.ogg diff --git a/sound/voice/mcatch.ogg b/sound/voice/medbot/catch.ogg similarity index 100% rename from sound/voice/mcatch.ogg rename to sound/voice/medbot/catch.ogg diff --git a/sound/voice/mcoming.ogg b/sound/voice/medbot/coming.ogg similarity index 100% rename from sound/voice/mcoming.ogg rename to sound/voice/medbot/coming.ogg diff --git a/sound/voice/mdelicious.ogg b/sound/voice/medbot/delicious.ogg similarity index 100% rename from sound/voice/mdelicious.ogg rename to sound/voice/medbot/delicious.ogg diff --git a/sound/voice/mfeelbetter.ogg b/sound/voice/medbot/feelbetter.ogg similarity index 100% rename from sound/voice/mfeelbetter.ogg rename to sound/voice/medbot/feelbetter.ogg diff --git a/sound/voice/mflies.ogg b/sound/voice/medbot/flies.ogg similarity index 100% rename from sound/voice/mflies.ogg rename to sound/voice/medbot/flies.ogg diff --git a/sound/voice/mhelp.ogg b/sound/voice/medbot/help.ogg similarity index 100% rename from sound/voice/mhelp.ogg rename to sound/voice/medbot/help.ogg diff --git a/sound/voice/minjured.ogg b/sound/voice/medbot/injured.ogg similarity index 100% rename from sound/voice/minjured.ogg rename to sound/voice/medbot/injured.ogg diff --git a/sound/voice/minsult.ogg b/sound/voice/medbot/insult.ogg similarity index 100% rename from sound/voice/minsult.ogg rename to sound/voice/medbot/insult.ogg diff --git a/sound/voice/mlive.ogg b/sound/voice/medbot/live.ogg similarity index 100% rename from sound/voice/mlive.ogg rename to sound/voice/medbot/live.ogg diff --git a/sound/voice/mlost.ogg b/sound/voice/medbot/lost.ogg similarity index 100% rename from sound/voice/mlost.ogg rename to sound/voice/medbot/lost.ogg diff --git a/sound/voice/mno.ogg b/sound/voice/medbot/no.ogg similarity index 100% rename from sound/voice/mno.ogg rename to sound/voice/medbot/no.ogg diff --git a/sound/voice/mpatchedup.ogg b/sound/voice/medbot/patchedup.ogg similarity index 100% rename from sound/voice/mpatchedup.ogg rename to sound/voice/medbot/patchedup.ogg diff --git a/sound/voice/mradar.ogg b/sound/voice/medbot/radar.ogg similarity index 100% rename from sound/voice/mradar.ogg rename to sound/voice/medbot/radar.ogg diff --git a/sound/voice/msurgeon.ogg b/sound/voice/medbot/surgeon.ogg similarity index 100% rename from sound/voice/msurgeon.ogg rename to sound/voice/medbot/surgeon.ogg diff --git a/tgstation.dme b/tgstation.dme index c3b3499e3b4..78c3aca2ff2 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -43,6 +43,7 @@ #include "code\__DEFINES\exports.dm" #include "code\__DEFINES\flags.dm" #include "code\__DEFINES\food.dm" +#include "code\__DEFINES\footsteps.dm" #include "code\__DEFINES\forensics.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\integrated_electronics.dm" @@ -97,6 +98,7 @@ #include "code\__DEFINES\traits.dm" #include "code\__DEFINES\turf_flags.dm" #include "code\__DEFINES\typeids.dm" +#include "code\__DEFINES\vehicles.dm" #include "code\__DEFINES\vv.dm" #include "code\__DEFINES\wall_dents.dm" #include "code\__DEFINES\wires.dm" @@ -330,6 +332,7 @@ #include "code\datums\components\earprotection.dm" #include "code\datums\components\edit_complainer.dm" #include "code\datums\components\empprotection.dm" +#include "code\datums\components\footstep.dm" #include "code\datums\components\forced_gravity.dm" #include "code\datums\components\forensics.dm" #include "code\datums\components\infective.dm" @@ -2653,6 +2656,8 @@ #include "code\modules\vehicles\speedbike.dm" #include "code\modules\vehicles\vehicle_actions.dm" #include "code\modules\vehicles\vehicle_key.dm" +#include "code\modules\vehicles\cars\car.dm" +#include "code\modules\vehicles\cars\clowncar.dm" #include "code\modules\vending\_vending.dm" #include "code\modules\vending\assist.dm" #include "code\modules\vending\autodrobe.dm" diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index d09fb450590..bd6cc43299b 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,20 +1,20 @@ -require=function(){function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var p="function"==typeof require&&require;if(!s&&p)return p(o,!0);if(i)return i(o,!0);var u=Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n||t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?arguments[2]:void 0,c=Math.min((void 0===u?o:r(u,o))-p,o-s),l=1;for(s>p&&p+c>s&&(l=-1,p+=c-1,s+=c-1);c-- >0;)p in n?n[s]=n[p]:delete n[s],s+=l,p+=l;return n}},{111:111,115:115,116:116}],9:[function(t,e,n){"use strict";var a=t(116),r=t(111),i=t(115);e.exports=function(t){for(var e=a(this),n=i(e.length),o=arguments.length,s=r(o>1?arguments[1]:void 0,n),p=o>2?arguments[2]:void 0,u=void 0===p?n:r(p,n);u>s;)e[s++]=t;return e}},{111:111,115:115,116:116}],10:[function(t,e,n){var a=t(39);e.exports=function(t,e){var n=[];return a(t,!1,n.push,n,e),n}},{39:39}],11:[function(t,e,n){var a=t(114),r=t(115),i=t(111);e.exports=function(t){return function(e,n,o){var s,p=a(e),u=r(p.length),c=i(o,u);if(t&&n!=n){for(;u>c;)if(s=p[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in p)&&p[c]===n)return t||c||0;return!t&&-1}}},{111:111,114:114,115:115}],12:[function(t,e,n){var a=t(25),r=t(47),i=t(116),o=t(115),s=t(15);e.exports=function(t,e){var n=1==t,p=2==t,u=3==t,c=4==t,l=6==t,d=5==t||l,f=e||s;return function(e,s,h){for(var m,g,v=i(e),b=r(v),y=a(s,h,3),_=o(b.length),x=0,w=n?f(e,_):p?f(e,0):void 0;_>x;x++)if((d||x in b)&&(m=b[x],g=y(m,x,v),t))if(n)w[x]=g;else if(g)switch(t){case 3:return!0;case 5:return m;case 6:return x;case 2:w.push(m)}else if(c)return!1;return l?-1:u||c?c:w}}},{115:115,116:116,15:15,25:25,47:47}],13:[function(t,e,n){var a=t(3),r=t(116),i=t(47),o=t(115);e.exports=function(t,e,n,s,p){a(e);var u=r(t),c=i(u),l=o(u.length),d=p?l-1:0,f=p?-1:1;if(2>n)for(;;){if(d in c){s=c[d],d+=f;break}if(d+=f,p?0>d:d>=l)throw TypeError("Reduce of empty array with no initial value")}for(;p?d>=0:l>d;d+=f)d in c&&(s=e(s,c[d],d,u));return s}},{115:115,116:116,3:3,47:47}],14:[function(t,e,n){var a=t(51),r=t(49),i=t(126)("species");e.exports=function(t){var e;return r(t)&&(e=t.constructor,"function"!=typeof e||e!==Array&&!r(e.prototype)||(e=void 0),a(e)&&(e=e[i],null===e&&(e=void 0))),void 0===e?Array:e}},{126:126,49:49,51:51}],15:[function(t,e,n){var a=t(14);e.exports=function(t,e){return new(a(t))(e)}},{14:14}],16:[function(t,e,n){"use strict";var a=t(3),r=t(51),i=t(46),o=[].slice,s={},p=function(t,e,n){if(!(e in s)){for(var a=[],r=0;e>r;r++)a[r]="a["+r+"]";s[e]=Function("F,a","return new F("+a.join(",")+")")}return s[e](t,n)};e.exports=Function.bind||function(t){var e=a(this),n=o.call(arguments,1),s=function(){var a=n.concat(o.call(arguments));return this instanceof s?p(e,a.length,a):i(e,a,t)};return r(e.prototype)&&(s.prototype=e.prototype),s}},{3:3,46:46,51:51}],17:[function(t,e,n){var a=t(18),r=t(126)("toStringTag"),i="Arguments"==a(function(){return arguments}()),o=function(t,e){try{return t[e]}catch(n){}};e.exports=function(t){var e,n,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=o(e=Object(t),r))?n:i?a(e):"Object"==(s=a(e))&&"function"==typeof e.callee?"Arguments":s}},{126:126,18:18}],18:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],19:[function(t,e,n){"use strict";var a=t(71).f,r=t(70),i=t(90),o=t(25),s=t(6),p=t(39),u=t(55),c=t(57),l=t(97),d=t(29),f=t(65).fastKey,h=t(123),m=d?"_s":"size",g=function(t,e){var n,a=f(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,u){var c=t(function(t,a){s(t,c,e,"_i"),t._t=e,t._i=r(null),t._f=void 0,t._l=void 0,t[m]=0,void 0!=a&&p(a,n,t[u],t)});return i(c.prototype,{clear:function(){for(var t=h(this,e),n=t._i,a=t._f;a;a=a.n)a.r=!0,a.p&&(a.p=a.p.n=void 0),delete n[a.i];t._f=t._l=void 0,t[m]=0},"delete":function(t){var n=h(this,e),a=g(n,t);if(a){var r=a.n,i=a.p;delete n._i[a.i],a.r=!0,i&&(i.n=r),r&&(r.p=i),n._f==a&&(n._f=r),n._l==a&&(n._l=i),n[m]--}return!!a},forEach:function(t){h(this,e);for(var n,a=o(t,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(a(n.v,n.k,this);n&&n.r;)n=n.p},has:function(t){return!!g(h(this,e),t)}}),d&&a(c.prototype,"size",{get:function(){return h(this,e)[m]}}),c},def:function(t,e,n){var a,r,i=g(t,e);return i?i.v=n:(t._l=i={i:r=f(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[m]++,"F"!==r&&(t._i[r]=i)),t},getEntry:g,setStrong:function(t,e,n){u(t,e,function(t,n){this._t=h(t,e),this._k=n,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?c(0,n.k):"values"==e?c(0,n.v):c(0,[n.k,n.v]):(t._t=void 0,c(1))},n?"entries":"values",!n,!0),l(e)}}},{123:123,25:25,29:29,39:39,55:55,57:57,6:6,65:65,70:70,71:71,90:90,97:97}],20:[function(t,e,n){var a=t(17),r=t(10);e.exports=function(t){return function(){if(a(this)!=t)throw TypeError(t+"#toJSON isn't generic");return r(this)}}},{10:10,17:17}],21:[function(t,e,n){"use strict";var a=t(90),r=t(65).getWeak,i=t(7),o=t(51),s=t(6),p=t(39),u=t(12),c=t(41),l=t(123),d=u(5),f=u(6),h=0,m=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},v=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=v(this,t);return e?e[1]:void 0},has:function(t){return!!v(this,t)},set:function(t,e){var n=v(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=f(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,i){var u=t(function(t,a){s(t,u,e,"_i"),t._t=e,t._i=h++,t._l=void 0,void 0!=a&&p(a,n,t[i],t)});return a(u.prototype,{"delete":function(t){if(!o(t))return!1;var n=r(t);return n===!0?m(l(this,e))["delete"](t):n&&c(n,this._i)&&delete n[this._i]},has:function(t){if(!o(t))return!1;var n=r(t);return n===!0?m(l(this,e)).has(t):n&&c(n,this._i)}}),u},def:function(t,e,n){var a=r(i(e),!0);return a===!0?m(t).set(e,n):a[t._i]=n,t},ufstore:m}},{12:12,123:123,39:39,41:41,51:51,6:6,65:65,7:7,90:90}],22:[function(t,e,n){"use strict";var a=t(40),r=t(33),i=t(91),o=t(90),s=t(65),p=t(39),u=t(6),c=t(51),l=t(35),d=t(56),f=t(98),h=t(45);e.exports=function(t,e,n,m,g,v){var b=a[t],y=b,_=g?"set":"add",x=y&&y.prototype,w={},k=function(t){var e=x[t];i(x,t,"delete"==t?function(t){return v&&!c(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return v&&!c(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return v&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof y&&(v||x.forEach&&!l(function(){(new y).entries().next()}))){var S=new y,E=S[_](v?{}:-0,1)!=S,C=l(function(){S.has(1)}),P=d(function(t){new y(t)}),A=!v&&l(function(){for(var t=new y,e=5;e--;)t[_](e,e);return!t.has(-0)});P||(y=e(function(e,n){u(e,y,t);var a=h(new b,e,y);return void 0!=n&&p(n,g,a[_],a),a}),y.prototype=x,x.constructor=y),(C||A)&&(k("delete"),k("has"),g&&k("get")),(A||E)&&k(_),v&&x.clear&&delete x.clear}else y=m.getConstructor(e,t,g,_),o(y.prototype,n),s.NEED=!0;return f(y,t),w[t]=y,r(r.G+r.W+r.F*(y!=b),w),v||m.setStrong(y,t,g),y}},{33:33,35:35,39:39,40:40,45:45,51:51,56:56,6:6,65:65,90:90,91:91,98:98}],23:[function(t,e,n){var a=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=a)},{}],24:[function(t,e,n){"use strict";var a=t(71),r=t(89);e.exports=function(t,e,n){e in t?a.f(t,e,r(0,n)):t[e]=n}},{71:71,89:89}],25:[function(t,e,n){var a=t(3);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{3:3}],26:[function(t,e,n){"use strict";var a=t(35),r=Date.prototype.getTime,i=Date.prototype.toISOString,o=function(t){return t>9?t:"0"+t};e.exports=a(function(){return"0385-07-25T07:06:39.999Z"!=i.call(new Date(-5e13-1))})||!a(function(){i.call(new Date(NaN))})?function(){if(!isFinite(r.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),a=0>e?"-":e>9999?"+":"";return a+("00000"+Math.abs(e)).slice(a?-6:-4)+"-"+o(t.getUTCMonth()+1)+"-"+o(t.getUTCDate())+"T"+o(t.getUTCHours())+":"+o(t.getUTCMinutes())+":"+o(t.getUTCSeconds())+"."+(n>99?n:"0"+o(n))+"Z"}:i},{35:35}],27:[function(t,e,n){"use strict";var a=t(7),r=t(117),i="number";e.exports=function(t){if("string"!==t&&t!==i&&"default"!==t)throw TypeError("Incorrect hint");return r(a(this),t!=i)}},{117:117,7:7}],28:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],29:[function(t,e,n){e.exports=!t(35)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{35:35}],30:[function(t,e,n){var a=t(51),r=t(40).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{40:40,51:51}],31:[function(t,e,n){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},{}],32:[function(t,e,n){var a=t(80),r=t(77),i=t(81);e.exports=function(t){var e=a(t),n=r.f;if(n)for(var o,s=n(t),p=i.f,u=0;s.length>u;)p.call(t,o=s[u++])&&e.push(o);return e}},{77:77,80:80,81:81}],33:[function(t,e,n){var a=t(40),r=t(23),i=t(42),o=t(91),s=t(25),p="prototype",u=function(t,e,n){var c,l,d,f,h=t&u.F,m=t&u.G,g=t&u.S,v=t&u.P,b=t&u.B,y=m?a:g?a[e]||(a[e]={}):(a[e]||{})[p],_=m?r:r[e]||(r[e]={}),x=_[p]||(_[p]={});m&&(n=e);for(c in n)l=!h&&y&&void 0!==y[c],d=(l?y:n)[c],f=b&&l?s(d,a):v&&"function"==typeof d?s(Function.call,d):d,y&&o(y,c,d,t&u.U),_[c]!=d&&i(_,c,f),v&&x[c]!=d&&(x[c]=d)};a.core=r,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},{23:23,25:25,40:40,42:42,91:91}],34:[function(t,e,n){var a=t(126)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{126:126}],35:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],36:[function(t,e,n){"use strict";var a=t(42),r=t(91),i=t(35),o=t(28),s=t(126);e.exports=function(t,e,n){var p=s(t),u=n(o,p,""[t]),c=u[0],l=u[1];i(function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,c),a(RegExp.prototype,p,2==e?function(t,e){return l.call(t,this,e)}:function(t){return l.call(t,this)}))}},{126:126,28:28,35:35,42:42,91:91}],37:[function(t,e,n){"use strict";var a=t(7);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{7:7}],38:[function(t,e,n){"use strict";function a(t,e,n,u,c,l,d,f){for(var h,m,g=c,v=0,b=d?s(d,f,3):!1;u>v;){if(v in n){if(h=b?b(n[v],v,e):n[v],m=!1,i(h)&&(m=h[p],m=void 0!==m?!!m:r(h)),m&&l>0)g=a(t,e,h,o(h.length),g,l-1)-1;else{if(g>=9007199254740991)throw TypeError();t[g]=h}g++}v++}return g}var r=t(49),i=t(51),o=t(115),s=t(25),p=t(126)("isConcatSpreadable");e.exports=a},{115:115,126:126,25:25,49:49,51:51}],39:[function(t,e,n){var a=t(25),r=t(53),i=t(48),o=t(7),s=t(115),p=t(127),u={},c={},n=e.exports=function(t,e,n,l,d){var f,h,m,g,v=d?function(){return t}:p(t),b=a(n,l,e?2:1),y=0;if("function"!=typeof v)throw TypeError(t+" is not iterable!");if(i(v)){for(f=s(t.length);f>y;y++)if(g=e?b(o(h=t[y])[0],h[1]):b(t[y]),g===u||g===c)return g}else for(m=v.call(t);!(h=m.next()).done;)if(g=r(m,b,h.value,e),g===u||g===c)return g};n.BREAK=u,n.RETURN=c},{115:115,127:127,25:25,48:48,53:53,7:7}],40:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],41:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],42:[function(t,e,n){var a=t(71),r=t(89);e.exports=t(29)?function(t,e,n){return a.f(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{29:29,71:71,89:89}],43:[function(t,e,n){var a=t(40).document;e.exports=a&&a.documentElement},{40:40}],44:[function(t,e,n){e.exports=!t(29)&&!t(35)(function(){return 7!=Object.defineProperty(t(30)("div"),"a",{get:function(){return 7}}).a})},{29:29,30:30,35:35}],45:[function(t,e,n){var a=t(51),r=t(96).set;e.exports=function(t,e,n){var i,o=e.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&a(i)&&r&&r(t,i),t}},{51:51,96:96}],46:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],47:[function(t,e,n){var a=t(18);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{18:18}],48:[function(t,e,n){var a=t(58),r=t(126)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{126:126,58:58}],49:[function(t,e,n){var a=t(18);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{18:18}],50:[function(t,e,n){var a=t(51),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{51:51}],51:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],52:[function(t,e,n){var a=t(51),r=t(18),i=t(126)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{126:126,18:18,51:51}],53:[function(t,e,n){var a=t(7);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{7:7}],54:[function(t,e,n){"use strict";var a=t(70),r=t(89),i=t(98),o={};t(42)(o,t(126)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a(o,{next:r(1,n)}),i(t,e+" Iterator")}},{126:126,42:42,70:70,89:89,98:98}],55:[function(t,e,n){"use strict";var a=t(59),r=t(33),i=t(91),o=t(42),s=t(58),p=t(54),u=t(98),c=t(78),l=t(126)("iterator"),d=!([].keys&&"next"in[].keys()),f="@@iterator",h="keys",m="values",g=function(){return this};e.exports=function(t,e,n,v,b,y,_){p(n,e,v);var x,w,k,S=function(t){if(!d&&t in A)return A[t];switch(t){case h:return function(){return new n(this,t)};case m:return function(){return new n(this,t)}}return function(){return new n(this,t)}},E=e+" Iterator",C=b==m,P=!1,A=t.prototype,O=A[l]||A[f]||b&&A[b],T=O||S(b),R=b?C?S("entries"):T:void 0,M="Array"==e?A.entries||O:O;if(M&&(k=c(M.call(new t)),k!==Object.prototype&&k.next&&(u(k,E,!0),a||"function"==typeof k[l]||o(k,l,g))),C&&O&&O.name!==m&&(P=!0,T=function(){return O.call(this)}),a&&!_||!d&&!P&&A[l]||o(A,l,T),s[e]=T,s[E]=g,b)if(x={values:C?T:S(m),keys:y?T:S(h),entries:R},_)for(w in x)w in A||i(A,w,x[w]);else r(r.P+r.F*(d||P),e,x);return x}},{126:126,33:33,42:42,54:54,58:58,59:59,78:78,91:91,98:98}],56:[function(t,e,n){var a=t(126)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{126:126}],57:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],58:[function(t,e,n){e.exports={}},{}],59:[function(t,e,n){e.exports=!1},{}],60:[function(t,e,n){var a=Math.expm1;e.exports=!a||a(10)>22025.465794806718||a(10)<22025.465794806718||-2e-17!=a(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}:a},{}],61:[function(t,e,n){var a=t(64),r=Math.pow,i=r(2,-52),o=r(2,-23),s=r(2,127)*(2-o),p=r(2,-126),u=function(t){return t+1/i-1/i};e.exports=Math.fround||function(t){var e,n,r=Math.abs(t),c=a(t);return p>r?c*u(r/p/o)*p*o:(e=(1+o/i)*r,n=e-(e-r),n>s||n!=n?c*(1/0):c*n)}},{64:64}],62:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],63:[function(t,e,n){e.exports=Math.scale||function(t,e,n,a,r){return 0===arguments.length||t!=t||e!=e||n!=n||a!=a||r!=r?NaN:t===1/0||t===-(1/0)?t:(t-e)*(r-a)/(n-e)+a}},{}],64:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],65:[function(t,e,n){var a=t(121)("meta"),r=t(51),i=t(41),o=t(71).f,s=0,p=Object.isExtensible||function(){return!0},u=!t(35)(function(){return p(Object.preventExtensions({}))}),c=function(t){o(t,a,{value:{i:"O"+ ++s,w:{}}})},l=function(t,e){if(!r(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!i(t,a)){if(!p(t))return"F";if(!e)return"E";c(t)}return t[a].i},d=function(t,e){if(!i(t,a)){if(!p(t))return!0;if(!e)return!1;c(t)}return t[a].w},f=function(t){return u&&h.NEED&&p(t)&&!i(t,a)&&c(t),t},h=e.exports={KEY:a,NEED:!1,fastKey:l,getWeak:d,onFreeze:f}},{121:121,35:35,41:41,51:51,71:71}],66:[function(t,e,n){var a=t(158),r=t(33),i=t(100)("metadata"),o=i.store||(i.store=new(t(264))),s=function(t,e,n){var r=o.get(t);if(!r){if(!n)return;o.set(t,r=new a)}var i=r.get(e);if(!i){if(!n)return;r.set(e,i=new a)}return i},p=function(t,e,n){var a=s(e,n,!1);return void 0===a?!1:a.has(t)},u=function(t,e,n){var a=s(e,n,!1);return void 0===a?void 0:a.get(t)},c=function(t,e,n,a){s(n,a,!0).set(t,e)},l=function(t,e){var n=s(t,e,!1),a=[];return n&&n.forEach(function(t,e){a.push(e)}),a},d=function(t){return void 0===t||"symbol"==typeof t?t:t+""},f=function(t){r(r.S,"Reflect",t)};e.exports={store:o,map:s,has:p,get:u,set:c,keys:l,key:d,exp:f}},{100:100,158:158,264:264,33:33}],67:[function(t,e,n){var a=t(40),r=t(110).set,i=a.MutationObserver||a.WebKitMutationObserver,o=a.process,s=a.Promise,p="process"==t(18)(o);e.exports=function(){var t,e,n,u=function(){var a,r;for(p&&(a=o.domain)&&a.exit();t;){r=t.fn,t=t.next;try{r()}catch(i){throw t?n():e=void 0,i}}e=void 0,a&&a.enter()};if(p)n=function(){o.nextTick(u)};else if(!i||a.navigator&&a.navigator.standalone)if(s&&s.resolve){var c=s.resolve(void 0);n=function(){c.then(u)}}else n=function(){r.call(a,u)};else{var l=!0,d=document.createTextNode("");new i(u).observe(d,{characterData:!0}),n=function(){d.data=l=!l}}return function(a){var r={fn:a,next:void 0};e&&(e.next=r),t||(t=r,n()),e=r}}},{110:110,18:18,40:40}],68:[function(t,e,n){"use strict";function a(t){var e,n;this.promise=new t(function(t,a){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=a}),this.resolve=r(e),this.reject=r(n)}var r=t(3);e.exports.f=function(t){return new a(t)}},{3:3}],69:[function(t,e,n){"use strict";var a=t(80),r=t(77),i=t(81),o=t(116),s=t(47),p=Object.assign;e.exports=!p||t(35)(function(){var t={},e={},n=Symbol(),a="abcdefghijklmnopqrst";return t[n]=7,a.split("").forEach(function(t){e[t]=t}),7!=p({},t)[n]||Object.keys(p({},e)).join("")!=a})?function(t,e){for(var n=o(t),p=arguments.length,u=1,c=r.f,l=i.f;p>u;)for(var d,f=s(arguments[u++]),h=c?a(f).concat(c(f)):a(f),m=h.length,g=0;m>g;)l.call(f,d=h[g++])&&(n[d]=f[d]);return n}:p},{116:116,35:35,47:47,77:77,80:80,81:81}],70:[function(t,e,n){var a=t(7),r=t(72),i=t(31),o=t(99)("IE_PROTO"),s=function(){},p="prototype",u=function(){var e,n=t(30)("iframe"),a=i.length,r="<",o=">";for(n.style.display="none",t(43).appendChild(n),n.src="javascript:",e=n.contentWindow.document,e.open(),e.write(r+"script"+o+"document.F=Object"+r+"/script"+o),e.close(),u=e.F;a--;)delete u[p][i[a]];return u()};e.exports=Object.create||function(t,e){var n;return null!==t?(s[p]=a(t),n=new s,s[p]=null,n[o]=t):n=u(),void 0===e?n:r(n,e)}},{30:30,31:31,43:43,7:7,72:72,99:99}],71:[function(t,e,n){var a=t(7),r=t(44),i=t(117),o=Object.defineProperty;n.f=t(29)?Object.defineProperty:function(t,e,n){if(a(t),e=i(e,!0),a(n),r)try{return o(t,e,n)}catch(s){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},{117:117,29:29,44:44,7:7}],72:[function(t,e,n){var a=t(71),r=t(7),i=t(80);e.exports=t(29)?Object.defineProperties:function(t,e){r(t);for(var n,o=i(e),s=o.length,p=0;s>p;)a.f(t,n=o[p++],e[n]);return t}},{29:29,7:7,71:71,80:80}],73:[function(t,e,n){"use strict";e.exports=t(59)||!t(35)(function(){var e=Math.random();__defineSetter__.call(null,e,function(){}),delete t(40)[e]})},{35:35,40:40,59:59}],74:[function(t,e,n){var a=t(81),r=t(89),i=t(114),o=t(117),s=t(41),p=t(44),u=Object.getOwnPropertyDescriptor;n.f=t(29)?u:function(t,e){if(t=i(t),e=o(e,!0),p)try{return u(t,e)}catch(n){}return s(t,e)?r(!a.f.call(t,e),t[e]):void 0}},{114:114,117:117,29:29,41:41,44:44,81:81,89:89}],75:[function(t,e,n){var a=t(114),r=t(76).f,i={}.toString,o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.f=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{114:114,76:76}],76:[function(t,e,n){var a=t(79),r=t(31).concat("length","prototype");n.f=Object.getOwnPropertyNames||function(t){return a(t,r)}},{31:31,79:79}],77:[function(t,e,n){n.f=Object.getOwnPropertySymbols},{}],78:[function(t,e,n){var a=t(41),r=t(116),i=t(99)("IE_PROTO"),o=Object.prototype;e.exports=Object.getPrototypeOf||function(t){return t=r(t),a(t,i)?t[i]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?o:null}},{116:116,41:41,99:99}],79:[function(t,e,n){var a=t(41),r=t(114),i=t(11)(!1),o=t(99)("IE_PROTO");e.exports=function(t,e){var n,s=r(t),p=0,u=[];for(n in s)n!=o&&a(s,n)&&u.push(n);for(;e.length>p;)a(s,n=e[p++])&&(~i(u,n)||u.push(n));return u}},{11:11,114:114,41:41,99:99}],80:[function(t,e,n){var a=t(79),r=t(31);e.exports=Object.keys||function(t){return a(t,r)}},{31:31,79:79}],81:[function(t,e,n){n.f={}.propertyIsEnumerable},{}],82:[function(t,e,n){var a=t(33),r=t(23),i=t(35);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{23:23,33:33,35:35}],83:[function(t,e,n){var a=t(80),r=t(114),i=t(81).f;e.exports=function(t){return function(e){for(var n,o=r(e),s=a(o),p=s.length,u=0,c=[];p>u;)i.call(o,n=s[u++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{114:114,80:80,81:81}],84:[function(t,e,n){var a=t(76),r=t(77),i=t(7),o=t(40).Reflect;e.exports=o&&o.ownKeys||function(t){var e=a.f(i(t)),n=r.f;return n?e.concat(n(t)):e}},{40:40,7:7,76:76,77:77}],85:[function(t,e,n){var a=t(40).parseFloat,r=t(108).trim;e.exports=1/a(t(109)+"-0")!==-(1/0)?function(t){var e=r(t+"",3),n=a(e);return 0===n&&"-"==e.charAt(0)?-0:n}:a},{108:108,109:109,40:40}],86:[function(t,e,n){var a=t(40).parseInt,r=t(108).trim,i=t(109),o=/^[-+]?0[xX]/;e.exports=8!==a(i+"08")||22!==a(i+"0x16")?function(t,e){var n=r(t+"",3);return a(n,e>>>0||(o.test(n)?16:10))}:a},{108:108,109:109,40:40}],87:[function(t,e,n){e.exports=function(t){try{return{e:!1,v:t()}}catch(e){return{e:!0,v:e}}}},{}],88:[function(t,e,n){var a=t(7),r=t(51),i=t(68);e.exports=function(t,e){if(a(t),r(e)&&e.constructor===t)return e;var n=i.f(t),o=n.resolve;return o(e),n.promise}},{51:51,68:68,7:7}],89:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],90:[function(t,e,n){var a=t(91);e.exports=function(t,e,n){for(var r in e)a(t,r,e[r],n);return t}},{91:91}],91:[function(t,e,n){var a=t(40),r=t(42),i=t(41),o=t(121)("src"),s="toString",p=Function[s],u=(""+p).split(s);t(23).inspectSource=function(t){return p.call(t)},(e.exports=function(t,e,n,s){var p="function"==typeof n;p&&(i(n,"name")||r(n,"name",e)),t[e]!==n&&(p&&(i(n,o)||r(n,o,t[e]?""+t[e]:u.join(e+""))),t===a?t[e]=n:s?t[e]?t[e]=n:r(t,e,n):(delete t[e],r(t,e,n)))})(Function.prototype,s,function(){return"function"==typeof this&&this[o]||p.call(this)})},{121:121,23:23,40:40,41:41,42:42}],92:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],93:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],94:[function(t,e,n){"use strict";var a=t(33),r=t(3),i=t(25),o=t(39);e.exports=function(t){a(a.S,t,{from:function(t){var e,n,a,s,p=arguments[1];return r(this),e=void 0!==p,e&&r(p),void 0==t?new this:(n=[],e?(a=0,s=i(p,arguments[2],2),o(t,!1,function(t){n.push(s(t,a++))})):o(t,!1,n.push,n),new this(n))}})}},{25:25,3:3,33:33,39:39}],95:[function(t,e,n){"use strict";var a=t(33);e.exports=function(t){a(a.S,t,{of:function(){for(var t=arguments.length,e=Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},{33:33}],96:[function(t,e,n){var a=t(51),r=t(7),i=function(t,e){if(r(t),!a(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,a){try{a=t(25)(Function.call,t(74).f(Object.prototype,"__proto__").set,2),a(e,[]),n=!(e instanceof Array)}catch(r){n=!0}return function(t,e){return i(t,e),n?t.__proto__=e:a(t,e),t}}({},!1):void 0),check:i}},{25:25,51:51,7:7,74:74}],97:[function(t,e,n){"use strict";var a=t(40),r=t(71),i=t(29),o=t(126)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.f(e,o,{configurable:!0,get:function(){return this}})}},{126:126,29:29,40:40,71:71}],98:[function(t,e,n){var a=t(71).f,r=t(41),i=t(126)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{126:126,41:41,71:71}],99:[function(t,e,n){var a=t(100)("keys"),r=t(121);e.exports=function(t){return a[t]||(a[t]=r(t))}},{100:100,121:121}],100:[function(t,e,n){var a=t(23),r=t(40),i="__core-js_shared__",o=r[i]||(r[i]={});(e.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:a.version,mode:t(59)?"pure":"global",copyright:"© 2018 Denis Pushkarev (zloirock.ru)"})},{23:23,40:40,59:59}],101:[function(t,e,n){var a=t(7),r=t(3),i=t(126)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{126:126,3:3,7:7}],102:[function(t,e,n){"use strict";var a=t(35);e.exports=function(t,e){return!!t&&a(function(){e?t.call(null,function(){},1):t.call(null)})}},{35:35}],103:[function(t,e,n){var a=t(113),r=t(28);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",p=a(n),u=s.length;return 0>p||p>=u?t?"":void 0:(i=s.charCodeAt(p),55296>i||i>56319||p+1===u||(o=s.charCodeAt(p+1))<56320||o>57343?t?s.charAt(p):i:t?s.slice(p,p+2):(i-55296<<10)+(o-56320)+65536)}}},{113:113,28:28}],104:[function(t,e,n){var a=t(52),r=t(28);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{28:28,52:52}],105:[function(t,e,n){var a=t(33),r=t(35),i=t(28),o=/"/g,s=function(t,e,n,a){var r=i(t)+"",s="<"+e;return""!==n&&(s+=" "+n+'="'+(a+"").replace(o,""")+'"'),s+">"+r+""};e.exports=function(t,e){var n={};n[t]=e(s),a(a.P+a.F*r(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",n)}},{28:28,33:33,35:35}],106:[function(t,e,n){var a=t(115),r=t(107),i=t(28);e.exports=function(t,e,n,o){var s=i(t)+"",p=s.length,u=void 0===n?" ":n+"",c=a(e);if(p>=c||""==u)return s;var l=c-p,d=r.call(u,Math.ceil(l/u.length));return d.length>l&&(d=d.slice(0,l)),o?d+s:s+d}},{107:107,115:115,28:28}],107:[function(t,e,n){"use strict";var a=t(113),r=t(28);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{113:113,28:28}],108:[function(t,e,n){var a=t(33),r=t(28),i=t(35),o=t(109),s="["+o+"]",p="​…",u=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e,n){var r={},s=i(function(){return!!o[t]()||p[t]()!=p}),u=r[t]=s?e(d):o[t];n&&(r[n]=u),a(a.P+a.F*s,"String",r)},d=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{109:109,28:28,33:33,35:35}],109:[function(t,e,n){e.exports=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff"},{}],110:[function(t,e,n){var a,r,i,o=t(25),s=t(46),p=t(43),u=t(30),c=t(40),l=c.process,d=c.setImmediate,f=c.clearImmediate,h=c.MessageChannel,m=c.Dispatch,g=0,v={},b="onreadystatechange",y=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},_=function(t){y.call(t.data)};d&&f||(d=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++g]=function(){s("function"==typeof t?t:Function(t),e)},a(g),g},f=function(t){delete v[t]},"process"==t(18)(l)?a=function(t){l.nextTick(o(y,t,1))}:m&&m.now?a=function(t){m.now(o(y,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=_,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",_,!1)):a=b in u("script")?function(t){p.appendChild(u("script"))[b]=function(){p.removeChild(this),y.call(t)}}:function(t){setTimeout(o(y,t,1),0)}),e.exports={set:d,clear:f}},{18:18,25:25,30:30,40:40,43:43,46:46}],111:[function(t,e,n){var a=t(113),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{113:113}],112:[function(t,e,n){var a=t(113),r=t(115);e.exports=function(t){if(void 0===t)return 0;var e=a(t),n=r(e);if(e!==n)throw RangeError("Wrong length!");return n}},{113:113,115:115}],113:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],114:[function(t,e,n){var a=t(47),r=t(28);e.exports=function(t){return a(r(t))}},{28:28,47:47}],115:[function(t,e,n){var a=t(113),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{113:113}],116:[function(t,e,n){var a=t(28);e.exports=function(t){return Object(a(t))}},{28:28}],117:[function(t,e,n){var a=t(51);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{51:51}],118:[function(t,e,n){"use strict";if(t(29)){var a=t(59),r=t(40),i=t(35),o=t(33),s=t(120),p=t(119),u=t(25),c=t(6),l=t(89),d=t(42),f=t(90),h=t(113),m=t(115),g=t(112),v=t(111),b=t(117),y=t(41),_=t(17),x=t(51),w=t(116),k=t(48),S=t(70),E=t(78),C=t(76).f,P=t(127),A=t(121),O=t(126),T=t(12),R=t(11),M=t(101),L=t(139),j=t(58),D=t(56),N=t(97),F=t(9),I=t(8),B=t(71),q=t(74),U=B.f,V=q.f,G=r.RangeError,z=r.TypeError,W=r.Uint8Array,H="ArrayBuffer",K="Shared"+H,Q="BYTES_PER_ELEMENT",Y="prototype",$=Array[Y],J=p.ArrayBuffer,X=p.DataView,Z=T(0),tt=T(2),et=T(3),nt=T(4),at=T(5),rt=T(6),it=R(!0),ot=R(!1),st=L.values,pt=L.keys,ut=L.entries,ct=$.lastIndexOf,lt=$.reduce,dt=$.reduceRight,ft=$.join,ht=$.sort,mt=$.slice,gt=$.toString,vt=$.toLocaleString,bt=O("iterator"),yt=O("toStringTag"),_t=A("typed_constructor"),xt=A("def_constructor"),wt=s.CONSTR,kt=s.TYPED,St=s.VIEW,Et="Wrong length!",Ct=T(1,function(t,e){ -return Rt(M(t,t[xt]),e)}),Pt=i(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),At=!!W&&!!W[Y].set&&i(function(){new W(1).set({})}),Ot=function(t,e){var n=h(t);if(0>n||n%e)throw G("Wrong offset!");return n},Tt=function(t){if(x(t)&&kt in t)return t;throw z(t+" is not a typed array!")},Rt=function(t,e){if(!(x(t)&&_t in t))throw z("It is not a typed array constructor!");return new t(e)},Mt=function(t,e){return Lt(M(t,t[xt]),e)},Lt=function(t,e){for(var n=0,a=e.length,r=Rt(t,a);a>n;)r[n]=e[n++];return r},jt=function(t,e,n){U(t,e,{get:function(){return this._d[n]}})},Dt=function(t){var e,n,a,r,i,o,s=w(t),p=arguments.length,c=p>1?arguments[1]:void 0,l=void 0!==c,d=P(s);if(void 0!=d&&!k(d)){for(o=d.call(s),a=[],e=0;!(i=o.next()).done;e++)a.push(i.value);s=a}for(l&&p>2&&(c=u(c,arguments[2],2)),e=0,n=m(s.length),r=Rt(this,n);n>e;e++)r[e]=l?c(s[e],e):s[e];return r},Nt=function(){for(var t=0,e=arguments.length,n=Rt(this,e);e>t;)n[t]=arguments[t++];return n},Ft=!!W&&i(function(){vt.call(new W(1))}),It=function(){return vt.apply(Ft?mt.call(Tt(this)):Tt(this),arguments)},Bt={copyWithin:function(t,e){return I.call(Tt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return nt(Tt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return F.apply(Tt(this),arguments)},filter:function(t){return Mt(this,tt(Tt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return at(Tt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return rt(Tt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){Z(Tt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return ot(Tt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return it(Tt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return ft.apply(Tt(this),arguments)},lastIndexOf:function(t){return ct.apply(Tt(this),arguments)},map:function(t){return Ct(Tt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return lt.apply(Tt(this),arguments)},reduceRight:function(t){return dt.apply(Tt(this),arguments)},reverse:function(){for(var t,e=this,n=Tt(e).length,a=Math.floor(n/2),r=0;a>r;)t=e[r],e[r++]=e[--n],e[n]=t;return e},some:function(t){return et(Tt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return ht.call(Tt(this),t)},subarray:function(t,e){var n=Tt(this),a=n.length,r=v(t,a);return new(M(n,n[xt]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,m((void 0===e?a:v(e,a))-r))}},qt=function(t,e){return Mt(this,mt.call(Tt(this),t,e))},Ut=function(t){Tt(this);var e=Ot(arguments[1],1),n=this.length,a=w(t),r=m(a.length),i=0;if(r+e>n)throw G(Et);for(;r>i;)this[e+i]=a[i++]},Vt={entries:function(){return ut.call(Tt(this))},keys:function(){return pt.call(Tt(this))},values:function(){return st.call(Tt(this))}},Gt=function(t,e){return x(t)&&t[kt]&&"symbol"!=typeof e&&e in t&&+e+""==e+""},zt=function(t,e){return Gt(t,e=b(e,!0))?l(2,t[e]):V(t,e)},Wt=function(t,e,n){return!(Gt(t,e=b(e,!0))&&x(n)&&y(n,"value"))||y(n,"get")||y(n,"set")||n.configurable||y(n,"writable")&&!n.writable||y(n,"enumerable")&&!n.enumerable?U(t,e,n):(t[e]=n.value,t)};wt||(q.f=zt,B.f=Wt),o(o.S+o.F*!wt,"Object",{getOwnPropertyDescriptor:zt,defineProperty:Wt}),i(function(){gt.call({})})&&(gt=vt=function(){return ft.call(this)});var Ht=f({},Bt);f(Ht,Vt),d(Ht,bt,Vt.values),f(Ht,{slice:qt,set:Ut,constructor:function(){},toString:gt,toLocaleString:It}),jt(Ht,"buffer","b"),jt(Ht,"byteOffset","o"),jt(Ht,"byteLength","l"),jt(Ht,"length","e"),U(Ht,yt,{get:function(){return this[kt]}}),e.exports=function(t,e,n,p){p=!!p;var u=t+(p?"Clamped":"")+"Array",l="get"+t,f="set"+t,h=r[u],v=h||{},b=h&&E(h),y=!h||!s.ABV,w={},k=h&&h[Y],P=function(t,n){var a=t._d;return a.v[l](n*e+a.o,Pt)},A=function(t,n,a){var r=t._d;p&&(a=(a=Math.round(a))<0?0:a>255?255:255&a),r.v[f](n*e+r.o,a,Pt)},O=function(t,e){U(t,e,{get:function(){return P(this,e)},set:function(t){return A(this,e,t)},enumerable:!0})};y?(h=n(function(t,n,a,r){c(t,h,u,"_d");var i,o,s,p,l=0,f=0;if(x(n)){if(!(n instanceof J||(p=_(n))==H||p==K))return kt in n?Lt(h,n):Dt.call(h,n);i=n,f=Ot(a,e);var v=n.byteLength;if(void 0===r){if(v%e)throw G(Et);if(o=v-f,0>o)throw G(Et)}else if(o=m(r)*e,o+f>v)throw G(Et);s=o/e}else s=g(n),o=s*e,i=new J(o);for(d(t,"_d",{b:i,o:f,l:o,e:s,v:new X(i)});s>l;)O(t,l++)}),k=h[Y]=S(Ht),d(k,"constructor",h)):i(function(){h(1)})&&i(function(){new h(-1)})&&D(function(t){new h,new h(null),new h(1.5),new h(t)},!0)||(h=n(function(t,n,a,r){c(t,h,u);var i;return x(n)?n instanceof J||(i=_(n))==H||i==K?void 0!==r?new v(n,Ot(a,e),r):void 0!==a?new v(n,Ot(a,e)):new v(n):kt in n?Lt(h,n):Dt.call(h,n):new v(g(n))}),Z(b!==Function.prototype?C(v).concat(C(b)):C(v),function(t){t in h||d(h,t,v[t])}),h[Y]=k,a||(k.constructor=h));var T=k[bt],R=!!T&&("values"==T.name||void 0==T.name),M=Vt.values;d(h,_t,!0),d(k,kt,u),d(k,St,!0),d(k,xt,h),(p?new h(1)[yt]==u:yt in k)||U(k,yt,{get:function(){return u}}),w[u]=h,o(o.G+o.W+o.F*(h!=v),w),o(o.S,u,{BYTES_PER_ELEMENT:e}),o(o.S+o.F*i(function(){v.of.call(h,1)}),u,{from:Dt,of:Nt}),Q in k||d(k,Q,e),o(o.P,u,Bt),N(u),o(o.P+o.F*At,u,{set:Ut}),o(o.P+o.F*!R,u,Vt),a||k.toString==gt||(k.toString=gt),o(o.P+o.F*i(function(){new h(1).slice()}),u,{slice:qt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new h([1,2]).toLocaleString()})||!i(function(){k.toLocaleString.call([1,2])})),u,{toLocaleString:It}),j[u]=R?T:M,a||R||d(k,bt,M)}}else e.exports=function(){}},{101:101,11:11,111:111,112:112,113:113,115:115,116:116,117:117,119:119,12:12,120:120,121:121,126:126,127:127,139:139,17:17,25:25,29:29,33:33,35:35,40:40,41:41,42:42,48:48,51:51,56:56,58:58,59:59,6:6,70:70,71:71,74:74,76:76,78:78,8:8,89:89,9:9,90:90,97:97}],119:[function(t,e,n){"use strict";function a(t,e,n){var a,r,i,o=Array(n),s=8*n-e-1,p=(1<>1,c=23===e?U(2,-24)-U(2,-77):0,l=0,d=0>t||0===t&&0>1/t?1:0;for(t=q(t),t!=t||t===I?(r=t!=t?1:0,a=p):(a=V(G(t)/z),t*(i=U(2,-a))<1&&(a--,i*=2),t+=a+u>=1?c/i:c*U(2,1-u),t*i>=2&&(a++,i/=2),a+u>=p?(r=0,a=p):a+u>=1?(r=(t*i-1)*U(2,e),a+=u):(r=t*U(2,u-1)*U(2,e),a=0));e>=8;o[l++]=255&r,r/=256,e-=8);for(a=a<0;o[l++]=255&a,a/=256,s-=8);return o[--l]|=128*d,o}function r(t,e,n){var a,r=8*n-e-1,i=(1<>1,s=r-7,p=n-1,u=t[p--],c=127&u;for(u>>=7;s>0;c=256*c+t[p],p--,s-=8);for(a=c&(1<<-s)-1,c>>=-s,s+=e;s>0;a=256*a+t[p],p--,s-=8);if(0===c)c=1-o;else{if(c===i)return a?NaN:u?-I:I;a+=U(2,e),c-=o}return(u?-1:1)*a*U(2,c-e)}function i(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function o(t){return[255&t]}function s(t){return[255&t,t>>8&255]}function p(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function u(t){return a(t,52,8)}function c(t){return a(t,23,4)}function l(t,e,n){C(t[R],e,{get:function(){return this[n]}})}function d(t,e,n,a){var r=+n,i=S(r);if(i+e>t[Y])throw F(L);var o=t[Q]._b,s=i+t[$],p=o.slice(s,s+e);return a?p:p.reverse()}function f(t,e,n,a,r,i){var o=+n,s=S(o);if(s+e>t[Y])throw F(L);for(var p=t[Q]._b,u=s+t[$],c=a(+r),l=0;e>l;l++)p[u+l]=c[i?l:e-l-1]}var h=t(40),m=t(29),g=t(59),v=t(120),b=t(42),y=t(90),_=t(35),x=t(6),w=t(113),k=t(115),S=t(112),E=t(76).f,C=t(71).f,P=t(9),A=t(98),O="ArrayBuffer",T="DataView",R="prototype",M="Wrong length!",L="Wrong index!",j=h[O],D=h[T],N=h.Math,F=h.RangeError,I=h.Infinity,B=j,q=N.abs,U=N.pow,V=N.floor,G=N.log,z=N.LN2,W="buffer",H="byteLength",K="byteOffset",Q=m?"_b":W,Y=m?"_l":H,$=m?"_o":K;if(v.ABV){if(!_(function(){j(1)})||!_(function(){new j(-1)})||_(function(){return new j,new j(1.5),new j(NaN),j.name!=O})){j=function(t){return x(this,j),new B(S(t))};for(var J,X=j[R]=B[R],Z=E(B),tt=0;Z.length>tt;)(J=Z[tt++])in j||b(j,J,B[J]);g||(X.constructor=j)}var et=new D(new j(2)),nt=D[R].setInt8;et.setInt8(0,2147483648),et.setInt8(1,2147483649),(et.getInt8(0)||!et.getInt8(1))&&y(D[R],{setInt8:function(t,e){nt.call(this,t,e<<24>>24)},setUint8:function(t,e){nt.call(this,t,e<<24>>24)}},!0)}else j=function(t){x(this,j,O);var e=S(t);this._b=P.call(Array(e),0),this[Y]=e},D=function(t,e,n){x(this,D,T),x(t,j,T);var a=t[Y],r=w(e);if(0>r||r>a)throw F("Wrong offset!");if(n=void 0===n?a-r:k(n),r+n>a)throw F(M);this[Q]=t,this[$]=r,this[Y]=n},m&&(l(j,H,"_l"),l(D,W,"_b"),l(D,H,"_l"),l(D,K,"_o")),y(D[R],{getInt8:function(t){return d(this,1,t)[0]<<24>>24},getUint8:function(t){return d(this,1,t)[0]},getInt16:function(t){var e=d(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=d(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return i(d(this,4,t,arguments[1]))},getUint32:function(t){return i(d(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return r(d(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return r(d(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){f(this,1,t,o,e)},setUint8:function(t,e){f(this,1,t,o,e)},setInt16:function(t,e){f(this,2,t,s,e,arguments[2])},setUint16:function(t,e){f(this,2,t,s,e,arguments[2])},setInt32:function(t,e){f(this,4,t,p,e,arguments[2])},setUint32:function(t,e){f(this,4,t,p,e,arguments[2])},setFloat32:function(t,e){f(this,4,t,c,e,arguments[2])},setFloat64:function(t,e){f(this,8,t,u,e,arguments[2])}});A(j,O),A(D,T),b(D[R],v.VIEW,!0),n[O]=j,n[T]=D},{112:112,113:113,115:115,120:120,29:29,35:35,40:40,42:42,59:59,6:6,71:71,76:76,9:9,90:90,98:98}],120:[function(t,e,n){for(var a,r=t(40),i=t(42),o=t(121),s=o("typed_array"),p=o("view"),u=!(!r.ArrayBuffer||!r.DataView),c=u,l=0,d=9,f="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");d>l;)(a=r[f[l++]])?(i(a.prototype,s,!0),i(a.prototype,p,!0)):c=!1;e.exports={ABV:u,CONSTR:c,TYPED:s,VIEW:p}},{121:121,40:40,42:42}],121:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],122:[function(t,e,n){var a=t(40),r=a.navigator;e.exports=r&&r.userAgent||""},{40:40}],123:[function(t,e,n){var a=t(51);e.exports=function(t,e){if(!a(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},{51:51}],124:[function(t,e,n){var a=t(40),r=t(23),i=t(59),o=t(125),s=t(71).f;e.exports=function(t){var e=r.Symbol||(r.Symbol=i?{}:a.Symbol||{});"_"==t.charAt(0)||t in e||s(e,t,{value:o.f(t)})}},{125:125,23:23,40:40,59:59,71:71}],125:[function(t,e,n){n.f=t(126)},{126:126}],126:[function(t,e,n){var a=t(100)("wks"),r=t(121),i=t(40).Symbol,o="function"==typeof i,s=e.exports=function(t){return a[t]||(a[t]=o&&i[t]||(o?i:r)("Symbol."+t))};s.store=a},{100:100,121:121,40:40}],127:[function(t,e,n){var a=t(17),r=t(126)("iterator"),i=t(58);e.exports=t(23).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{126:126,17:17,23:23,58:58}],128:[function(t,e,n){var a=t(33),r=t(92)(/[\\^$*+?.()|[\]{}]/g,"\\$&");a(a.S,"RegExp",{escape:function(t){return r(t)}})},{33:33,92:92}],129:[function(t,e,n){var a=t(33);a(a.P,"Array",{copyWithin:t(8)}),t(5)("copyWithin")},{33:33,5:5,8:8}],130:[function(t,e,n){"use strict";var a=t(33),r=t(12)(4);a(a.P+a.F*!t(102)([].every,!0),"Array",{every:function(t){return r(this,t,arguments[1])}})},{102:102,12:12,33:33}],131:[function(t,e,n){var a=t(33);a(a.P,"Array",{fill:t(9)}),t(5)("fill")},{33:33,5:5,9:9}],132:[function(t,e,n){"use strict";var a=t(33),r=t(12)(2);a(a.P+a.F*!t(102)([].filter,!0),"Array",{filter:function(t){return r(this,t,arguments[1])}})},{102:102,12:12,33:33}],133:[function(t,e,n){"use strict";var a=t(33),r=t(12)(6),i="findIndex",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{findIndex:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(5)(i)},{12:12,33:33,5:5}],134:[function(t,e,n){"use strict";var a=t(33),r=t(12)(5),i="find",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(5)(i)},{12:12,33:33,5:5}],135:[function(t,e,n){"use strict";var a=t(33),r=t(12)(0),i=t(102)([].forEach,!0);a(a.P+a.F*!i,"Array",{forEach:function(t){return r(this,t,arguments[1])}})},{102:102,12:12,33:33}],136:[function(t,e,n){"use strict";var a=t(25),r=t(33),i=t(116),o=t(53),s=t(48),p=t(115),u=t(24),c=t(127);r(r.S+r.F*!t(56)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,r,l,d=i(t),f="function"==typeof this?this:Array,h=arguments.length,m=h>1?arguments[1]:void 0,g=void 0!==m,v=0,b=c(d);if(g&&(m=a(m,h>2?arguments[2]:void 0,2)),void 0==b||f==Array&&s(b))for(e=p(d.length),n=new f(e);e>v;v++)u(n,v,g?m(d[v],v):d[v]);else for(l=b.call(d),n=new f;!(r=l.next()).done;v++)u(n,v,g?o(l,m,[r.value,v],!0):r.value);return n.length=v,n}})},{115:115,116:116,127:127,24:24,25:25,33:33,48:48,53:53,56:56}],137:[function(t,e,n){"use strict";var a=t(33),r=t(11)(!1),i=[].indexOf,o=!!i&&1/[1].indexOf(1,-0)<0;a(a.P+a.F*(o||!t(102)(i)),"Array",{indexOf:function(t){return o?i.apply(this,arguments)||0:r(this,t,arguments[1])}})},{102:102,11:11,33:33}],138:[function(t,e,n){var a=t(33);a(a.S,"Array",{isArray:t(49)})},{33:33,49:49}],139:[function(t,e,n){"use strict";var a=t(5),r=t(57),i=t(58),o=t(114);e.exports=t(55)(Array,"Array",function(t,e){this._t=o(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),i.Arguments=i.Array,a("keys"),a("values"),a("entries")},{114:114,5:5,55:55,57:57,58:58}],140:[function(t,e,n){"use strict";var a=t(33),r=t(114),i=[].join;a(a.P+a.F*(t(47)!=Object||!t(102)(i)),"Array",{join:function(t){return i.call(r(this),void 0===t?",":t)}})},{102:102,114:114,33:33,47:47}],141:[function(t,e,n){"use strict";var a=t(33),r=t(114),i=t(113),o=t(115),s=[].lastIndexOf,p=!!s&&1/[1].lastIndexOf(1,-0)<0;a(a.P+a.F*(p||!t(102)(s)),"Array",{lastIndexOf:function(t){if(p)return s.apply(this,arguments)||0;var e=r(this),n=o(e.length),a=n-1;for(arguments.length>1&&(a=Math.min(a,i(arguments[1]))),0>a&&(a=n+a);a>=0;a--)if(a in e&&e[a]===t)return a||0;return-1}})},{102:102,113:113,114:114,115:115,33:33}],142:[function(t,e,n){"use strict";var a=t(33),r=t(12)(1);a(a.P+a.F*!t(102)([].map,!0),"Array",{map:function(t){return r(this,t,arguments[1])}})},{102:102,12:12,33:33}],143:[function(t,e,n){"use strict";var a=t(33),r=t(24);a(a.S+a.F*t(35)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments.length,n=new("function"==typeof this?this:Array)(e);e>t;)r(n,t,arguments[t++]);return n.length=e,n}})},{24:24,33:33,35:35}],144:[function(t,e,n){"use strict";var a=t(33),r=t(13);a(a.P+a.F*!t(102)([].reduceRight,!0),"Array",{reduceRight:function(t){return r(this,t,arguments.length,arguments[1],!0)}})},{102:102,13:13,33:33}],145:[function(t,e,n){"use strict";var a=t(33),r=t(13);a(a.P+a.F*!t(102)([].reduce,!0),"Array",{reduce:function(t){return r(this,t,arguments.length,arguments[1],!1)}})},{102:102,13:13,33:33}],146:[function(t,e,n){"use strict";var a=t(33),r=t(43),i=t(18),o=t(111),s=t(115),p=[].slice;a(a.P+a.F*t(35)(function(){r&&p.call(r)}),"Array",{slice:function(t,e){var n=s(this.length),a=i(this);if(e=void 0===e?n:e,"Array"==a)return p.call(this,t,e);for(var r=o(t,n),u=o(e,n),c=s(u-r),l=Array(c),d=0;c>d;d++)l[d]="String"==a?this.charAt(r+d):this[r+d];return l}})},{111:111,115:115,18:18,33:33,35:35,43:43}],147:[function(t,e,n){"use strict";var a=t(33),r=t(12)(3);a(a.P+a.F*!t(102)([].some,!0),"Array",{some:function(t){return r(this,t,arguments[1])}})},{102:102,12:12,33:33}],148:[function(t,e,n){"use strict";var a=t(33),r=t(3),i=t(116),o=t(35),s=[].sort,p=[1,2,3];a(a.P+a.F*(o(function(){p.sort(void 0)})||!o(function(){p.sort(null)})||!t(102)(s)),"Array",{sort:function(t){return void 0===t?s.call(i(this)):s.call(i(this),r(t))}})},{102:102,116:116,3:3,33:33,35:35}],149:[function(t,e,n){t(97)("Array")},{97:97}],150:[function(t,e,n){var a=t(33);a(a.S,"Date",{now:function(){return(new Date).getTime()}})},{33:33}],151:[function(t,e,n){var a=t(33),r=t(26);a(a.P+a.F*(Date.prototype.toISOString!==r),"Date",{toISOString:r})},{26:26,33:33}],152:[function(t,e,n){"use strict";var a=t(33),r=t(116),i=t(117);a(a.P+a.F*t(35)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function(t){var e=r(this),n=i(e);return"number"!=typeof n||isFinite(n)?e.toISOString():null}})},{116:116,117:117,33:33,35:35}],153:[function(t,e,n){var a=t(126)("toPrimitive"),r=Date.prototype;a in r||t(42)(r,a,t(27))},{126:126,27:27,42:42}],154:[function(t,e,n){var a=Date.prototype,r="Invalid Date",i="toString",o=a[i],s=a.getTime;new Date(NaN)+""!=r&&t(91)(a,i,function(){var t=s.call(this);return t===t?o.call(this):r})},{91:91}],155:[function(t,e,n){var a=t(33);a(a.P,"Function",{bind:t(16)})},{16:16,33:33}],156:[function(t,e,n){"use strict";var a=t(51),r=t(78),i=t(126)("hasInstance"),o=Function.prototype;i in o||t(71).f(o,i,{value:function(t){if("function"!=typeof this||!a(t))return!1;if(!a(this.prototype))return t instanceof this;for(;t=r(t);)if(this.prototype===t)return!0;return!1}})},{126:126,51:51,71:71,78:78}],157:[function(t,e,n){var a=t(71).f,r=Function.prototype,i=/^\s*function ([^ (]*)/,o="name";o in r||t(29)&&a(r,o,{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(t){return""}}})},{29:29,71:71}],158:[function(t,e,n){"use strict";var a=t(19),r=t(123),i="Map";e.exports=t(22)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=a.getEntry(r(this,i),t);return e&&e.v},set:function(t,e){return a.def(r(this,i),0===t?0:t,e)}},a,!0)},{123:123,19:19,22:22}],159:[function(t,e,n){var a=t(33),r=t(62),i=Math.sqrt,o=Math.acosh;a(a.S+a.F*!(o&&710==Math.floor(o(Number.MAX_VALUE))&&o(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:r(t-1+i(t-1)*i(t+1))}})},{33:33,62:62}],160:[function(t,e,n){function a(t){return isFinite(t=+t)&&0!=t?0>t?-a(-t):Math.log(t+Math.sqrt(t*t+1)):t}var r=t(33),i=Math.asinh;r(r.S+r.F*!(i&&1/i(0)>0),"Math",{asinh:a})},{33:33}],161:[function(t,e,n){var a=t(33),r=Math.atanh;a(a.S+a.F*!(r&&1/r(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{33:33}],162:[function(t,e,n){var a=t(33),r=t(64);a(a.S,"Math",{cbrt:function(t){return r(t=+t)*Math.pow(Math.abs(t),1/3)}})},{33:33,64:64}],163:[function(t,e,n){var a=t(33);a(a.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{33:33}],164:[function(t,e,n){var a=t(33),r=Math.exp;a(a.S,"Math",{cosh:function(t){return(r(t=+t)+r(-t))/2}})},{33:33}],165:[function(t,e,n){var a=t(33),r=t(60);a(a.S+a.F*(r!=Math.expm1),"Math",{expm1:r})},{33:33,60:60}],166:[function(t,e,n){var a=t(33);a(a.S,"Math",{fround:t(61)})},{33:33,61:61}],167:[function(t,e,n){var a=t(33),r=Math.abs;a(a.S,"Math",{hypot:function(t,e){for(var n,a,i=0,o=0,s=arguments.length,p=0;s>o;)n=r(arguments[o++]),n>p?(a=p/n,i=i*a*a+1,p=n):n>0?(a=n/p,i+=a*a):i+=n;return p===1/0?1/0:p*Math.sqrt(i)}})},{33:33}],168:[function(t,e,n){var a=t(33),r=Math.imul;a(a.S+a.F*t(35)(function(){return-5!=r(4294967295,5)||2!=r.length}),"Math",{imul:function(t,e){var n=65535,a=+t,r=+e,i=n&a,o=n&r;return 0|i*o+((n&a>>>16)*o+i*(n&r>>>16)<<16>>>0)}})},{33:33,35:35}],169:[function(t,e,n){var a=t(33);a(a.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},{33:33}],170:[function(t,e,n){var a=t(33);a(a.S,"Math",{log1p:t(62)})},{33:33,62:62}],171:[function(t,e,n){var a=t(33);a(a.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{33:33}],172:[function(t,e,n){var a=t(33);a(a.S,"Math",{sign:t(64)})},{33:33,64:64}],173:[function(t,e,n){var a=t(33),r=t(60),i=Math.exp;a(a.S+a.F*t(35)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(r(t)-r(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{33:33,35:35,60:60}],174:[function(t,e,n){var a=t(33),r=t(60),i=Math.exp;a(a.S,"Math",{tanh:function(t){var e=r(t=+t),n=r(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{33:33,60:60}],175:[function(t,e,n){var a=t(33);a(a.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{33:33}],176:[function(t,e,n){"use strict";var a=t(40),r=t(41),i=t(18),o=t(45),s=t(117),p=t(35),u=t(76).f,c=t(74).f,l=t(71).f,d=t(108).trim,f="Number",h=a[f],m=h,g=h.prototype,v=i(t(70)(g))==f,b="trim"in String.prototype,y=function(t){var e=s(t,!1);if("string"==typeof e&&e.length>2){e=b?e.trim():d(e,3);var n,a,r,i=e.charCodeAt(0);if(43===i||45===i){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:a=2,r=49;break;case 79:case 111:a=8,r=55;break;default:return+e}for(var o,p=e.slice(2),u=0,c=p.length;c>u;u++)if(o=p.charCodeAt(u),48>o||o>r)return NaN;return parseInt(p,a)}}return+e};if(!h(" 0o1")||!h("0b1")||h("+0x1")){h=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof h&&(v?p(function(){g.valueOf.call(n)}):i(n)!=f)?o(new m(y(e)),n,h):y(e)};for(var _,x=t(29)?u(m):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;x.length>w;w++)r(m,_=x[w])&&!r(h,_)&&l(h,_,c(m,_));h.prototype=g,g.constructor=h,t(91)(a,f,h)}},{108:108,117:117,18:18,29:29,35:35,40:40,41:41,45:45,70:70,71:71,74:74,76:76,91:91}],177:[function(t,e,n){var a=t(33);a(a.S,"Number",{EPSILON:Math.pow(2,-52)})},{33:33}],178:[function(t,e,n){var a=t(33),r=t(40).isFinite;a(a.S,"Number",{isFinite:function(t){return"number"==typeof t&&r(t)}})},{33:33,40:40}],179:[function(t,e,n){var a=t(33);a(a.S,"Number",{isInteger:t(50)})},{33:33,50:50}],180:[function(t,e,n){var a=t(33);a(a.S,"Number",{isNaN:function(t){return t!=t}})},{33:33}],181:[function(t,e,n){var a=t(33),r=t(50),i=Math.abs;a(a.S,"Number",{isSafeInteger:function(t){return r(t)&&i(t)<=9007199254740991}})},{33:33,50:50}],182:[function(t,e,n){var a=t(33);a(a.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{33:33}],183:[function(t,e,n){var a=t(33);a(a.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{33:33}],184:[function(t,e,n){var a=t(33),r=t(85);a(a.S+a.F*(Number.parseFloat!=r),"Number",{parseFloat:r})},{33:33,85:85}],185:[function(t,e,n){var a=t(33),r=t(86);a(a.S+a.F*(Number.parseInt!=r),"Number",{parseInt:r})},{33:33,86:86}],186:[function(t,e,n){"use strict";var a=t(33),r=t(113),i=t(4),o=t(107),s=1..toFixed,p=Math.floor,u=[0,0,0,0,0,0],c="Number.toFixed: incorrect invocation!",l="0",d=function(t,e){for(var n=-1,a=e;++n<6;)a+=t*u[n],u[n]=a%1e7,a=p(a/1e7)},f=function(t){for(var e=6,n=0;--e>=0;)n+=u[e],u[e]=p(n/t),n=n%t*1e7},h=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==u[t]){var n=u[t]+"";e=""===e?n:e+o.call(l,7-n.length)+n}return e},m=function(t,e,n){return 0===e?n:e%2===1?m(t,e-1,n*t):m(t*t,e/2,n)},g=function(t){for(var e=0,n=t;n>=4096;)e+=12,n/=4096;for(;n>=2;)e+=1,n/=2;return e};a(a.P+a.F*(!!s&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0))||!t(35)(function(){s.call({})})),"Number",{toFixed:function(t){var e,n,a,s,p=i(this,c),u=r(t),v="",b=l;if(0>u||u>20)throw RangeError(c);if(p!=p)return"NaN";if(-1e21>=p||p>=1e21)return p+"";if(0>p&&(v="-",p=-p),p>1e-21)if(e=g(p*m(2,69,1))-69,n=0>e?p*m(2,-e,1):p/m(2,e,1),n*=4503599627370496,e=52-e,e>0){for(d(0,n),a=u;a>=7;)d(1e7,0),a-=7;for(d(m(10,a,1),0),a=e-1;a>=23;)f(1<<23),a-=23;f(1<0?(s=b.length,b=v+(u>=s?"0."+o.call(l,u-s)+b:b.slice(0,s-u)+"."+b.slice(s-u))):b=v+b,b}})},{107:107,113:113,33:33,35:35,4:4}],187:[function(t,e,n){"use strict";var a=t(33),r=t(35),i=t(4),o=1..toPrecision;a(a.P+a.F*(r(function(){return"1"!==o.call(1,void 0)})||!r(function(){o.call({})})),"Number",{toPrecision:function(t){var e=i(this,"Number#toPrecision: incorrect invocation!");return void 0===t?o.call(e):o.call(e,t)}})},{33:33,35:35,4:4}],188:[function(t,e,n){var a=t(33);a(a.S+a.F,"Object",{assign:t(69)})},{33:33,69:69}],189:[function(t,e,n){var a=t(33);a(a.S,"Object",{create:t(70)})},{33:33,70:70}],190:[function(t,e,n){var a=t(33);a(a.S+a.F*!t(29),"Object",{defineProperties:t(72)})},{29:29,33:33,72:72}],191:[function(t,e,n){var a=t(33);a(a.S+a.F*!t(29),"Object",{defineProperty:t(71).f})},{29:29,33:33,71:71}],192:[function(t,e,n){var a=t(51),r=t(65).onFreeze;t(82)("freeze",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{51:51,65:65,82:82}],193:[function(t,e,n){var a=t(114),r=t(74).f;t(82)("getOwnPropertyDescriptor",function(){return function(t,e){return r(a(t),e)}})},{114:114,74:74,82:82}],194:[function(t,e,n){t(82)("getOwnPropertyNames",function(){return t(75).f})},{75:75,82:82}],195:[function(t,e,n){var a=t(116),r=t(78);t(82)("getPrototypeOf",function(){return function(t){return r(a(t))}})},{116:116,78:78,82:82}],196:[function(t,e,n){var a=t(51);t(82)("isExtensible",function(t){return function(e){return a(e)?t?t(e):!0:!1}})},{51:51,82:82}],197:[function(t,e,n){var a=t(51);t(82)("isFrozen",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{51:51,82:82}],198:[function(t,e,n){var a=t(51);t(82)("isSealed",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{51:51,82:82}],199:[function(t,e,n){var a=t(33);a(a.S,"Object",{is:t(93)})},{33:33,93:93}],200:[function(t,e,n){var a=t(116),r=t(80);t(82)("keys",function(){return function(t){return r(a(t))}})},{116:116,80:80,82:82}],201:[function(t,e,n){var a=t(51),r=t(65).onFreeze;t(82)("preventExtensions",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{51:51,65:65,82:82}],202:[function(t,e,n){var a=t(51),r=t(65).onFreeze;t(82)("seal",function(t){return function(e){return t&&a(e)?t(r(e)):e}})},{51:51,65:65,82:82}],203:[function(t,e,n){var a=t(33);a(a.S,"Object",{setPrototypeOf:t(96).set})},{33:33,96:96}],204:[function(t,e,n){"use strict";var a=t(17),r={};r[t(126)("toStringTag")]="z",r+""!="[object z]"&&t(91)(Object.prototype,"toString",function(){return"[object "+a(this)+"]"},!0)},{126:126,17:17,91:91}],205:[function(t,e,n){var a=t(33),r=t(85);a(a.G+a.F*(parseFloat!=r),{parseFloat:r})},{33:33,85:85}],206:[function(t,e,n){var a=t(33),r=t(86);a(a.G+a.F*(parseInt!=r),{parseInt:r})},{33:33,86:86}],207:[function(t,e,n){"use strict";var a,r,i,o,s=t(59),p=t(40),u=t(25),c=t(17),l=t(33),d=t(51),f=t(3),h=t(6),m=t(39),g=t(101),v=t(110).set,b=t(67)(),y=t(68),_=t(87),x=t(122),w=t(88),k="Promise",S=p.TypeError,E=p.process,C=E&&E.versions,P=C&&C.v8||"",A=p[k],O="process"==c(E),T=function(){},R=r=y.f,M=!!function(){try{var e=A.resolve(1),n=(e.constructor={})[t(126)("species")]=function(t){t(T,T)};return(O||"function"==typeof PromiseRejectionEvent)&&e.then(T)instanceof n&&0!==P.indexOf("6.6")&&-1===x.indexOf("Chrome/66")}catch(a){}}(),L=function(t){var e;return d(t)&&"function"==typeof(e=t.then)?e:!1},j=function(t,e){if(!t._n){t._n=!0;var n=t._c;b(function(){for(var a=t._v,r=1==t._s,i=0,o=function(e){var n,i,o,s=r?e.ok:e.fail,p=e.resolve,u=e.reject,c=e.domain;try{s?(r||(2==t._h&&F(t),t._h=1),s===!0?n=a:(c&&c.enter(),n=s(a),c&&(c.exit(),o=!0)),n===e.promise?u(S("Promise-chain cycle")):(i=L(n))?i.call(n,p,u):p(n)):u(a)}catch(l){c&&!o&&c.exit(),u(l)}};n.length>i;)o(n[i++]);t._c=[],t._n=!1,e&&!t._h&&D(t)})}},D=function(t){v.call(p,function(){var e,n,a,r=t._v,i=N(t);if(i&&(e=_(function(){O?E.emit("unhandledRejection",r,t):(n=p.onunhandledrejection)?n({promise:t,reason:r}):(a=p.console)&&a.error&&a.error("Unhandled promise rejection",r)}),t._h=O||N(t)?2:1),t._a=void 0,i&&e.e)throw e.v})},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},F=function(t){v.call(p,function(){var e;O?E.emit("rejectionHandled",t):(e=p.onrejectionhandled)&&e({promise:t,reason:t._v})})},I=function(t){var e=this;e._d||(e._d=!0,e=e._w||e,e._v=t,e._s=2,e._a||(e._a=e._c.slice()),j(e,!0))},B=function(t){var e,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===t)throw S("Promise can't be resolved itself");(e=L(t))?b(function(){var a={_w:n,_d:!1};try{e.call(t,u(B,a,1),u(I,a,1))}catch(r){I.call(a,r)}}):(n._v=t,n._s=1,j(n,!1))}catch(a){I.call({_w:n,_d:!1},a)}}};M||(A=function(t){h(this,A,k,"_h"),f(t),a.call(this);try{t(u(B,this,1),u(I,this,1))}catch(e){I.call(this,e)}},a=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},a.prototype=t(90)(A.prototype,{then:function(t,e){var n=R(g(this,A));return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,n.domain=O?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&j(this,!1),n.promise},"catch":function(t){return this.then(void 0,t)}}),i=function(){var t=new a;this.promise=t,this.resolve=u(B,t,1),this.reject=u(I,t,1)},y.f=R=function(t){return t===A||t===o?new i(t):r(t)}),l(l.G+l.W+l.F*!M,{Promise:A}),t(98)(A,k),t(97)(k),o=t(23)[k],l(l.S+l.F*!M,k,{reject:function(t){var e=R(this),n=e.reject;return n(t),e.promise}}),l(l.S+l.F*(s||!M),k,{resolve:function(t){return w(s&&this===o?A:this,t)}}),l(l.S+l.F*!(M&&t(56)(function(t){A.all(t)["catch"](T)})),k,{all:function(t){var e=this,n=R(e),a=n.resolve,r=n.reject,i=_(function(){var n=[],i=0,o=1;m(t,!1,function(t){var s=i++,p=!1;n.push(void 0),o++,e.resolve(t).then(function(t){p||(p=!0,n[s]=t,--o||a(n))},r)}),--o||a(n)});return i.e&&r(i.v),n.promise},race:function(t){var e=this,n=R(e),a=n.reject,r=_(function(){m(t,!1,function(t){e.resolve(t).then(n.resolve,a)})});return r.e&&a(r.v),n.promise}})},{101:101,110:110,122:122,126:126,17:17,23:23,25:25,3:3,33:33,39:39,40:40,51:51,56:56,59:59,6:6,67:67,68:68,87:87,88:88,90:90,97:97,98:98}],208:[function(t,e,n){var a=t(33),r=t(3),i=t(7),o=(t(40).Reflect||{}).apply,s=Function.apply;a(a.S+a.F*!t(35)(function(){o(function(){})}),"Reflect",{apply:function(t,e,n){var a=r(t),p=i(n);return o?o(a,e,p):s.call(a,e,p)}})},{3:3,33:33,35:35,40:40,7:7}],209:[function(t,e,n){var a=t(33),r=t(70),i=t(3),o=t(7),s=t(51),p=t(35),u=t(16),c=(t(40).Reflect||{}).construct,l=p(function(){function t(){}return!(c(function(){},[],t)instanceof t)}),d=!p(function(){c(function(){})});a(a.S+a.F*(l||d),"Reflect",{construct:function(t,e){i(t),o(e);var n=arguments.length<3?t:i(arguments[2]);if(d&&!l)return c(t,e,n);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var a=[null];return a.push.apply(a,e),new(u.apply(t,a))}var p=n.prototype,f=r(s(p)?p:Object.prototype),h=Function.apply.call(t,f,e);return s(h)?h:f}})},{16:16,3:3,33:33,35:35,40:40,51:51,7:7,70:70}],210:[function(t,e,n){var a=t(71),r=t(33),i=t(7),o=t(117);r(r.S+r.F*t(35)(function(){Reflect.defineProperty(a.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t),e=o(e,!0),i(n);try{return a.f(t,e,n),!0}catch(r){return!1}}})},{117:117,33:33,35:35,7:7,71:71}],211:[function(t,e,n){var a=t(33),r=t(74).f,i=t(7);a(a.S,"Reflect",{deleteProperty:function(t,e){var n=r(i(t),e);return n&&!n.configurable?!1:delete t[e]}})},{33:33,7:7,74:74}],212:[function(t,e,n){"use strict";var a=t(33),r=t(7),i=function(t){this._t=r(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};t(54)(i,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),a(a.S,"Reflect",{enumerate:function(t){return new i(t)}})},{33:33,54:54,7:7}],213:[function(t,e,n){var a=t(74),r=t(33),i=t(7);r(r.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return a.f(i(t),e)}})},{33:33,7:7,74:74}],214:[function(t,e,n){var a=t(33),r=t(78),i=t(7);a(a.S,"Reflect",{getPrototypeOf:function(t){return r(i(t))}})},{33:33,7:7,78:78}],215:[function(t,e,n){function a(t,e){var n,s,c=arguments.length<3?t:arguments[2];return u(t)===c?t[e]:(n=r.f(t,e))?o(n,"value")?n.value:void 0!==n.get?n.get.call(c):void 0:p(s=i(t))?a(s,e,c):void 0}var r=t(74),i=t(78),o=t(41),s=t(33),p=t(51),u=t(7);s(s.S,"Reflect",{get:a})},{33:33,41:41,51:51,7:7,74:74,78:78}],216:[function(t,e,n){var a=t(33);a(a.S,"Reflect",{has:function(t,e){return e in t}})},{33:33}],217:[function(t,e,n){var a=t(33),r=t(7),i=Object.isExtensible;a(a.S,"Reflect",{isExtensible:function(t){ -return r(t),i?i(t):!0}})},{33:33,7:7}],218:[function(t,e,n){var a=t(33);a(a.S,"Reflect",{ownKeys:t(84)})},{33:33,84:84}],219:[function(t,e,n){var a=t(33),r=t(7),i=Object.preventExtensions;a(a.S,"Reflect",{preventExtensions:function(t){r(t);try{return i&&i(t),!0}catch(e){return!1}}})},{33:33,7:7}],220:[function(t,e,n){var a=t(33),r=t(96);r&&a(a.S,"Reflect",{setPrototypeOf:function(t,e){r.check(t,e);try{return r.set(t,e),!0}catch(n){return!1}}})},{33:33,96:96}],221:[function(t,e,n){function a(t,e,n){var p,d,f=arguments.length<4?t:arguments[3],h=i.f(c(t),e);if(!h){if(l(d=o(t)))return a(d,e,n,f);h=u(0)}if(s(h,"value")){if(h.writable===!1||!l(f))return!1;if(p=i.f(f,e)){if(p.get||p.set||p.writable===!1)return!1;p.value=n,r.f(f,e,p)}else r.f(f,e,u(0,n));return!0}return void 0===h.set?!1:(h.set.call(f,n),!0)}var r=t(71),i=t(74),o=t(78),s=t(41),p=t(33),u=t(89),c=t(7),l=t(51);p(p.S,"Reflect",{set:a})},{33:33,41:41,51:51,7:7,71:71,74:74,78:78,89:89}],222:[function(t,e,n){var a=t(40),r=t(45),i=t(71).f,o=t(76).f,s=t(52),p=t(37),u=a.RegExp,c=u,l=u.prototype,d=/a/g,f=/a/g,h=new u(d)!==d;if(t(29)&&(!h||t(35)(function(){return f[t(126)("match")]=!1,u(d)!=d||u(f)==f||"/a/i"!=u(d,"i")}))){u=function(t,e){var n=this instanceof u,a=s(t),i=void 0===e;return!n&&a&&t.constructor===u&&i?t:r(h?new c(a&&!i?t.source:t,e):c((a=t instanceof u)?t.source:t,a&&i?p.call(t):e),n?this:l,u)};for(var m=(function(t){t in u||i(u,t,{configurable:!0,get:function(){return c[t]},set:function(e){c[t]=e}})}),g=o(c),v=0;g.length>v;)m(g[v++]);l.constructor=u,u.prototype=l,t(91)(a,"RegExp",u)}t(97)("RegExp")},{126:126,29:29,35:35,37:37,40:40,45:45,52:52,71:71,76:76,91:91,97:97}],223:[function(t,e,n){t(29)&&"g"!=/./g.flags&&t(71).f(RegExp.prototype,"flags",{configurable:!0,get:t(37)})},{29:29,37:37,71:71}],224:[function(t,e,n){t(36)("match",1,function(t,e,n){return[function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")},n]})},{36:36}],225:[function(t,e,n){t(36)("replace",2,function(t,e,n){return[function(a,r){"use strict";var i=t(this),o=void 0==a?void 0:a[e];return void 0!==o?o.call(a,i,r):n.call(i+"",a,r)},n]})},{36:36}],226:[function(t,e,n){t(36)("search",1,function(t,e,n){return[function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")},n]})},{36:36}],227:[function(t,e,n){t(36)("split",2,function(e,n,a){"use strict";var r=t(52),i=a,o=[].push,s="split",p="length",u="lastIndex";if("c"=="abbc"[s](/(b)*/)[1]||4!="test"[s](/(?:)/,-1)[p]||2!="ab"[s](/(?:ab)*/)[p]||4!="."[s](/(.?)(.?)/)[p]||"."[s](/()()/)[p]>1||""[s](/.?/)[p]){var c=void 0===/()??/.exec("")[1];a=function(t,e){var n=this+"";if(void 0===t&&0===e)return[];if(!r(t))return i.call(n,t,e);var a,s,l,d,f,h=[],m=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),g=0,v=void 0===e?4294967295:e>>>0,b=RegExp(t.source,m+"g");for(c||(a=RegExp("^"+b.source+"$(?!\\s)",m));(s=b.exec(n))&&(l=s.index+s[0][p],!(l>g&&(h.push(n.slice(g,s.index)),!c&&s[p]>1&&s[0].replace(a,function(){for(f=1;f1&&s.index=v)));)b[u]===s.index&&b[u]++;return g===n[p]?(d||!b.test(""))&&h.push(""):h.push(n.slice(g)),h[p]>v?h.slice(0,v):h}}else"0"[s](void 0,0)[p]&&(a=function(t,e){return void 0===t&&0===e?[]:i.call(this,t,e)});return[function(t,r){var i=e(this),o=void 0==t?void 0:t[n];return void 0!==o?o.call(t,i,r):a.call(i+"",t,r)},a]})},{36:36,52:52}],228:[function(t,e,n){"use strict";t(223);var a=t(7),r=t(37),i=t(29),o="toString",s=/./[o],p=function(e){t(91)(RegExp.prototype,o,e,!0)};t(35)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?p(function(){var t=a(this);return"/".concat(t.source,"/","flags"in t?t.flags:!i&&t instanceof RegExp?r.call(t):void 0)}):s.name!=o&&p(function(){return s.call(this)})},{223:223,29:29,35:35,37:37,7:7,91:91}],229:[function(t,e,n){"use strict";var a=t(19),r=t(123),i="Set";e.exports=t(22)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(r(this,i),t=0===t?0:t,t)}},a)},{123:123,19:19,22:22}],230:[function(t,e,n){"use strict";t(105)("anchor",function(t){return function(e){return t(this,"a","name",e)}})},{105:105}],231:[function(t,e,n){"use strict";t(105)("big",function(t){return function(){return t(this,"big","","")}})},{105:105}],232:[function(t,e,n){"use strict";t(105)("blink",function(t){return function(){return t(this,"blink","","")}})},{105:105}],233:[function(t,e,n){"use strict";t(105)("bold",function(t){return function(){return t(this,"b","","")}})},{105:105}],234:[function(t,e,n){"use strict";var a=t(33),r=t(103)(!1);a(a.P,"String",{codePointAt:function(t){return r(this,t)}})},{103:103,33:33}],235:[function(t,e,n){"use strict";var a=t(33),r=t(115),i=t(104),o="endsWith",s=""[o];a(a.P+a.F*t(34)(o),"String",{endsWith:function(t){var e=i(this,t,o),n=arguments.length>1?arguments[1]:void 0,a=r(e.length),p=void 0===n?a:Math.min(r(n),a),u=t+"";return s?s.call(e,u,p):e.slice(p-u.length,p)===u}})},{104:104,115:115,33:33,34:34}],236:[function(t,e,n){"use strict";t(105)("fixed",function(t){return function(){return t(this,"tt","","")}})},{105:105}],237:[function(t,e,n){"use strict";t(105)("fontcolor",function(t){return function(e){return t(this,"font","color",e)}})},{105:105}],238:[function(t,e,n){"use strict";t(105)("fontsize",function(t){return function(e){return t(this,"font","size",e)}})},{105:105}],239:[function(t,e,n){var a=t(33),r=t(111),i=String.fromCharCode,o=String.fromCodePoint;a(a.S+a.F*(!!o&&1!=o.length),"String",{fromCodePoint:function(t){for(var e,n=[],a=arguments.length,o=0;a>o;){if(e=+arguments[o++],r(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?i(e):i(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},{111:111,33:33}],240:[function(t,e,n){"use strict";var a=t(33),r=t(104),i="includes";a(a.P+a.F*t(34)(i),"String",{includes:function(t){return!!~r(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{104:104,33:33,34:34}],241:[function(t,e,n){"use strict";t(105)("italics",function(t){return function(){return t(this,"i","","")}})},{105:105}],242:[function(t,e,n){"use strict";var a=t(103)(!0);t(55)(String,"String",function(t){this._t=t+"",this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=a(e,n),this._i+=t.length,{value:t,done:!1})})},{103:103,55:55}],243:[function(t,e,n){"use strict";t(105)("link",function(t){return function(e){return t(this,"a","href",e)}})},{105:105}],244:[function(t,e,n){var a=t(33),r=t(114),i=t(115);a(a.S,"String",{raw:function(t){for(var e=r(t.raw),n=i(e.length),a=arguments.length,o=[],s=0;n>s;)o.push(e[s++]+""),a>s&&o.push(arguments[s]+"");return o.join("")}})},{114:114,115:115,33:33}],245:[function(t,e,n){var a=t(33);a(a.P,"String",{repeat:t(107)})},{107:107,33:33}],246:[function(t,e,n){"use strict";t(105)("small",function(t){return function(){return t(this,"small","","")}})},{105:105}],247:[function(t,e,n){"use strict";var a=t(33),r=t(115),i=t(104),o="startsWith",s=""[o];a(a.P+a.F*t(34)(o),"String",{startsWith:function(t){var e=i(this,t,o),n=r(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),a=t+"";return s?s.call(e,a,n):e.slice(n,n+a.length)===a}})},{104:104,115:115,33:33,34:34}],248:[function(t,e,n){"use strict";t(105)("strike",function(t){return function(){return t(this,"strike","","")}})},{105:105}],249:[function(t,e,n){"use strict";t(105)("sub",function(t){return function(){return t(this,"sub","","")}})},{105:105}],250:[function(t,e,n){"use strict";t(105)("sup",function(t){return function(){return t(this,"sup","","")}})},{105:105}],251:[function(t,e,n){"use strict";t(108)("trim",function(t){return function(){return t(this,3)}})},{108:108}],252:[function(t,e,n){"use strict";var a=t(40),r=t(41),i=t(29),o=t(33),s=t(91),p=t(65).KEY,u=t(35),c=t(100),l=t(98),d=t(121),f=t(126),h=t(125),m=t(124),g=t(32),v=t(49),b=t(7),y=t(51),_=t(114),x=t(117),w=t(89),k=t(70),S=t(75),E=t(74),C=t(71),P=t(80),A=E.f,O=C.f,T=S.f,R=a.Symbol,M=a.JSON,L=M&&M.stringify,j="prototype",D=f("_hidden"),N=f("toPrimitive"),F={}.propertyIsEnumerable,I=c("symbol-registry"),B=c("symbols"),q=c("op-symbols"),U=Object[j],V="function"==typeof R,G=a.QObject,z=!G||!G[j]||!G[j].findChild,W=i&&u(function(){return 7!=k(O({},"a",{get:function(){return O(this,"a",{value:7}).a}})).a})?function(t,e,n){var a=A(U,e);a&&delete U[e],O(t,e,n),a&&t!==U&&O(U,e,a)}:O,H=function(t){var e=B[t]=k(R[j]);return e._k=t,e},K=V&&"symbol"==typeof R.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof R},Q=function(t,e,n){return t===U&&Q(q,e,n),b(t),e=x(e,!0),b(n),r(B,e)?(n.enumerable?(r(t,D)&&t[D][e]&&(t[D][e]=!1),n=k(n,{enumerable:w(0,!1)})):(r(t,D)||O(t,D,w(1,{})),t[D][e]=!0),W(t,e,n)):O(t,e,n)},Y=function(t,e){b(t);for(var n,a=g(e=_(e)),r=0,i=a.length;i>r;)Q(t,n=a[r++],e[n]);return t},$=function(t,e){return void 0===e?k(t):Y(k(t),e)},J=function(t){var e=F.call(this,t=x(t,!0));return this===U&&r(B,t)&&!r(q,t)?!1:e||!r(this,t)||!r(B,t)||r(this,D)&&this[D][t]?e:!0},X=function(t,e){if(t=_(t),e=x(e,!0),t!==U||!r(B,e)||r(q,e)){var n=A(t,e);return!n||!r(B,e)||r(t,D)&&t[D][e]||(n.enumerable=!0),n}},Z=function(t){for(var e,n=T(_(t)),a=[],i=0;n.length>i;)r(B,e=n[i++])||e==D||e==p||a.push(e);return a},tt=function(t){for(var e,n=t===U,a=T(n?q:_(t)),i=[],o=0;a.length>o;)r(B,e=a[o++])&&(n?r(U,e):!0)&&i.push(B[e]);return i};V||(R=function(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var t=d(arguments.length>0?arguments[0]:void 0),e=function(n){this===U&&e.call(q,n),r(this,D)&&r(this[D],t)&&(this[D][t]=!1),W(this,t,w(1,n))};return i&&z&&W(U,t,{configurable:!0,set:e}),H(t)},s(R[j],"toString",function(){return this._k}),E.f=X,C.f=Q,t(76).f=S.f=Z,t(81).f=J,t(77).f=tt,i&&!t(59)&&s(U,"propertyIsEnumerable",J,!0),h.f=function(t){return H(f(t))}),o(o.G+o.W+o.F*!V,{Symbol:R});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),nt=0;et.length>nt;)f(et[nt++]);for(var at=P(f.store),rt=0;at.length>rt;)m(at[rt++]);o(o.S+o.F*!V,"Symbol",{"for":function(t){return r(I,t+="")?I[t]:I[t]=R(t)},keyFor:function(t){if(!K(t))throw TypeError(t+" is not a symbol!");for(var e in I)if(I[e]===t)return e},useSetter:function(){z=!0},useSimple:function(){z=!1}}),o(o.S+o.F*!V,"Object",{create:$,defineProperty:Q,defineProperties:Y,getOwnPropertyDescriptor:X,getOwnPropertyNames:Z,getOwnPropertySymbols:tt}),M&&o(o.S+o.F*(!V||u(function(){var t=R();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))})),"JSON",{stringify:function(t){for(var e,n,a=[t],r=1;arguments.length>r;)a.push(arguments[r++]);return n=e=a[1],!y(e)&&void 0===t||K(t)?void 0:(v(e)||(e=function(t,e){return"function"==typeof n&&(e=n.call(this,t,e)),K(e)?void 0:e}),a[1]=e,L.apply(M,a))}}),R[j][N]||t(42)(R[j],N,R[j].valueOf),l(R,"Symbol"),l(Math,"Math",!0),l(a.JSON,"JSON",!0)},{100:100,114:114,117:117,121:121,124:124,125:125,126:126,29:29,32:32,33:33,35:35,40:40,41:41,42:42,49:49,51:51,59:59,65:65,7:7,70:70,71:71,74:74,75:75,76:76,77:77,80:80,81:81,89:89,91:91,98:98}],253:[function(t,e,n){"use strict";var a=t(33),r=t(120),i=t(119),o=t(7),s=t(111),p=t(115),u=t(51),c=t(40).ArrayBuffer,l=t(101),d=i.ArrayBuffer,f=i.DataView,h=r.ABV&&c.isView,m=d.prototype.slice,g=r.VIEW,v="ArrayBuffer";a(a.G+a.W+a.F*(c!==d),{ArrayBuffer:d}),a(a.S+a.F*!r.CONSTR,v,{isView:function(t){return h&&h(t)||u(t)&&g in t}}),a(a.P+a.U+a.F*t(35)(function(){return!new d(2).slice(1,void 0).byteLength}),v,{slice:function(t,e){if(void 0!==m&&void 0===e)return m.call(o(this),t);for(var n=o(this).byteLength,a=s(t,n),r=s(void 0===e?n:e,n),i=new(l(this,d))(p(r-a)),u=new f(this),c=new f(i),h=0;r>a;)c.setUint8(h++,u.getUint8(a++));return i}}),t(97)(v)},{101:101,111:111,115:115,119:119,120:120,33:33,35:35,40:40,51:51,7:7,97:97}],254:[function(t,e,n){var a=t(33);a(a.G+a.W+a.F*!t(120).ABV,{DataView:t(119).DataView})},{119:119,120:120,33:33}],255:[function(t,e,n){t(118)("Float32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{118:118}],256:[function(t,e,n){t(118)("Float64",8,function(t){return function(e,n,a){return t(this,e,n,a)}})},{118:118}],257:[function(t,e,n){t(118)("Int16",2,function(t){return function(e,n,a){return t(this,e,n,a)}})},{118:118}],258:[function(t,e,n){t(118)("Int32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{118:118}],259:[function(t,e,n){t(118)("Int8",1,function(t){return function(e,n,a){return t(this,e,n,a)}})},{118:118}],260:[function(t,e,n){t(118)("Uint16",2,function(t){return function(e,n,a){return t(this,e,n,a)}})},{118:118}],261:[function(t,e,n){t(118)("Uint32",4,function(t){return function(e,n,a){return t(this,e,n,a)}})},{118:118}],262:[function(t,e,n){t(118)("Uint8",1,function(t){return function(e,n,a){return t(this,e,n,a)}})},{118:118}],263:[function(t,e,n){t(118)("Uint8",1,function(t){return function(e,n,a){return t(this,e,n,a)}},!0)},{118:118}],264:[function(t,e,n){"use strict";var a,r=t(12)(0),i=t(91),o=t(65),s=t(69),p=t(21),u=t(51),c=t(35),l=t(123),d="WeakMap",f=o.getWeak,h=Object.isExtensible,m=p.ufstore,g={},v=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},b={get:function(t){if(u(t)){var e=f(t);return e===!0?m(l(this,d)).get(t):e?e[this._i]:void 0}},set:function(t,e){return p.def(l(this,d),t,e)}},y=e.exports=t(22)(d,v,b,p,!0,!0);c(function(){return 7!=(new y).set((Object.freeze||Object)(g),7).get(g)})&&(a=p.getConstructor(v,d),s(a.prototype,b),o.NEED=!0,r(["delete","has","get","set"],function(t){var e=y.prototype,n=e[t];i(e,t,function(e,r){if(u(e)&&!h(e)){this._f||(this._f=new a);var i=this._f[t](e,r);return"set"==t?this:i}return n.call(this,e,r)})}))},{12:12,123:123,21:21,22:22,35:35,51:51,65:65,69:69,91:91}],265:[function(t,e,n){"use strict";var a=t(21),r=t(123),i="WeakSet";t(22)(i,function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(r(this,i),t,!0)}},a,!1,!0)},{123:123,21:21,22:22}],266:[function(t,e,n){"use strict";var a=t(33),r=t(38),i=t(116),o=t(115),s=t(3),p=t(15);a(a.P,"Array",{flatMap:function(t){var e,n,a=i(this);return s(t),e=o(a.length),n=p(a,0),r(n,a,a,e,0,1,t,arguments[1]),n}}),t(5)("flatMap")},{115:115,116:116,15:15,3:3,33:33,38:38,5:5}],267:[function(t,e,n){"use strict";var a=t(33),r=t(38),i=t(116),o=t(115),s=t(113),p=t(15);a(a.P,"Array",{flatten:function(){var t=arguments[0],e=i(this),n=o(e.length),a=p(e,0);return r(a,e,e,n,0,void 0===t?1:s(t)),a}}),t(5)("flatten")},{113:113,115:115,116:116,15:15,33:33,38:38,5:5}],268:[function(t,e,n){"use strict";var a=t(33),r=t(11)(!0);a(a.P,"Array",{includes:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(5)("includes")},{11:11,33:33,5:5}],269:[function(t,e,n){var a=t(33),r=t(67)(),i=t(40).process,o="process"==t(18)(i);a(a.G,{asap:function(t){var e=o&&i.domain;r(e?e.bind(t):t)}})},{18:18,33:33,40:40,67:67}],270:[function(t,e,n){var a=t(33),r=t(18);a(a.S,"Error",{isError:function(t){return"Error"===r(t)}})},{18:18,33:33}],271:[function(t,e,n){var a=t(33);a(a.G,{global:t(40)})},{33:33,40:40}],272:[function(t,e,n){t(94)("Map")},{94:94}],273:[function(t,e,n){t(95)("Map")},{95:95}],274:[function(t,e,n){var a=t(33);a(a.P+a.R,"Map",{toJSON:t(20)("Map")})},{20:20,33:33}],275:[function(t,e,n){var a=t(33);a(a.S,"Math",{clamp:function(t,e,n){return Math.min(n,Math.max(e,t))}})},{33:33}],276:[function(t,e,n){var a=t(33);a(a.S,"Math",{DEG_PER_RAD:Math.PI/180})},{33:33}],277:[function(t,e,n){var a=t(33),r=180/Math.PI;a(a.S,"Math",{degrees:function(t){return t*r}})},{33:33}],278:[function(t,e,n){var a=t(33),r=t(63),i=t(61);a(a.S,"Math",{fscale:function(t,e,n,a,o){return i(r(t,e,n,a,o))}})},{33:33,61:61,63:63}],279:[function(t,e,n){var a=t(33);a(a.S,"Math",{iaddh:function(t,e,n,a){var r=t>>>0,i=e>>>0,o=n>>>0;return i+(a>>>0)+((r&o|(r|o)&~(r+o>>>0))>>>31)|0}})},{33:33}],280:[function(t,e,n){var a=t(33);a(a.S,"Math",{imulh:function(t,e){var n=65535,a=+t,r=+e,i=a&n,o=r&n,s=a>>16,p=r>>16,u=(s*o>>>0)+(i*o>>>16);return s*p+(u>>16)+((i*p>>>0)+(u&n)>>16)}})},{33:33}],281:[function(t,e,n){var a=t(33);a(a.S,"Math",{isubh:function(t,e,n,a){var r=t>>>0,i=e>>>0,o=n>>>0;return i-(a>>>0)-((~r&o|~(r^o)&r-o>>>0)>>>31)|0}})},{33:33}],282:[function(t,e,n){var a=t(33);a(a.S,"Math",{RAD_PER_DEG:180/Math.PI})},{33:33}],283:[function(t,e,n){var a=t(33),r=Math.PI/180;a(a.S,"Math",{radians:function(t){return t*r}})},{33:33}],284:[function(t,e,n){var a=t(33);a(a.S,"Math",{scale:t(63)})},{33:33,63:63}],285:[function(t,e,n){var a=t(33);a(a.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},{33:33}],286:[function(t,e,n){var a=t(33);a(a.S,"Math",{umulh:function(t,e){var n=65535,a=+t,r=+e,i=a&n,o=r&n,s=a>>>16,p=r>>>16,u=(s*o>>>0)+(i*o>>>16);return s*p+(u>>>16)+((i*p>>>0)+(u&n)>>>16)}})},{33:33}],287:[function(t,e,n){"use strict";var a=t(33),r=t(116),i=t(3),o=t(71);t(29)&&a(a.P+t(73),"Object",{__defineGetter__:function(t,e){o.f(r(this),t,{get:i(e),enumerable:!0,configurable:!0})}})},{116:116,29:29,3:3,33:33,71:71,73:73}],288:[function(t,e,n){"use strict";var a=t(33),r=t(116),i=t(3),o=t(71);t(29)&&a(a.P+t(73),"Object",{__defineSetter__:function(t,e){o.f(r(this),t,{set:i(e),enumerable:!0,configurable:!0})}})},{116:116,29:29,3:3,33:33,71:71,73:73}],289:[function(t,e,n){var a=t(33),r=t(83)(!0);a(a.S,"Object",{entries:function(t){return r(t)}})},{33:33,83:83}],290:[function(t,e,n){var a=t(33),r=t(84),i=t(114),o=t(74),s=t(24);a(a.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,a=i(t),p=o.f,u=r(a),c={},l=0;u.length>l;)n=p(a,e=u[l++]),void 0!==n&&s(c,e,n);return c}})},{114:114,24:24,33:33,74:74,84:84}],291:[function(t,e,n){"use strict";var a=t(33),r=t(116),i=t(117),o=t(78),s=t(74).f;t(29)&&a(a.P+t(73),"Object",{__lookupGetter__:function(t){var e,n=r(this),a=i(t,!0);do if(e=s(n,a))return e.get;while(n=o(n))}})},{116:116,117:117,29:29,33:33,73:73,74:74,78:78}],292:[function(t,e,n){"use strict";var a=t(33),r=t(116),i=t(117),o=t(78),s=t(74).f;t(29)&&a(a.P+t(73),"Object",{__lookupSetter__:function(t){var e,n=r(this),a=i(t,!0);do if(e=s(n,a))return e.set;while(n=o(n))}})},{116:116,117:117,29:29,33:33,73:73,74:74,78:78}],293:[function(t,e,n){var a=t(33),r=t(83)(!1);a(a.S,"Object",{values:function(t){return r(t)}})},{33:33,83:83}],294:[function(t,e,n){"use strict";var a=t(33),r=t(40),i=t(23),o=t(67)(),s=t(126)("observable"),p=t(3),u=t(7),c=t(6),l=t(90),d=t(42),f=t(39),h=f.RETURN,m=function(t){return null==t?void 0:p(t)},g=function(t){var e=t._c;e&&(t._c=void 0,e())},v=function(t){return void 0===t._o},b=function(t){v(t)||(t._o=void 0,g(t))},y=function(t,e){u(t),this._c=void 0,this._o=t,t=new _(this);try{var n=e(t),a=n;null!=n&&("function"==typeof n.unsubscribe?n=function(){a.unsubscribe()}:p(n),this._c=n)}catch(r){return void t.error(r)}v(this)&&g(this)};y.prototype=l({},{unsubscribe:function(){b(this)}});var _=function(t){this._s=t};_.prototype=l({},{next:function(t){var e=this._s;if(!v(e)){var n=e._o;try{var a=m(n.next);if(a)return a.call(n,t)}catch(r){try{b(e)}finally{throw r}}}},error:function(t){var e=this._s;if(v(e))throw t;var n=e._o;e._o=void 0;try{var a=m(n.error);if(!a)throw t;t=a.call(n,t)}catch(r){try{g(e)}finally{throw r}}return g(e),t},complete:function(t){var e=this._s;if(!v(e)){var n=e._o;e._o=void 0;try{var a=m(n.complete);t=a?a.call(n,t):void 0}catch(r){try{g(e)}finally{throw r}}return g(e),t}}});var x=function(t){c(this,x,"Observable","_f")._f=p(t)};l(x.prototype,{subscribe:function(t){return new y(t,this._f)},forEach:function(t){var e=this;return new(i.Promise||r.Promise)(function(n,a){p(t);var r=e.subscribe({next:function(e){try{return t(e)}catch(n){a(n),r.unsubscribe()}},error:a,complete:n})})}}),l(x,{from:function(t){var e="function"==typeof this?this:x,n=m(u(t)[s]);if(n){var a=u(n.call(t));return a.constructor===e?a:new e(function(t){return a.subscribe(t)})}return new e(function(e){var n=!1;return o(function(){if(!n){try{if(f(t,!1,function(t){return e.next(t),n?h:void 0})===h)return}catch(a){if(n)throw a;return void e.error(a)}e.complete()}}),function(){n=!0}})},of:function(){for(var t=0,e=arguments.length,n=Array(e);e>t;)n[t]=arguments[t++];return new("function"==typeof this?this:x)(function(t){var e=!1;return o(function(){if(!e){for(var a=0;a1?arguments[1]:void 0,!1)}})},{106:106,122:122,33:33}],312:[function(t,e,n){"use strict";var a=t(33),r=t(106),i=t(122);a(a.P+a.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(i),"String",{padStart:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{106:106,122:122,33:33}],313:[function(t,e,n){"use strict";t(108)("trimLeft",function(t){return function(){return t(this,1)}},"trimStart")},{108:108}],314:[function(t,e,n){"use strict";t(108)("trimRight",function(t){return function(){return t(this,2)}},"trimEnd")},{108:108}],315:[function(t,e,n){t(124)("asyncIterator")},{124:124}],316:[function(t,e,n){t(124)("observable")},{124:124}],317:[function(t,e,n){var a=t(33);a(a.S,"System",{global:t(40)})},{33:33,40:40}],318:[function(t,e,n){t(94)("WeakMap")},{94:94}],319:[function(t,e,n){t(95)("WeakMap")},{95:95}],320:[function(t,e,n){t(94)("WeakSet")},{94:94}],321:[function(t,e,n){t(95)("WeakSet")},{95:95}],322:[function(t,e,n){for(var a=t(139),r=t(80),i=t(91),o=t(40),s=t(42),p=t(58),u=t(126),c=u("iterator"),l=u("toStringTag"),d=p.Array,f={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},h=r(f),m=0;m2,r=a?o.call(arguments,2):!1;return t(a?function(){("function"==typeof e?e:Function(e)).apply(this,r)}:e,n)}};r(r.G+r.B+r.F*s,{setTimeout:p(a.setTimeout),setInterval:p(a.setInterval)})},{122:122,33:33,40:40}],325:[function(t,e,n){t(252),t(189),t(191),t(190),t(193),t(195),t(200),t(194),t(192),t(202),t(201),t(197),t(198),t(196),t(188),t(199),t(203),t(204),t(155),t(157),t(156),t(206),t(205),t(176),t(186),t(187),t(177),t(178),t(179),t(180),t(181),t(182),t(183),t(184),t(185),t(159),t(160),t(161),t(162),t(163),t(164),t(165),t(166),t(167),t(168),t(169),t(170),t(171),t(172),t(173),t(174),t(175),t(239),t(244),t(251),t(242),t(234),t(235),t(240),t(245),t(247),t(230),t(231),t(232),t(233),t(236),t(237),t(238),t(241),t(243),t(246),t(248),t(249),t(250),t(150),t(152),t(151),t(154),t(153),t(138),t(136),t(143),t(140),t(146),t(148),t(135),t(142),t(132),t(147),t(130),t(145),t(144),t(137),t(141),t(129),t(131),t(134),t(133),t(149),t(139),t(222),t(228),t(223),t(224),t(225),t(226),t(227),t(207),t(158),t(229),t(264),t(265),t(253),t(254),t(259),t(262),t(263),t(257),t(260),t(258),t(261),t(255),t(256),t(208),t(209),t(210),t(211),t(212),t(215),t(213),t(214),t(216),t(217),t(218),t(219),t(221),t(220),t(268),t(266),t(267),t(309),t(312),t(311),t(313),t(314),t(310),t(315),t(316),t(290),t(293),t(289),t(287),t(288),t(291),t(292),t(274),t(308),t(273),t(307),t(319),t(321),t(272),t(306),t(318),t(320),t(271),t(317),t(270),t(275),t(276),t(277),t(278),t(279),t(281),t(280),t(282),t(283),t(284),t(286),t(285),t(295),t(296),t(297),t(298),t(300),t(299),t(302),t(301),t(303),t(304),t(305),t(269),t(294),t(324),t(323),t(322),e.exports=t(23)},{129:129,130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,188:188,189:189,190:190,191:191,192:192,193:193,194:194,195:195,196:196,197:197,198:198,199:199,200:200,201:201,202:202,203:203,204:204,205:205,206:206,207:207,208:208,209:209,210:210,211:211,212:212,213:213,214:214,215:215,216:216,217:217,218:218,219:219,220:220,221:221,222:222,223:223,224:224,225:225,226:226,227:227,228:228,229:229,23:23,230:230,231:231,232:232,233:233,234:234,235:235,236:236,237:237,238:238,239:239,240:240,241:241,242:242,243:243,244:244,245:245,246:246,247:247,248:248,249:249,250:250,251:251,252:252,253:253,254:254,255:255,256:256,257:257,258:258,259:259,260:260,261:261,262:262,263:263,264:264,265:265,266:266,267:267,268:268,269:269,270:270,271:271,272:272,273:273,274:274,275:275,276:276,277:277,278:278,279:279,280:280,281:281,282:282,283:283,284:284,285:285,286:286,287:287,288:288,289:289,290:290,291:291,292:292,293:293,294:294,295:295,296:296,297:297,298:298,299:299,300:300,301:301,302:302,303:303,304:304,305:305,306:306,307:307,308:308,309:309,310:310,311:311,312:312,313:313,314:314,315:315,316:316,317:317,318:318,319:319,320:320,321:321,322:322,323:323,324:324}],326:[function(t,e,n){!function(t){"use strict";function e(){return c.createDocumentFragment()}function n(t){return c.createElement(t)}function a(t){if(1===t.length)return r(t[0]);for(var n=e(),a=B.call(t),i=0;i-1}}([].indexOf||function(t){for(q=this.length;q--&&this[q]!==t;);return q}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e=p?e(i):document.fonts.load(u(i,i.family),s).then(function(e){1<=e.length?t(i):setTimeout(d,25)},function(){e(i)})};d()}else n(function(){function n(){var e;(e=-1!=g&&-1!=v||-1!=g&&-1!=b||-1!=v&&-1!=b)&&((e=g!=v&&g!=b&&v!=b)||(null===l&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),l=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=l&&(g==y&&v==y&&b==y||g==_&&v==_&&b==_||g==x&&v==x&&b==x)),e=!e),e&&(null!==w.parentNode&&w.parentNode.removeChild(w),clearTimeout(k),t(i))}function d(){if((new Date).getTime()-c>=p)null!==w.parentNode&&w.parentNode.removeChild(w),e(i);else{var t=document.hidden;(!0===t||void 0===t)&&(g=f.a.offsetWidth,v=h.a.offsetWidth,b=m.a.offsetWidth,n()),k=setTimeout(d,50)}}var f=new a(s),h=new a(s),m=new a(s),g=-1,v=-1,b=-1,y=-1,_=-1,x=-1,w=document.createElement("div"),k=0;w.dir="ltr",r(f,u(i,"sans-serif")),r(h,u(i,"serif")),r(m,u(i,"monospace")),w.appendChild(f.a),w.appendChild(h.a),w.appendChild(m.a),document.body.appendChild(w),y=f.a.offsetWidth,_=h.a.offsetWidth,x=m.a.offsetWidth,d(),o(f,function(t){g=t,n()}),r(f,u(i,'"'+i.family+'",sans-serif')),o(h,function(t){v=t,n()}),r(h,u(i,'"'+i.family+'",serif')),o(m,function(t){b=t,n()}),r(m,u(i,'"'+i.family+'",monospace'))})})},window.FontFaceObserver=s,window.FontFaceObserver.prototype.check=s.prototype.a,void 0!==e&&(e.exports=window.FontFaceObserver)}()},{}],329:[function(t,e,n){!function(t,n){function a(t,e){var n=t.createElement("p"),a=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function r(){var t=_.elements;return"string"==typeof t?t.split(" "):t}function i(t,e){var n=_.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),_.elements=n+" "+t,c(e)}function o(t){var e=y[t[v]];return e||(e={},b++,t[v]=b,y[b]=e),e}function s(t,e,a){if(e||(e=n),d)return e.createElement(t);a||(a=o(e));var r;return r=a.cache[t]?a.cache[t].cloneNode():g.test(t)?(a.cache[t]=a.createElem(t)).cloneNode():a.createElem(t),!r.canHaveChildren||m.test(t)||r.tagUrn?r:a.frag.appendChild(r)}function p(t,e){if(t||(t=n),d)return t.createDocumentFragment();e=e||o(t);for(var a=e.frag.cloneNode(),i=0,s=r(),p=s.length;p>i;i++)a.createElement(s[i]);return a}function u(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return _.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(_,e.frag)}function c(t){t||(t=n);var e=o(t);return!_.shivCSS||l||e.hasCSS||(e.hasCSS=!!a(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),d||u(t,e),t}var l,d,f="3.7.3-pre",h=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,g=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",l="hidden"in t,d=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){l=!0,d=!0}}();var _={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:f,shivCSS:h.shivCSS!==!1,supportsUnknownElements:d,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:c,createElement:s,createDocumentFragment:p,addElements:i};t.html5=_,c(n),"object"==typeof e&&e.exports&&(e.exports=_)}("undefined"!=typeof window?window:this,document)},{}],330:[function(t,e,n){(function(t){(function(t){!function(t){function e(t,e,n,a){for(var i,o,s=n.slice(),p=r(e,t),u=0,c=s.length;c>u&&(i=s[u],"object"==typeof i?"function"==typeof i.handleEvent&&i.handleEvent(p):i.call(t,p),!p.stoppedImmediatePropagation);u++);return o=!p.stoppedPropagation,a&&o&&t.parentNode?t.parentNode.dispatchEvent(p):!p.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function a(t,e,a){var r=y(e||t,a);v(t,"textContent",n(function(){return r.get.call(this)},function(t){r.set.call(this,t)}))}function r(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function i(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function p(t){!f&&S.test(document.readyState)&&(f=!f,document.detachEvent(h,p),t=document.createEvent("Event"),t.initEvent(m,!0,!0),document.dispatchEvent(t))}function u(t){return function(){return P[t]||document.body&&document.body[t]||0}}function c(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function l(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var d=!0,f=!1,h="onreadystatechange",m="DOMContentLoaded",g="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},b=Object.defineProperties||function(e,n){for(var a in n)if(_.call(n,a))try{v(e,a,n[a])}catch(r){t.console&&console.log(a+" failed on object:",e,r.message)}},y=Object.getOwnPropertyDescriptor,_=Object.prototype.hasOwnProperty,x=t.Element.prototype,w=t.Text.prototype,k=/^[a-z]+$/,S=/loaded|complete/,E={},C=document.createElement("div"),P=document.documentElement,A=P.removeAttribute,O=P.setAttribute,T=function(t){return{enumerable:!0,writable:!0,configurable:!0,value:t}};a(t.HTMLCommentElement.prototype,x,"nodeValue"),a(t.HTMLScriptElement.prototype,null,"text"),a(w,null,"nodeValue"),a(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(y(t.CSSStyleSheet.prototype,"cssText")));var R=/\b\s*alpha\s*\(\s*opacity\s*=\s*(\d+)\s*\)/;v(t.CSSStyleDeclaration.prototype,"opacity",{get:function(){var t=this.filter.match(R);return t?""+t[1]/100:""},set:function(t){this.zoom=1;var e=!1;t=1>t?" alpha(opacity="+Math.round(100*t)+")":"",this.filter=this.filter.replace(R,function(){return e=!0,t}),!e&&t&&(this.filter+=t)}}),b(x,{textContent:{get:o,set:c},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:T(function(t,n,a){if("function"==typeof n||"object"==typeof n){var r,o,p=this,u="on"+t,c=p[g]||v(p,g,{value:{}})[g],d=c[u]||(c[u]={}),f=d.h||(d.h=[]);if(!_.call(d,"w")){if(d.w=function(t){return t[g]||e(p,l(p,t),f,!1)},!_.call(E,u))if(k.test(t)){try{r=document.createEventObject(),r[g]=!0,9!=p.nodeType&&(null==p.parentNode&&C.appendChild(p),(o=p.getAttribute(u))&&A.call(p,u)),p.fireEvent(u,r),E[u]=!0}catch(h){for(E[u]=!1;C.hasChildNodes();)C.removeChild(C.firstChild)}null!=o&&O.call(p,u,o)}else E[u]=!1;(d.n=E[u])&&p.attachEvent(u,d.w)}i(f,n)<0&&f[a?"unshift":"push"](n),"input"===t&&p.attachEvent("onkeyup",s)}}),dispatchEvent:T(function(t){var n,a=this,r="on"+t.type,i=a[g],o=i&&i[r],s=!!o;return t.target||(t.target=a),s?o.n?a.fireEvent(r,t):e(a,t,o.h,!0):(n=a.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}),removeEventListener:T(function(t,e,n){if("function"==typeof e||"object"==typeof e){var a=this,r="on"+t,o=a[g],s=o&&o[r],p=s&&s.h,u=p?i(p,e):-1;u>-1&&p.splice(u,1)}})}),b(w,{addEventListener:T(x.addEventListener),dispatchEvent:T(x.dispatchEvent),removeEventListener:T(x.removeEventListener)}),b(t.XMLHttpRequest.prototype,{addEventListener:T(function(t,e,n){var a=this,r="on"+t,o=a[g]||v(a,g,{value:{}})[g],s=o[r]||(o[r]={}),p=s.h||(s.h=[]);i(p,e)<0&&(a[r]||(a[r]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),a.dispatchEvent(e)}),p[n?"unshift":"push"](e))}),dispatchEvent:T(function(t){var n=this,a="on"+t.type,r=n[g],i=r&&r[a],o=!!i;return o&&(i.n?n.fireEvent(a,t):e(n,t,i.h,!0))}),removeEventListener:T(x.removeEventListener)});var M=y(Event.prototype,"button").get;b(t.Event.prototype,{bubbles:T(!0),cancelable:T(!0),preventDefault:T(function(){this.cancelable&&(this.returnValue=!1)}),stopPropagation:T(function(){this.stoppedPropagation=!0,this.cancelBubble=!0}),stopImmediatePropagation:T(function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}),initEvent:T(function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}),pageX:{get:function(){return this._pageX||(this._pageX=this.clientX+t.scrollX-(P.clientLeft||0))}},pageY:{get:function(){return this._pageY||(this._pageY=this.clientY+t.scrollY-(P.clientTop||0))}},which:{get:function(){return this.keyCode?this.keyCode:isNaN(this.button)?void 0:this.button+1}},charCode:{get:function(){return this.keyCode&&"keypress"==this.type?this.keyCode:0}},buttons:{get:function(){return M.call(this)}},button:{get:function(){var t=this.buttons;return 1&t?0:2&t?2:4&t?1:void 0}},defaultPrevented:{get:function(){var t,e=this.returnValue;return!(e===t||e)}},relatedTarget:{get:function(){var t=this.type;return"mouseover"===t?this.fromElement:"mouseout"===t?this.toElement:null}}}),b(t.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&c.call(this,t)}},addEventListener:T(function(e,n,a){var r=this;x.addEventListener.call(r,e,n,a),d&&e===m&&!S.test(r.readyState)&&(d=!1,r.attachEvent(h,p),t==top&&!function i(t){try{r.documentElement.doScroll("left"),p()}catch(e){setTimeout(i,50)}}())}),dispatchEvent:T(x.dispatchEvent),removeEventListener:T(x.removeEventListener),createEvent:T(function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e})}),b(t.Window.prototype,{getComputedStyle:T(function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,r=/\-([a-z])/g,i=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,p=this._,u=p.style,c=p.currentStyle,l=p.runtimeStyle;return"opacity"==t?u.opacity||"1":(t=("float"===t?"style-float":t).replace(r,i),e=c?c[t]:u[t],n.test(e)&&!a.test(t)&&(o=u.left,s=l&&l.left,s&&(l.left=c.left),u.left="fontSize"===t?"1em":e,e=u.pixelLeft+"px",u.left=o,s&&(l.left=s)),null==e?e:e+""||"auto")},e.prototype.getPropertyValue=function(){return null},function(n,a){return a?new e(n):new t(n)}}()),addEventListener:T(function(n,a,r){var o,s=t,p="on"+n;s[p]||(s[p]=function(t){return e(s,l(s,t),o,!1)&&void 0}),o=s[p][g]||(s[p][g]=[]),i(o,a)<0&&o[r?"unshift":"push"](a)}),dispatchEvent:T(function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}),removeEventListener:T(function(e,n,a){var r="on"+e,o=(t[r]||Object)[g],s=o?i(o,n):-1;s>-1&&o.splice(s,1)}),pageXOffset:{get:u("scrollLeft")},pageYOffset:{get:u("scrollTop")},scrollX:{get:u("scrollLeft")},scrollY:{get:u("scrollTop")},innerWidth:{get:u("clientWidth")},innerHeight:{get:u("clientHeight")}}),t.HTMLElement=t.Element,function(t,e,n){for(n=0;na;a++)e.appendChild(n[a].cloneNode(!0));return e},n.cloneRange=function(){var t=new e;return t._start=this._start,t._end=this._end,t},n.deleteContents=function(){for(var e=this._start.parentNode,n=t(this._start,this._end),a=0,r=n.length;r>a;a++)e.removeChild(n[a])},n.extractContents=function(){for(var e=this._start.ownerDocument.createDocumentFragment(),n=t(this._start,this._end),a=0,r=n.length;r>a;a++)e.appendChild(n[a]);return e},n.setEndAfter=function(t){this._end=t},n.setEndBefore=function(t){this._end=t.previousSibling},n.setStartAfter=function(t){this._start=t.nextSibling},n.setStartBefore=function(t){this._start=t}}}()}}(this.window||t)}).call(this,void 0!==t?t:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],331:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e=s)return(0,p["default"])({points:n});for(var l=1;s-1>=l;l++)i.push((0,u.times)(a,(0,u.minus)(n[l],n[l-1])));for(var d=[(0,u.plus)(n[0],c(i[0],i[1]))],l=1;s-2>=l;l++)d.push((0,u.minus)(n[l],(0,u.average)([i[l],i[l-1]])));d.push((0,u.minus)(n[s-1],c(i[s-2],i[s-3])));var f=d[0],h=d[1],m=n[0],g=n[1],v=(e=(0,o["default"])()).moveto.apply(e,r(m)).curveto(f[0],f[1],h[0],h[1],g[0],g[1]);return{path:(0,u.range)(2,s).reduce(function(t,e){var a=d[e],r=n[e];return t.smoothcurveto(a[0],a[1],r[0],r[1])},v),centroid:(0,u.average)(n)}},e.exports=n["default"]},{334:334,335:335,336:336}],332:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=t(333),o=a(i),s=t(334),p=1e-5,u=function(t,e){var n=t.map(e),a=n.sort(function(t,e){var n=r(t,2),a=n[0],i=(n[1],r(e,2)),o=i[0];i[1];return a-o}),i=a.length,o=a[0][0],u=a[i-1][0],c=(0,s.minBy)(a,function(t){return t[1]}),l=(0,s.maxBy)(a,function(t){return t[1]});return o==u&&(u+=p),c==l&&(l+=p),{points:a,xmin:o,xmax:u,ymin:c,ymax:l}};n["default"]=function(t){var e=t.data,n=t.xaccessor,a=t.yaccessor,i=t.width,p=t.height,c=t.closed,l=t.min,d=t.max;n||(n=function(t){var e=r(t,2),n=e[0];e[1];return n}),a||(a=function(t){var e=r(t,2),n=(e[0],e[1]);return n});var f=function(t){return[n(t),a(t)]},h=e.map(function(t){return u(t,f)}),m=(0,s.minBy)(h,function(t){return t.xmin}),g=(0,s.maxBy)(h,function(t){return t.xmax}),v=null==l?(0,s.minBy)(h,function(t){return t.ymin}):l,b=null==d?(0,s.maxBy)(h,function(t){return t.ymax}):d;c&&(v=Math.min(v,0),b=Math.max(b,0));var y=c?0:v,_=(0,o["default"])([m,g],[0,i]),x=(0,o["default"])([v,b],[p,0]),w=function(t){var e=r(t,2),n=e[0],a=e[1];return[_(n),x(a)]};return{arranged:h,scale:w,xscale:_,yscale:x,base:y}},e.exports=n["default"]},{333:333,334:334}],333:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t,e){var n=a(t,2),r=n[0],o=n[1],s=a(e,2),p=s[0],u=s[1],c=function(t){return p+(u-p)*(t-r)/(o-r)};return c.inverse=function(){return i([p,u],[r,o])},c};n["default"]=r,e.exports=n["default"]},{}],334:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(t){return t.reduce(function(t,e){return t+e},0)},i=function(t){return t.reduce(function(t,e){return Math.min(t,e)})},o=function(t){return t.reduce(function(t,e){return Math.max(t,e)})},s=function(t,e){return t.reduce(function(t,n){return t+e(n)},0)},p=function(t,e){return t.reduce(function(t,n){return Math.min(t,e(n))},1/0)},u=function(t,e){return t.reduce(function(t,n){return Math.max(t,e(n))},-(1/0))},c=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],p=o[1];return[r+s,i+p]},l=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],p=o[1];return[r-s,i-p]},d=function(t,e){var n=a(e,2),r=n[0],i=n[1];return[t*r,t*i]},f=function(t){var e=a(t,2),n=e[0],r=e[1];return Math.sqrt(n*n+r*r)},h=function(t){return t.reduce(c,[0,0])},m=function(t){return d(1/t.length,t.reduce(c))},g=function(t,e){return d(t,[Math.sin(e),-Math.cos(e)])},v=function(t,e){var n=t||{};for(var a in n){var r=n[a];e[a]=r(e.index,e.item,e.group)}return e},b=function(t,e,n){for(var a=[],r=t;e>r;r++)a.push(r);return n&&a.push(e),a},y=function(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=Object.keys(t)[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var p=o.value,u=t[p];n.push(e(p,u))}}catch(c){r=!0,i=c}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n},_=function(t){return y(t,function(t,e){return[t,e]})},x=function(t){return t};n.sum=r,n.min=i,n.max=o,n.sumBy=s,n.minBy=p,n.maxBy=u,n.plus=c,n.minus=l,n.times=d,n.id=x,n.length=f,n.sumVectors=h,n.average=m,n.onCircle=g,n.enhance=v,n.range=b,n.mapObject=y,n.pairs=_,n["default"]={sum:r,min:i,max:o,sumBy:s,minBy:p,maxBy:u,plus:c,minus:l,times:d,id:x,length:f,sumVectors:h,average:m,onCircle:g,enhance:v,range:b,mapObject:y,pairs:_}},{}],335:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(p){r=!0,i=p}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t){var e=t||[],n=function(t,e){var n=t.slice(0,t.length);return n.push(e),n},r=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],p=o[1];return r===s&&i===p},o=function(t,e){for(var n=t.length;"0"===t.charAt(n-1);)n-=1;return"."===t.charAt(n-1)&&(n-=1),t.substr(0,n)},s=function(t,e){var n=t.toFixed(e);return o(n)},p=function(t){var e=t.command,n=t.params,a=n.map(function(t){return s(t,6)});return e+" "+a.join(" ")},u=function(t,e){var n=t.command,r=t.params,i=a(e,2),o=i[0],s=i[1];switch(n){case"M":return[r[0],r[1]];case"L":return[r[0],r[1]];case"H":return[r[0],s];case"V":return[o,r[0]];case"Z":return null;case"C":return[r[4],r[5]];case"S":return[r[2],r[3]];case"Q":return[r[2],r[3]];case"T":return[r[0],r[1]];case"A":return[r[5],r[6]]}},c=function(t,e){return function(n){var a="object"==typeof n?t.map(function(t){return n[t]}):arguments;return e.apply(null,a)}},l=function(t){return i(n(e,t))};return{moveto:c(["x","y"],function(t,e){return l({command:"M",params:[t,e]})}),lineto:c(["x","y"],function(t,e){return l({command:"L",params:[t,e]})}),hlineto:c(["x"],function(t){return l({command:"H",params:[t]})}),vlineto:c(["y"],function(t){return l({command:"V",params:[t]})}),closepath:function(){return l({command:"Z",params:[]})},curveto:c(["x1","y1","x2","y2","x","y"],function(t,e,n,a,r,i){return l({command:"C",params:[t,e,n,a,r,i]})}),smoothcurveto:c(["x2","y2","x","y"],function(t,e,n,a){return l({command:"S",params:[t,e,n,a]})}),qcurveto:c(["x1","y1","x","y"],function(t,e,n,a){return l({command:"Q",params:[t,e,n,a]})}),smoothqcurveto:c(["x","y"],function(t,e){return l({command:"T",params:[t,e]})}),arc:c(["rx","ry","xrot","largeArcFlag","sweepFlag","x","y"],function(t,e,n,a,r,i,o){return l({command:"A",params:[t,e,n,a,r,i,o]})}),print:function(){return e.map(p).join(" ")},points:function(){var t=[],n=[0,0],a=!0,r=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var p=o.value,c=u(p,n);n=c,c&&t.push(c)}}catch(l){r=!0,i=l}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return t},instructions:function(){return e.slice(0,e.length)},connect:function(t){var e=this.points(),n=e[e.length-1],a=t.points()[0],o=t.instructions().slice(1);return r(n,a)||o.unshift({command:"L",params:a}),i(this.instructions().concat(o))}}};n["default"]=function(){return r()},e.exports=n["default"]},{}],336:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];for(var r,i;i=n.shift();)for(r in i)Mo.call(i,r)&&(t[r]=i[r]);return t}function r(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function i(t){return"[object Array]"===Lo.call(t)}function o(t){return jo.test(Lo.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function p(t){return!isNaN(parseFloat(t))&&isFinite(t)}function u(t){return t&&"[object Object]"===Lo.call(t)}function c(t,e){return t.replace(/%s/g,function(){return e.shift()})}function l(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a]; -throw t=c(t,n),Error(t)}function d(){Mg.DEBUG&&Oo.apply(null,arguments)}function f(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),To(t,n)}function h(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),Do[t]||(Do[t]=!0,To(t,n))}function m(){Mg.DEBUG&&f.apply(null,arguments)}function g(){Mg.DEBUG&&h.apply(null,arguments)}function v(t,e,n){var a=b(t,e,n);return a?a[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function _(t){var e,n,a,r,i,o;for(e=t.split("."),(n=zo[e.length])||(n=x(e.length)),i=[],a=function(t,n){return t?"*":e[n]},r=n.length;r--;)o=n[r].map(a).join("."),i.hasOwnProperty(o)||(i.push(o),i[o]=!0);return i}function x(t){var e,n,a,r,i,o,s,p,u="";if(!zo[t]){for(a=[];u.length=i;i+=1){for(n=i.toString(2);n.lengtho;o++)p.push(r(n[o]));a[i]=p}zo[t]=a}return zo[t]}function w(t,e,n,a){var r=t[e];if(!r||!r.equalsOrStartsWith(a)&&r.equalsOrStartsWith(n))return t[e]=r?r.replace(n,a):a,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&p(e)?+e:e}function S(t){return null==t?t:(Ko.hasOwnProperty(t)||(Ko[t]=new Qo(t)),Ko[t])}function E(t,e){function n(e,n){var a,r,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(a=t.viewmodel.wrapped[n.str],r=a?a.get():t.viewmodel.get(n),o=r?Object.keys(r):null),o&&o.forEach(function(t){"_ractive"===t&&i(r)||e.push(n.join(t))}),e}var a,r,o;for(a=e.str.split("."),o=[$o];r=a.shift();)"*"===r?o=o.reduce(n,[]):o[0]===$o?o[0]=S(r):o=o.map(C(r));return o}function C(t){return function(e){return e.join(t)}}function P(t){return t?t.replace(Wo,".$1"):""}function A(t,e,n){if("string"!=typeof e||!p(n))throw Error("Bad arguments");var a=void 0,r=void 0;if(/\*/.test(e))return r={},E(t,S(P(e))).forEach(function(e){var a=t.viewmodel.get(e);if(!p(a))throw Error(Xo);r[e.str]=a+n}),t.set(r);if(a=t.get(e),!p(a))throw Error(Xo);return t.set(e,+a+n)}function O(t,e){return Jo(this,t,void 0===e?1:+e)}function T(t){this.event=t,this.method="on"+t,this.deprecate=as[t]}function R(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function M(t,e){for(var n=0,a=t.length;a>n;n++)if(t[n]==e)return!0;return!1}function L(t,e){var n;if(!i(t)||!i(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function j(t){return"string"==typeof t?[t]:void 0===t?[]:t}function D(t){return t[t.length-1]}function N(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function F(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function I(t){setTimeout(t,0)}function B(t,e){return function(){for(var n;n=t.shift();)n(e)}}function q(t,e,n,a){var r;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof rs)e.then(n,a);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{r=e.then}catch(i){return void a(i)}if("function"==typeof r){var o,s,p;s=function(e){o||(o=!0,q(t,e,n,a))},p=function(t){o||(o=!0,a(t))};try{r.call(e,s,p)}catch(i){if(!o)return a(i),void(o=!0)}}else n(e)}}function U(t,e,n){var a;return e=P(e),"~/"===e.substr(0,2)?(a=S(e.substring(2)),z(t,a.firstKey,n)):"."===e[0]?(a=V(cs(n),e),a&&z(t,a.firstKey,n)):a=G(t,S(e),n),a}function V(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return S(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),S(n.join("."))}return S(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function G(t,e,n,a){var r,i,o,s,p;if(e.isRoot)return e;for(i=e.firstKey;n;)if(r=n.context,n=n.parent,r&&(s=!0,o=t.viewmodel.get(r),o&&("object"==typeof o||"function"==typeof o)&&i in o))return r.join(e.str);return W(t.viewmodel,i)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,i=S(i),p=G(t.parent,i,n,!0))?(t.viewmodel.map(i,{origin:t.parent.viewmodel,keypath:p}),e):a||s?void 0:(t.viewmodel.set(e,void 0),e)}function z(t,e){var n;!t.parent||t.isolated||W(t.viewmodel,e)||(e=S(e),(n=G(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function W(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function H(t){t.teardown()}function K(t){t.unbind()}function Q(t){t.unrender()}function Y(t){t.cancel()}function $(t){t.detach()}function J(t){t.detachNodes()}function X(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function Z(){for(var t,e,n;fs.ractives.length;)e=fs.ractives.pop(),n=e.viewmodel.applyChanges(),n&&vs.fire(e,n);for(tt(),t=0;t=0;i--)r=t._subs[e[i]],r&&(s=vt(t,r,n,a)&&s);if(Gs.dequeue(t),t.parent&&s){if(o&&t.component){var p=t.component.name+"."+e[e.length-1];e=S(p).wildcardMatches(),n&&(n.component=t)}gt(t.parent,e,n,a)}}function vt(t,e,n,a){var r=null,i=!1;n&&!n._noArg&&(a=[n].concat(a)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,a)===!1&&(i=!0);return n&&!n._noArg&&i&&(r=n.original)&&(r.preventDefault&&r.preventDefault(),r.stopPropagation&&r.stopPropagation()),!i}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};zs(this,t,e)}function yt(t){var e;return t=S(P(t)),e=this.viewmodel.get(t,Ks),void 0===e&&this.parent&&!this.isolated&&ls(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function _t(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,xt(this)}function xt(t){Ys.fire(t),t.findAllComponents("*").forEach(function(t){xt(t.instance)})}function wt(t,e,n){var a,r;return t=S(P(t)),a=this.viewmodel.get(t),i(a)&&i(e)?(r=bs.start(this,!0),this.viewmodel.merge(t,a,e,n),bs.end(),r):this.set(t,e,n&&n.complete)}function kt(t,e){var n,a;return n=E(t,e),a={},n.forEach(function(e){a[e.str]=t.get(e.str)}),a}function St(t,e,n,a){var r,i,o;e=S(P(e)),a=a||cp,e.isPattern?(r=new pp(t,e,n,a),t.viewmodel.patternObservers.push(r),i=!0):r=new Zs(t,e,n,a),r.init(a.init),t.viewmodel.register(e,r,i?"patternObservers":"observers"),r.ready=!0;var s={cancel:function(){var n;o||(i?(n=t.viewmodel.patternObservers.indexOf(r),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,r,"patternObservers")):t.viewmodel.unregister(e,r,"observers"),o=!0)}};return t._observers.push(s),s}function Et(t,e,n){var a,r,i,o;if(u(t)){n=e,r=t,a=[];for(t in r)r.hasOwnProperty(t)&&(e=r[t],a.push(this.observe(t,e,n)));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",up(this,t,e,n);if(i=t.split(" "),1===i.length)return up(this,t,e,n);for(a=[],o=i.length;o--;)t=i[o],t&&a.push(up(this,t,e,n));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}function Ct(t,e,n){var a=this.observe(t,function(){e.apply(this,arguments),a.cancel()},{init:!1,defer:n&&n.defer});return a}function Pt(t,e){var n,a=this;if(t)n=t.split(" ").map(fp).filter(hp),n.forEach(function(t){var n,r;(n=a._subs[t])&&(e?(r=n.indexOf(e),-1!==r&&n.splice(r,1)):a._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function At(t,e){var n,a,r,i=this;if("object"==typeof t){n=[];for(a in t)t.hasOwnProperty(a)&&n.push(this.on(a,t[a]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return r=t.split(" ").map(fp).filter(hp),r.forEach(function(t){(i._subs[t]||(i._subs[t]=[])).push(e)}),{cancel:function(){return i.off(t,e)}}}function Ot(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Tt(t,e,n){var a,r,i,o,s,p,u=[];if(a=Rt(t,e,n),!a)return null;for(r=t.length,s=a.length-2-a[1],i=Math.min(r,a[0]),o=i+a[1],p=0;i>p;p+=1)u.push(p);for(;o>p;p+=1)u.push(-1);for(;r>p;p+=1)u.push(p+s);return 0!==s?u.touchedFrom=a[0]:u.touchedFrom=t.length,u}function Rt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Mt(e,n){var a,r,i,o=this;if(i=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),a=bs.start(this,!0),bs.scheduleTask(function(){return Rp.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&Lt(s),e.innerHTML=""}return this.cssId&&Op.apply(),e&&((r=e.__ractive_instances__)?r.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),bs.end(),this.transitionsEnabled=i,a.then(function(){return Mp.fire(o)})}function Lt(t){t.splice(0,t.length).forEach(H)}function jt(t,e){for(var n=t.slice(),a=e.length;a--;)~n.indexOf(e[a])||n.push(e[a]);return n}function Dt(t,e){var n,a,r;return a='[data-ractive-css~="{'+e+'}"]',r=function(t){var e,n,r,i,o,s,p,u=[];for(e=[];n=Ip.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(i=e.map(Ft),p=e.length;p--;)s=i.slice(),r=e[p],s[p]=r.base+a+r.modifiers||"",o=i.slice(),o[p]=a+" "+o[p],u.push(s.join(" "),o.join(" "));return u.join(", ")},n=qp.test(t)?t.replace(qp,a):t.replace(Fp,"").replace(Np,function(t,e){var n,a;return Bp.test(e)?t:(n=e.split(",").map(Nt),a=n.map(r).join(", ")+" ",t.replace(e,a))})}function Nt(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function Ft(t){return t.str}function It(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?l("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Bt(t,e){It(e);var n="function"==typeof t,a="function"==typeof e;return e||n||(e={}),n||a?function(){var r=a?qt(e,this):e,i=n?qt(t,this):t;return Ut(r,i)}:Ut(e,t)}function qt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&l("Data function must return an object"),n.constructor!==Object&&g("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Ut(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function Vt(t){var e=So(Qp);return e.parse=function(e,n){return Gt(e,n||t)},e}function Gt(t,e){if(!Hp)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return Hp(t,e||this.options)}function zt(t,e){var n;if(!Xi){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Wt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a