summaryrefslogtreecommitdiff
path: root/node_modules/underscore
diff options
context:
space:
mode:
author8cy <[email protected]>2020-04-03 02:37:42 -0700
committer8cy <[email protected]>2020-04-03 02:37:42 -0700
commit60867fb030bae582082340ead7dbc7efdc2f5398 (patch)
tree4c6a7356351be2e4914e15c4703172597c45656e /node_modules/underscore
parentcommenting (diff)
downloads5nical-60867fb030bae582082340ead7dbc7efdc2f5398.tar.xz
s5nical-60867fb030bae582082340ead7dbc7efdc2f5398.zip
2020/04/03, 02:34, v1.2.0
Diffstat (limited to 'node_modules/underscore')
-rw-r--r--node_modules/underscore/LICENSE23
-rw-r--r--node_modules/underscore/README.md28
-rw-r--r--node_modules/underscore/modules/.eslintrc12
-rw-r--r--node_modules/underscore/modules/index-all.js2
-rw-r--r--node_modules/underscore/modules/index-default.js9
-rw-r--r--node_modules/underscore/modules/index.js1678
-rw-r--r--node_modules/underscore/package.json98
-rw-r--r--node_modules/underscore/underscore-min.js6
-rw-r--r--node_modules/underscore/underscore-min.js.map1
-rw-r--r--node_modules/underscore/underscore.js1827
-rw-r--r--node_modules/underscore/underscore.js.map1
11 files changed, 3685 insertions, 0 deletions
diff --git a/node_modules/underscore/LICENSE b/node_modules/underscore/LICENSE
new file mode 100644
index 0000000..8c22362
--- /dev/null
+++ b/node_modules/underscore/LICENSE
@@ -0,0 +1,23 @@
+Copyright (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/underscore/README.md b/node_modules/underscore/README.md
new file mode 100644
index 0000000..890269c
--- /dev/null
+++ b/node_modules/underscore/README.md
@@ -0,0 +1,28 @@
+ __
+ /\ \ __
+ __ __ ___ \_\ \ __ _ __ ____ ___ ___ _ __ __ /\_\ ____
+ /\ \/\ \ /' _ `\ /'_ \ /'__`\/\ __\/ ,__\ / ___\ / __`\/\ __\/'__`\ \/\ \ /',__\
+ \ \ \_\ \/\ \/\ \/\ \ \ \/\ __/\ \ \//\__, `\/\ \__//\ \ \ \ \ \//\ __/ __ \ \ \/\__, `\
+ \ \____/\ \_\ \_\ \___,_\ \____\\ \_\\/\____/\ \____\ \____/\ \_\\ \____\/\_\ _\ \ \/\____/
+ \/___/ \/_/\/_/\/__,_ /\/____/ \/_/ \/___/ \/____/\/___/ \/_/ \/____/\/_//\ \_\ \/___/
+ \ \____/
+ \/___/
+
+Underscore.js is a utility-belt library for JavaScript that provides
+support for the usual functional suspects (each, map, reduce, filter...)
+without extending any core JavaScript objects.
+
+For Docs, License, Tests, and pre-packed downloads, see:
+https://underscorejs.org
+
+For support and questions, please use
+[the gitter channel](https://gitter.im/jashkenas/underscore)
+or [stackoverflow](https://stackoverflow.com/search?q=underscore.js)
+
+Underscore is an open-sourced component of DocumentCloud:
+https://github.com/documentcloud
+
+Many thanks to our contributors:
+https://github.com/jashkenas/underscore/contributors
+
+This project adheres to a [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code.
diff --git a/node_modules/underscore/modules/.eslintrc b/node_modules/underscore/modules/.eslintrc
new file mode 100644
index 0000000..b0802cb
--- /dev/null
+++ b/node_modules/underscore/modules/.eslintrc
@@ -0,0 +1,12 @@
+{
+ "parserOptions": {
+ "ecmaVersion": 6,
+ "sourceType": "module",
+ },
+ "plugins": [
+ "import"
+ ],
+ "extends": [
+ "plugin:import/errors"
+ ]
+}
diff --git a/node_modules/underscore/modules/index-all.js b/node_modules/underscore/modules/index-all.js
new file mode 100644
index 0000000..e166306
--- /dev/null
+++ b/node_modules/underscore/modules/index-all.js
@@ -0,0 +1,2 @@
+export { default } from './index-default.js';
+export * from './index.js';
diff --git a/node_modules/underscore/modules/index-default.js b/node_modules/underscore/modules/index-default.js
new file mode 100644
index 0000000..4a4a112
--- /dev/null
+++ b/node_modules/underscore/modules/index-default.js
@@ -0,0 +1,9 @@
+import * as allExports from './index.js';
+import { mixin } from './index.js';
+
+// Add all of the Underscore functions to the wrapper object.
+var _ = mixin(allExports);
+// Legacy Node.js API
+_._ = _;
+// Export the Underscore API.
+export default _;
diff --git a/node_modules/underscore/modules/index.js b/node_modules/underscore/modules/index.js
new file mode 100644
index 0000000..961047d
--- /dev/null
+++ b/node_modules/underscore/modules/index.js
@@ -0,0 +1,1678 @@
+// Underscore.js 1.10.2
+// https://underscorejs.org
+// (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+// Underscore may be freely distributed under the MIT license.
+
+// Baseline setup
+// --------------
+
+// Establish the root object, `window` (`self`) in the browser, `global`
+// on the server, or `this` in some virtual machines. We use `self`
+// instead of `window` for `WebWorker` support.
+var root = typeof self == 'object' && self.self === self && self ||
+ typeof global == 'object' && global.global === global && global ||
+ Function('return this')() ||
+ {};
+
+// Save bytes in the minified (but not gzipped) version:
+var ArrayProto = Array.prototype, ObjProto = Object.prototype;
+var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
+
+// Create quick reference variables for speed access to core prototypes.
+var push = ArrayProto.push,
+ slice = ArrayProto.slice,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+// All **ECMAScript 5** native function implementations that we hope to use
+// are declared here.
+var nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeCreate = Object.create;
+
+// Create references to these builtin functions because we override them.
+var _isNaN = root.isNaN,
+ _isFinite = root.isFinite;
+
+// Naked function reference for surrogate-prototype-swapping.
+var Ctor = function(){};
+
+// The Underscore object. All exported functions below are added to it in the
+// modules/index-all.js using the mixin function.
+export default function _(obj) {
+ if (obj instanceof _) return obj;
+ if (!(this instanceof _)) return new _(obj);
+ this._wrapped = obj;
+}
+
+// Current version.
+export var VERSION = _.VERSION = '1.10.2';
+
+// Internal function that returns an efficient (for current engines) version
+// of the passed-in callback, to be repeatedly applied in other Underscore
+// functions.
+function optimizeCb(func, context, argCount) {
+ if (context === void 0) return func;
+ switch (argCount == null ? 3 : argCount) {
+ case 1: return function(value) {
+ return func.call(context, value);
+ };
+ // The 2-argument case is omitted because we’re not using it.
+ case 3: return function(value, index, collection) {
+ return func.call(context, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(context, accumulator, value, index, collection);
+ };
+ }
+ return function() {
+ return func.apply(context, arguments);
+ };
+}
+
+// An internal function to generate callbacks that can be applied to each
+// element in a collection, returning the desired result — either `identity`,
+// an arbitrary callback, a property matcher, or a property accessor.
+function baseIteratee(value, context, argCount) {
+ if (value == null) return identity;
+ if (isFunction(value)) return optimizeCb(value, context, argCount);
+ if (isObject(value) && !isArray(value)) return matcher(value);
+ return property(value);
+}
+
+// External wrapper for our callback generator. Users may customize
+// `_.iteratee` if they want additional predicate/iteratee shorthand styles.
+// This abstraction hides the internal-only argCount argument.
+_.iteratee = iteratee;
+export function iteratee(value, context) {
+ return baseIteratee(value, context, Infinity);
+}
+
+// The function we actually call internally. It invokes _.iteratee if
+// overridden, otherwise baseIteratee.
+function cb(value, context, argCount) {
+ if (_.iteratee !== iteratee) return _.iteratee(value, context);
+ return baseIteratee(value, context, argCount);
+}
+
+// Some functions take a variable number of arguments, or a few expected
+// arguments at the beginning and then a variable number of values to operate
+// on. This helper accumulates all remaining arguments past the function’s
+// argument length (or an explicit `startIndex`), into an array that becomes
+// the last argument. Similar to ES6’s "rest parameter".
+export function restArguments(func, startIndex) {
+ startIndex = startIndex == null ? func.length - 1 : +startIndex;
+ return function() {
+ var length = Math.max(arguments.length - startIndex, 0),
+ rest = Array(length),
+ index = 0;
+ for (; index < length; index++) {
+ rest[index] = arguments[index + startIndex];
+ }
+ switch (startIndex) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, arguments[0], rest);
+ case 2: return func.call(this, arguments[0], arguments[1], rest);
+ }
+ var args = Array(startIndex + 1);
+ for (index = 0; index < startIndex; index++) {
+ args[index] = arguments[index];
+ }
+ args[startIndex] = rest;
+ return func.apply(this, args);
+ };
+}
+
+// An internal function for creating a new object that inherits from another.
+function baseCreate(prototype) {
+ if (!isObject(prototype)) return {};
+ if (nativeCreate) return nativeCreate(prototype);
+ Ctor.prototype = prototype;
+ var result = new Ctor;
+ Ctor.prototype = null;
+ return result;
+}
+
+function shallowProperty(key) {
+ return function(obj) {
+ return obj == null ? void 0 : obj[key];
+ };
+}
+
+function _has(obj, path) {
+ return obj != null && hasOwnProperty.call(obj, path);
+}
+
+function deepGet(obj, path) {
+ var length = path.length;
+ for (var i = 0; i < length; i++) {
+ if (obj == null) return void 0;
+ obj = obj[path[i]];
+ }
+ return length ? obj : void 0;
+}
+
+// Helper for collection methods to determine whether a collection
+// should be iterated as an array or as an object.
+// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+var getLength = shallowProperty('length');
+function isArrayLike(collection) {
+ var length = getLength(collection);
+ return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
+}
+
+// Collection Functions
+// --------------------
+
+// The cornerstone, an `each` implementation, aka `forEach`.
+// Handles raw objects in addition to array-likes. Treats all
+// sparse array-likes as if they were dense.
+export function each(obj, iteratee, context) {
+ iteratee = optimizeCb(iteratee, context);
+ var i, length;
+ if (isArrayLike(obj)) {
+ for (i = 0, length = obj.length; i < length; i++) {
+ iteratee(obj[i], i, obj);
+ }
+ } else {
+ var _keys = keys(obj);
+ for (i = 0, length = _keys.length; i < length; i++) {
+ iteratee(obj[_keys[i]], _keys[i], obj);
+ }
+ }
+ return obj;
+}
+export { each as forEach };
+
+// Return the results of applying the iteratee to each element.
+export function map(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var _keys = !isArrayLike(obj) && keys(obj),
+ length = (_keys || obj).length,
+ results = Array(length);
+ for (var index = 0; index < length; index++) {
+ var currentKey = _keys ? _keys[index] : index;
+ results[index] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+}
+export { map as collect };
+
+// Create a reducing function iterating left or right.
+function createReduce(dir) {
+ // Wrap code that reassigns argument variables in a separate function than
+ // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
+ var reducer = function(obj, iteratee, memo, initial) {
+ var _keys = !isArrayLike(obj) && keys(obj),
+ length = (_keys || obj).length,
+ index = dir > 0 ? 0 : length - 1;
+ if (!initial) {
+ memo = obj[_keys ? _keys[index] : index];
+ index += dir;
+ }
+ for (; index >= 0 && index < length; index += dir) {
+ var currentKey = _keys ? _keys[index] : index;
+ memo = iteratee(memo, obj[currentKey], currentKey, obj);
+ }
+ return memo;
+ };
+
+ return function(obj, iteratee, memo, context) {
+ var initial = arguments.length >= 3;
+ return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
+ };
+}
+
+// **Reduce** builds up a single result from a list of values, aka `inject`,
+// or `foldl`.
+export var reduce = createReduce(1);
+export { reduce as foldl, reduce as inject };
+
+// The right-associative version of reduce, also known as `foldr`.
+export var reduceRight = createReduce(-1);
+export { reduceRight as foldr };
+
+// Return the first value which passes a truth test.
+export function find(obj, predicate, context) {
+ var keyFinder = isArrayLike(obj) ? findIndex : findKey;
+ var key = keyFinder(obj, predicate, context);
+ if (key !== void 0 && key !== -1) return obj[key];
+}
+export { find as detect };
+
+// Return all the elements that pass a truth test.
+export function filter(obj, predicate, context) {
+ var results = [];
+ predicate = cb(predicate, context);
+ each(obj, function(value, index, list) {
+ if (predicate(value, index, list)) results.push(value);
+ });
+ return results;
+}
+export { filter as select };
+
+// Return all the elements for which a truth test fails.
+export function reject(obj, predicate, context) {
+ return filter(obj, negate(cb(predicate)), context);
+}
+
+// Determine whether all of the elements match a truth test.
+export function every(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var _keys = !isArrayLike(obj) && keys(obj),
+ length = (_keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = _keys ? _keys[index] : index;
+ if (!predicate(obj[currentKey], currentKey, obj)) return false;
+ }
+ return true;
+}
+export { every as all };
+
+// Determine if at least one element in the object matches a truth test.
+export function some(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var _keys = !isArrayLike(obj) && keys(obj),
+ length = (_keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = _keys ? _keys[index] : index;
+ if (predicate(obj[currentKey], currentKey, obj)) return true;
+ }
+ return false;
+}
+export { some as any };
+
+// Determine if the array or object contains a given item (using `===`).
+export function contains(obj, item, fromIndex, guard) {
+ if (!isArrayLike(obj)) obj = values(obj);
+ if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+ return indexOf(obj, item, fromIndex) >= 0;
+}
+export { contains as includes, contains as include };
+
+// Invoke a method (with arguments) on every item in a collection.
+export var invoke = restArguments(function(obj, path, args) {
+ var contextPath, func;
+ if (isFunction(path)) {
+ func = path;
+ } else if (isArray(path)) {
+ contextPath = path.slice(0, -1);
+ path = path[path.length - 1];
+ }
+ return map(obj, function(context) {
+ var method = func;
+ if (!method) {
+ if (contextPath && contextPath.length) {
+ context = deepGet(context, contextPath);
+ }
+ if (context == null) return void 0;
+ method = context[path];
+ }
+ return method == null ? method : method.apply(context, args);
+ });
+});
+
+// Convenience version of a common use case of `map`: fetching a property.
+export function pluck(obj, key) {
+ return map(obj, property(key));
+}
+
+// Convenience version of a common use case of `filter`: selecting only objects
+// containing specific `key:value` pairs.
+export function where(obj, attrs) {
+ return filter(obj, matcher(attrs));
+}
+
+// Convenience version of a common use case of `find`: getting the first object
+// containing specific `key:value` pairs.
+export function findWhere(obj, attrs) {
+ return find(obj, matcher(attrs));
+}
+
+// Return the maximum element (or element-based computation).
+export function max(obj, iteratee, context) {
+ var result = -Infinity, lastComputed = -Infinity,
+ value, computed;
+ if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+ obj = isArrayLike(obj) ? obj : values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value != null && value > result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ each(obj, function(v, index, list) {
+ computed = iteratee(v, index, list);
+ if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+ result = v;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+}
+
+// Return the minimum element (or element-based computation).
+export function min(obj, iteratee, context) {
+ var result = Infinity, lastComputed = Infinity,
+ value, computed;
+ if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+ obj = isArrayLike(obj) ? obj : values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value != null && value < result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ each(obj, function(v, index, list) {
+ computed = iteratee(v, index, list);
+ if (computed < lastComputed || computed === Infinity && result === Infinity) {
+ result = v;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+}
+
+// Shuffle a collection.
+export function shuffle(obj) {
+ return sample(obj, Infinity);
+}
+
+// Sample **n** random values from a collection using the modern version of the
+// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+// If **n** is not specified, returns a single random element.
+// The internal `guard` argument allows it to work with `map`.
+export function sample(obj, n, guard) {
+ if (n == null || guard) {
+ if (!isArrayLike(obj)) obj = values(obj);
+ return obj[random(obj.length - 1)];
+ }
+ var sample = isArrayLike(obj) ? clone(obj) : values(obj);
+ var length = getLength(sample);
+ n = Math.max(Math.min(n, length), 0);
+ var last = length - 1;
+ for (var index = 0; index < n; index++) {
+ var rand = random(index, last);
+ var temp = sample[index];
+ sample[index] = sample[rand];
+ sample[rand] = temp;
+ }
+ return sample.slice(0, n);
+}
+
+// Sort the object's values by a criterion produced by an iteratee.
+export function sortBy(obj, iteratee, context) {
+ var index = 0;
+ iteratee = cb(iteratee, context);
+ return pluck(map(obj, function(value, key, list) {
+ return {
+ value: value,
+ index: index++,
+ criteria: iteratee(value, key, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria;
+ var b = right.criteria;
+ if (a !== b) {
+ if (a > b || a === void 0) return 1;
+ if (a < b || b === void 0) return -1;
+ }
+ return left.index - right.index;
+ }), 'value');
+}
+
+// An internal function used for aggregate "group by" operations.
+function group(behavior, partition) {
+ return function(obj, iteratee, context) {
+ var result = partition ? [[], []] : {};
+ iteratee = cb(iteratee, context);
+ each(obj, function(value, index) {
+ var key = iteratee(value, index, obj);
+ behavior(result, value, key);
+ });
+ return result;
+ };
+}
+
+// Groups the object's values by a criterion. Pass either a string attribute
+// to group by, or a function that returns the criterion.
+export var groupBy = group(function(result, value, key) {
+ if (_has(result, key)) result[key].push(value); else result[key] = [value];
+});
+
+// Indexes the object's values by a criterion, similar to `groupBy`, but for
+// when you know that your index values will be unique.
+export var indexBy = group(function(result, value, key) {
+ result[key] = value;
+});
+
+// Counts instances of an object that group by a certain criterion. Pass
+// either a string attribute to count by, or a function that returns the
+// criterion.
+export var countBy = group(function(result, value, key) {
+ if (_has(result, key)) result[key]++; else result[key] = 1;
+});
+
+var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
+// Safely create a real, live array from anything iterable.
+export function toArray(obj) {
+ if (!obj) return [];
+ if (isArray(obj)) return slice.call(obj);
+ if (isString(obj)) {
+ // Keep surrogate pair characters together
+ return obj.match(reStrSymbol);
+ }
+ if (isArrayLike(obj)) return map(obj, identity);
+ return values(obj);
+}
+
+// Return the number of elements in an object.
+export function size(obj) {
+ if (obj == null) return 0;
+ return isArrayLike(obj) ? obj.length : keys(obj).length;
+}
+
+// Split a collection into two arrays: one whose elements all satisfy the given
+// predicate, and one whose elements all do not satisfy the predicate.
+export var partition = group(function(result, value, pass) {
+ result[pass ? 0 : 1].push(value);
+}, true);
+
+// Array Functions
+// ---------------
+
+// Get the first element of an array. Passing **n** will return the first N
+// values in the array. The **guard** check allows it to work with `map`.
+export function first(array, n, guard) {
+ if (array == null || array.length < 1) return n == null ? void 0 : [];
+ if (n == null || guard) return array[0];
+ return initial(array, array.length - n);
+}
+export { first as head, first as take };
+
+// Returns everything but the last entry of the array. Especially useful on
+// the arguments object. Passing **n** will return all the values in
+// the array, excluding the last N.
+export function initial(array, n, guard) {
+ return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+}
+
+// Get the last element of an array. Passing **n** will return the last N
+// values in the array.
+export function last(array, n, guard) {
+ if (array == null || array.length < 1) return n == null ? void 0 : [];
+ if (n == null || guard) return array[array.length - 1];
+ return rest(array, Math.max(0, array.length - n));
+}
+
+// Returns everything but the first entry of the array. Especially useful on
+// the arguments object. Passing an **n** will return the rest N values in the
+// array.
+export function rest(array, n, guard) {
+ return slice.call(array, n == null || guard ? 1 : n);
+}
+export { rest as tail, rest as drop };
+
+// Trim out all falsy values from an array.
+export function compact(array) {
+ return filter(array, Boolean);
+}
+
+// Internal implementation of a recursive `flatten` function.
+function _flatten(input, shallow, strict, output) {
+ output = output || [];
+ var idx = output.length;
+ for (var i = 0, length = getLength(input); i < length; i++) {
+ var value = input[i];
+ if (isArrayLike(value) && (isArray(value) || isArguments(value))) {
+ // Flatten current level of array or arguments object.
+ if (shallow) {
+ var j = 0, len = value.length;
+ while (j < len) output[idx++] = value[j++];
+ } else {
+ _flatten(value, shallow, strict, output);
+ idx = output.length;
+ }
+ } else if (!strict) {
+ output[idx++] = value;
+ }
+ }
+ return output;
+}
+
+// Flatten out an array, either recursively (by default), or just one level.
+export function flatten(array, shallow) {
+ return _flatten(array, shallow, false);
+}
+
+// Return a version of the array that does not contain the specified value(s).
+export var without = restArguments(function(array, otherArrays) {
+ return difference(array, otherArrays);
+});
+
+// Produce a duplicate-free version of the array. If the array has already
+// been sorted, you have the option of using a faster algorithm.
+// The faster algorithm will not work with an iteratee if the iteratee
+// is not a one-to-one function, so providing an iteratee will disable
+// the faster algorithm.
+export function uniq(array, isSorted, iteratee, context) {
+ if (!isBoolean(isSorted)) {
+ context = iteratee;
+ iteratee = isSorted;
+ isSorted = false;
+ }
+ if (iteratee != null) iteratee = cb(iteratee, context);
+ var result = [];
+ var seen = [];
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var value = array[i],
+ computed = iteratee ? iteratee(value, i, array) : value;
+ if (isSorted && !iteratee) {
+ if (!i || seen !== computed) result.push(value);
+ seen = computed;
+ } else if (iteratee) {
+ if (!contains(seen, computed)) {
+ seen.push(computed);
+ result.push(value);
+ }
+ } else if (!contains(result, value)) {
+ result.push(value);
+ }
+ }
+ return result;
+}
+export { uniq as unique };
+
+// Produce an array that contains the union: each distinct element from all of
+// the passed-in arrays.
+export var union = restArguments(function(arrays) {
+ return uniq(_flatten(arrays, true, true));
+});
+
+// Produce an array that contains every item shared between all the
+// passed-in arrays.
+export function intersection(array) {
+ var result = [];
+ var argsLength = arguments.length;
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var item = array[i];
+ if (contains(result, item)) continue;
+ var j;
+ for (j = 1; j < argsLength; j++) {
+ if (!contains(arguments[j], item)) break;
+ }
+ if (j === argsLength) result.push(item);
+ }
+ return result;
+}
+
+// Take the difference between one array and a number of other arrays.
+// Only the elements present in just the first array will remain.
+export var difference = restArguments(function(array, rest) {
+ rest = _flatten(rest, true, true);
+ return filter(array, function(value){
+ return !contains(rest, value);
+ });
+});
+
+// Complement of zip. Unzip accepts an array of arrays and groups
+// each array's elements on shared indices.
+export function unzip(array) {
+ var length = array && max(array, getLength).length || 0;
+ var result = Array(length);
+
+ for (var index = 0; index < length; index++) {
+ result[index] = pluck(array, index);
+ }
+ return result;
+}
+
+// Zip together multiple lists into a single array -- elements that share
+// an index go together.
+export var zip = restArguments(unzip);
+
+// Converts lists into objects. Pass either a single array of `[key, value]`
+// pairs, or two parallel arrays of the same length -- one of keys, and one of
+// the corresponding values. Passing by pairs is the reverse of pairs.
+export function object(list, values) {
+ var result = {};
+ for (var i = 0, length = getLength(list); i < length; i++) {
+ if (values) {
+ result[list[i]] = values[i];
+ } else {
+ result[list[i][0]] = list[i][1];
+ }
+ }
+ return result;
+}
+
+// Generator function to create the findIndex and findLastIndex functions.
+function createPredicateIndexFinder(dir) {
+ return function(array, predicate, context) {
+ predicate = cb(predicate, context);
+ var length = getLength(array);
+ var index = dir > 0 ? 0 : length - 1;
+ for (; index >= 0 && index < length; index += dir) {
+ if (predicate(array[index], index, array)) return index;
+ }
+ return -1;
+ };
+}
+
+// Returns the first index on an array-like that passes a predicate test.
+export var findIndex = createPredicateIndexFinder(1);
+export var findLastIndex = createPredicateIndexFinder(-1);
+
+// Use a comparator function to figure out the smallest index at which
+// an object should be inserted so as to maintain order. Uses binary search.
+export function sortedIndex(array, obj, iteratee, context) {
+ iteratee = cb(iteratee, context, 1);
+ var value = iteratee(obj);
+ var low = 0, high = getLength(array);
+ while (low < high) {
+ var mid = Math.floor((low + high) / 2);
+ if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+ }
+ return low;
+}
+
+// Generator function to create the indexOf and lastIndexOf functions.
+function createIndexFinder(dir, predicateFind, sortedIndex) {
+ return function(array, item, idx) {
+ var i = 0, length = getLength(array);
+ if (typeof idx == 'number') {
+ if (dir > 0) {
+ i = idx >= 0 ? idx : Math.max(idx + length, i);
+ } else {
+ length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+ }
+ } else if (sortedIndex && idx && length) {
+ idx = sortedIndex(array, item);
+ return array[idx] === item ? idx : -1;
+ }
+ if (item !== item) {
+ idx = predicateFind(slice.call(array, i, length), isNaN);
+ return idx >= 0 ? idx + i : -1;
+ }
+ for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+ if (array[idx] === item) return idx;
+ }
+ return -1;
+ };
+}
+
+// Return the position of the first occurrence of an item in an array,
+// or -1 if the item is not included in the array.
+// If the array is large and already in sort order, pass `true`
+// for **isSorted** to use binary search.
+export var indexOf = createIndexFinder(1, findIndex, sortedIndex);
+export var lastIndexOf = createIndexFinder(-1, findLastIndex);
+
+// Generate an integer Array containing an arithmetic progression. A port of
+// the native Python `range()` function. See
+// [the Python documentation](https://docs.python.org/library/functions.html#range).
+export function range(start, stop, step) {
+ if (stop == null) {
+ stop = start || 0;
+ start = 0;
+ }
+ if (!step) {
+ step = stop < start ? -1 : 1;
+ }
+
+ var length = Math.max(Math.ceil((stop - start) / step), 0);
+ var range = Array(length);
+
+ for (var idx = 0; idx < length; idx++, start += step) {
+ range[idx] = start;
+ }
+
+ return range;
+}
+
+// Chunk a single array into multiple arrays, each containing `count` or fewer
+// items.
+export function chunk(array, count) {
+ if (count == null || count < 1) return [];
+ var result = [];
+ var i = 0, length = array.length;
+ while (i < length) {
+ result.push(slice.call(array, i, i += count));
+ }
+ return result;
+}
+
+// Function (ahem) Functions
+// ------------------
+
+// Determines whether to execute a function as a constructor
+// or a normal function with the provided arguments.
+function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
+ if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+ var self = baseCreate(sourceFunc.prototype);
+ var result = sourceFunc.apply(self, args);
+ if (isObject(result)) return result;
+ return self;
+}
+
+// Create a function bound to a given object (assigning `this`, and arguments,
+// optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+// available.
+export var bind = restArguments(function(func, context, args) {
+ if (!isFunction(func)) throw new TypeError('Bind must be called on a function');
+ var bound = restArguments(function(callArgs) {
+ return executeBound(func, bound, context, this, args.concat(callArgs));
+ });
+ return bound;
+});
+
+// Partially apply a function by creating a version that has had some of its
+// arguments pre-filled, without changing its dynamic `this` context. _ acts
+// as a placeholder by default, allowing any combination of arguments to be
+// pre-filled. Set `partial.placeholder` for a custom placeholder argument.
+export var partial = restArguments(function(func, boundArgs) {
+ var placeholder = partial.placeholder;
+ var bound = function() {
+ var position = 0, length = boundArgs.length;
+ var args = Array(length);
+ for (var i = 0; i < length; i++) {
+ args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
+ }
+ while (position < arguments.length) args.push(arguments[position++]);
+ return executeBound(func, bound, this, this, args);
+ };
+ return bound;
+});
+
+partial.placeholder = _;
+
+// Bind a number of an object's methods to that object. Remaining arguments
+// are the method names to be bound. Useful for ensuring that all callbacks
+// defined on an object belong to it.
+export var bindAll = restArguments(function(obj, _keys) {
+ _keys = _flatten(_keys, false, false);
+ var index = _keys.length;
+ if (index < 1) throw new Error('bindAll must be passed function names');
+ while (index--) {
+ var key = _keys[index];
+ obj[key] = bind(obj[key], obj);
+ }
+});
+
+// Memoize an expensive function by storing its results.
+export function memoize(func, hasher) {
+ var memoize = function(key) {
+ var cache = memoize.cache;
+ var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+ if (!_has(cache, address)) cache[address] = func.apply(this, arguments);
+ return cache[address];
+ };
+ memoize.cache = {};
+ return memoize;
+}
+
+// Delays a function for the given number of milliseconds, and then calls
+// it with the arguments supplied.
+export var delay = restArguments(function(func, wait, args) {
+ return setTimeout(function() {
+ return func.apply(null, args);
+ }, wait);
+});
+
+// Defers a function, scheduling it to run after the current call stack has
+// cleared.
+export var defer = partial(delay, _, 1);
+
+// Returns a function, that, when invoked, will only be triggered at most once
+// during a given window of time. Normally, the throttled function will run
+// as much as it can, without ever going more than once per `wait` duration;
+// but if you'd like to disable the execution on the leading edge, pass
+// `{leading: false}`. To disable execution on the trailing edge, ditto.
+export function throttle(func, wait, options) {
+ var timeout, context, args, result;
+ var previous = 0;
+ if (!options) options = {};
+
+ var later = function() {
+ previous = options.leading === false ? 0 : now();
+ timeout = null;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ };
+
+ var throttled = function() {
+ var _now = now();
+ if (!previous && options.leading === false) previous = _now;
+ var remaining = wait - (_now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0 || remaining > wait) {
+ if (timeout) {
+ clearTimeout(timeout);
+ timeout = null;
+ }
+ previous = _now;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ } else if (!timeout && options.trailing !== false) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+
+ throttled.cancel = function() {
+ clearTimeout(timeout);
+ previous = 0;
+ timeout = context = args = null;
+ };
+
+ return throttled;
+}
+
+// Returns a function, that, as long as it continues to be invoked, will not
+// be triggered. The function will be called after it stops being called for
+// N milliseconds. If `immediate` is passed, trigger the function on the
+// leading edge, instead of the trailing.
+export function debounce(func, wait, immediate) {
+ var timeout, result;
+
+ var later = function(context, args) {
+ timeout = null;
+ if (args) result = func.apply(context, args);
+ };
+
+ var debounced = restArguments(function(args) {
+ if (timeout) clearTimeout(timeout);
+ if (immediate) {
+ var callNow = !timeout;
+ timeout = setTimeout(later, wait);
+ if (callNow) result = func.apply(this, args);
+ } else {
+ timeout = delay(later, wait, this, args);
+ }
+
+ return result;
+ });
+
+ debounced.cancel = function() {
+ clearTimeout(timeout);
+ timeout = null;
+ };
+
+ return debounced;
+}
+
+// Returns the first function passed as an argument to the second,
+// allowing you to adjust arguments, run code before and after, and
+// conditionally execute the original function.
+export function wrap(func, wrapper) {
+ return partial(wrapper, func);
+}
+
+// Returns a negated version of the passed-in predicate.
+export function negate(predicate) {
+ return function() {
+ return !predicate.apply(this, arguments);
+ };
+}
+
+// Returns a function that is the composition of a list of functions, each
+// consuming the return value of the function that follows.
+export function compose() {
+ var args = arguments;
+ var start = args.length - 1;
+ return function() {
+ var i = start;
+ var result = args[start].apply(this, arguments);
+ while (i--) result = args[i].call(this, result);
+ return result;
+ };
+}
+
+// Returns a function that will only be executed on and after the Nth call.
+export function after(times, func) {
+ return function() {
+ if (--times < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+}
+
+// Returns a function that will only be executed up to (but not including) the Nth call.
+export function before(times, func) {
+ var memo;
+ return function() {
+ if (--times > 0) {
+ memo = func.apply(this, arguments);
+ }
+ if (times <= 1) func = null;
+ return memo;
+ };
+}
+
+// Returns a function that will be executed at most one time, no matter how
+// often you call it. Useful for lazy initialization.
+export var once = partial(before, 2);
+
+// Object Functions
+// ----------------
+
+// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+ 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+function collectNonEnumProps(obj, _keys) {
+ var nonEnumIdx = nonEnumerableProps.length;
+ var constructor = obj.constructor;
+ var proto = isFunction(constructor) && constructor.prototype || ObjProto;
+
+ // Constructor is a special case.
+ var prop = 'constructor';
+ if (_has(obj, prop) && !contains(_keys, prop)) _keys.push(prop);
+
+ while (nonEnumIdx--) {
+ prop = nonEnumerableProps[nonEnumIdx];
+ if (prop in obj && obj[prop] !== proto[prop] && !contains(_keys, prop)) {
+ _keys.push(prop);
+ }
+ }
+}
+
+// Retrieve the names of an object's own properties.
+// Delegates to **ECMAScript 5**'s native `Object.keys`.
+export function keys(obj) {
+ if (!isObject(obj)) return [];
+ if (nativeKeys) return nativeKeys(obj);
+ var _keys = [];
+ for (var key in obj) if (_has(obj, key)) _keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, _keys);
+ return _keys;
+}
+
+// Retrieve all the property names of an object.
+export function allKeys(obj) {
+ if (!isObject(obj)) return [];
+ var _keys = [];
+ for (var key in obj) _keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, _keys);
+ return _keys;
+}
+
+// Retrieve the values of an object's properties.
+export function values(obj) {
+ var _keys = keys(obj);
+ var length = _keys.length;
+ var values = Array(length);
+ for (var i = 0; i < length; i++) {
+ values[i] = obj[_keys[i]];
+ }
+ return values;
+}
+
+// Returns the results of applying the iteratee to each element of the object.
+// In contrast to map it returns an object.
+export function mapObject(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var _keys = keys(obj),
+ length = _keys.length,
+ results = {};
+ for (var index = 0; index < length; index++) {
+ var currentKey = _keys[index];
+ results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+}
+
+// Convert an object into a list of `[key, value]` pairs.
+// The opposite of object.
+export function pairs(obj) {
+ var _keys = keys(obj);
+ var length = _keys.length;
+ var pairs = Array(length);
+ for (var i = 0; i < length; i++) {
+ pairs[i] = [_keys[i], obj[_keys[i]]];
+ }
+ return pairs;
+}
+
+// Invert the keys and values of an object. The values must be serializable.
+export function invert(obj) {
+ var result = {};
+ var _keys = keys(obj);
+ for (var i = 0, length = _keys.length; i < length; i++) {
+ result[obj[_keys[i]]] = _keys[i];
+ }
+ return result;
+}
+
+// Return a sorted list of the function names available on the object.
+export function functions(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+}
+export { functions as methods };
+
+// An internal function for creating assigner functions.
+function createAssigner(keysFunc, defaults) {
+ return function(obj) {
+ var length = arguments.length;
+ if (defaults) obj = Object(obj);
+ if (length < 2 || obj == null) return obj;
+ for (var index = 1; index < length; index++) {
+ var source = arguments[index],
+ _keys = keysFunc(source),
+ l = _keys.length;
+ for (var i = 0; i < l; i++) {
+ var key = _keys[i];
+ if (!defaults || obj[key] === void 0) obj[key] = source[key];
+ }
+ }
+ return obj;
+ };
+}
+
+// Extend a given object with all the properties in passed-in object(s).
+export var extend = createAssigner(allKeys);
+
+// Assigns a given object with all the own properties in the passed-in object(s).
+// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+export var extendOwn = createAssigner(keys);
+export { extendOwn as assign };
+
+// Returns the first key on an object that passes a predicate test.
+export function findKey(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var _keys = keys(obj), key;
+ for (var i = 0, length = _keys.length; i < length; i++) {
+ key = _keys[i];
+ if (predicate(obj[key], key, obj)) return key;
+ }
+}
+
+// Internal pick helper function to determine if `obj` has key `key`.
+function keyInObj(value, key, obj) {
+ return key in obj;
+}
+
+// Return a copy of the object only containing the whitelisted properties.
+export var pick = restArguments(function(obj, _keys) {
+ var result = {}, iteratee = _keys[0];
+ if (obj == null) return result;
+ if (isFunction(iteratee)) {
+ if (_keys.length > 1) iteratee = optimizeCb(iteratee, _keys[1]);
+ _keys = allKeys(obj);
+ } else {
+ iteratee = keyInObj;
+ _keys = _flatten(_keys, false, false);
+ obj = Object(obj);
+ }
+ for (var i = 0, length = _keys.length; i < length; i++) {
+ var key = _keys[i];
+ var value = obj[key];
+ if (iteratee(value, key, obj)) result[key] = value;
+ }
+ return result;
+});
+
+// Return a copy of the object without the blacklisted properties.
+export var omit = restArguments(function(obj, _keys) {
+ var iteratee = _keys[0], context;
+ if (isFunction(iteratee)) {
+ iteratee = negate(iteratee);
+ if (_keys.length > 1) context = _keys[1];
+ } else {
+ _keys = map(_flatten(_keys, false, false), String);
+ iteratee = function(value, key) {
+ return !contains(_keys, key);
+ };
+ }
+ return pick(obj, iteratee, context);
+});
+
+// Fill in a given object with default properties.
+export var defaults = createAssigner(allKeys, true);
+
+// Creates an object that inherits from the given prototype object.
+// If additional properties are provided then they will be added to the
+// created object.
+export function create(prototype, props) {
+ var result = baseCreate(prototype);
+ if (props) extendOwn(result, props);
+ return result;
+}
+
+// Create a (shallow-cloned) duplicate of an object.
+export function clone(obj) {
+ if (!isObject(obj)) return obj;
+ return isArray(obj) ? obj.slice() : extend({}, obj);
+}
+
+// Invokes interceptor with the obj, and then returns obj.
+// The primary purpose of this method is to "tap into" a method chain, in
+// order to perform operations on intermediate results within the chain.
+export function tap(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+}
+
+// Returns whether an object has a given set of `key:value` pairs.
+export function isMatch(object, attrs) {
+ var _keys = keys(attrs), length = _keys.length;
+ if (object == null) return !length;
+ var obj = Object(object);
+ for (var i = 0; i < length; i++) {
+ var key = _keys[i];
+ if (attrs[key] !== obj[key] || !(key in obj)) return false;
+ }
+ return true;
+}
+
+
+// Internal recursive comparison function for `isEqual`.
+function eq(a, b, aStack, bStack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
+ // `null` or `undefined` only equal to itself (strict comparison).
+ if (a == null || b == null) return false;
+ // `NaN`s are equivalent, but non-reflexive.
+ if (a !== a) return b !== b;
+ // Exhaust primitive checks
+ var type = typeof a;
+ if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
+ return deepEq(a, b, aStack, bStack);
+}
+
+// Internal recursive comparison function for `isEqual`.
+function deepEq(a, b, aStack, bStack) {
+ // Unwrap any wrapped objects.
+ if (a instanceof _) a = a._wrapped;
+ if (b instanceof _) b = b._wrapped;
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className !== toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, regular expressions, dates, and booleans are compared by value.
+ case '[object RegExp]':
+ // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return '' + a === '' + b;
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive.
+ // Object(NaN) is equivalent to NaN.
+ if (+a !== +a) return +b !== +b;
+ // An `egal` comparison is performed for other numeric values.
+ return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a === +b;
+ case '[object Symbol]':
+ return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
+ }
+
+ var areArrays = className === '[object Array]';
+ if (!areArrays) {
+ if (typeof a != 'object' || typeof b != 'object') return false;
+
+ // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+ // from different frames are.
+ var aCtor = a.constructor, bCtor = b.constructor;
+ if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&
+ isFunction(bCtor) && bCtor instanceof bCtor)
+ && ('constructor' in a && 'constructor' in b)) {
+ return false;
+ }
+ }
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+ // Initializing stack of traversed objects.
+ // It's done here since we only need them for objects and arrays comparison.
+ aStack = aStack || [];
+ bStack = bStack || [];
+ var length = aStack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (aStack[length] === a) return bStack[length] === b;
+ }
+
+ // Add the first object to the stack of traversed objects.
+ aStack.push(a);
+ bStack.push(b);
+
+ // Recursively compare objects and arrays.
+ if (areArrays) {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ length = a.length;
+ if (length !== b.length) return false;
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (length--) {
+ if (!eq(a[length], b[length], aStack, bStack)) return false;
+ }
+ } else {
+ // Deep compare objects.
+ var _keys = keys(a), key;
+ length = _keys.length;
+ // Ensure that both objects contain the same number of properties before comparing deep equality.
+ if (keys(b).length !== length) return false;
+ while (length--) {
+ // Deep compare each member
+ key = _keys[length];
+ if (!(_has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ aStack.pop();
+ bStack.pop();
+ return true;
+}
+
+// Perform a deep comparison to check if two objects are equal.
+export function isEqual(a, b) {
+ return eq(a, b);
+}
+
+// Is a given array, string, or object empty?
+// An "empty" object has no enumerable own-properties.
+export function isEmpty(obj) {
+ if (obj == null) return true;
+ if (isArrayLike(obj) && (isArray(obj) || isString(obj) || isArguments(obj))) return obj.length === 0;
+ return keys(obj).length === 0;
+}
+
+// Is a given value a DOM element?
+export function isElement(obj) {
+ return !!(obj && obj.nodeType === 1);
+}
+
+// Internal function for creating a toString-based type tester.
+function tagTester(name) {
+ return function(obj) {
+ return toString.call(obj) === '[object ' + name + ']';
+ };
+}
+
+// Is a given value an array?
+// Delegates to ECMA5's native Array.isArray
+export var isArray = nativeIsArray || tagTester('Array');
+
+// Is a given variable an object?
+export function isObject(obj) {
+ var type = typeof obj;
+ return type === 'function' || type === 'object' && !!obj;
+}
+
+// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.
+export var isArguments = tagTester('Arguments');
+export var isFunction = tagTester('Function');
+export var isString = tagTester('String');
+export var isNumber = tagTester('Number');
+export var isDate = tagTester('Date');
+export var isRegExp = tagTester('RegExp');
+export var isError = tagTester('Error');
+export var isSymbol = tagTester('Symbol');
+export var isMap = tagTester('Map');
+export var isWeakMap = tagTester('WeakMap');
+export var isSet = tagTester('Set');
+export var isWeakSet = tagTester('WeakSet');
+
+// Define a fallback version of the method in browsers (ahem, IE < 9), where
+// there isn't any inspectable "Arguments" type.
+(function() {
+ if (!isArguments(arguments)) {
+ isArguments = function(obj) {
+ return _has(obj, 'callee');
+ };
+ }
+}());
+
+// Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
+// IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
+var nodelist = root.document && root.document.childNodes;
+if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
+ isFunction = function(obj) {
+ return typeof obj == 'function' || false;
+ };
+}
+
+// Is a given object a finite number?
+export function isFinite(obj) {
+ return !isSymbol(obj) && _isFinite(obj) && !_isNaN(parseFloat(obj));
+}
+
+// Is the given value `NaN`?
+export function isNaN(obj) {
+ return isNumber(obj) && _isNaN(obj);
+}
+
+// Is a given value a boolean?
+export function isBoolean(obj) {
+ return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+}
+
+// Is a given value equal to null?
+export function isNull(obj) {
+ return obj === null;
+}
+
+// Is a given variable undefined?
+export function isUndefined(obj) {
+ return obj === void 0;
+}
+
+// Shortcut function for checking if an object has a given property directly
+// on itself (in other words, not on a prototype).
+export function has(obj, path) {
+ if (!isArray(path)) {
+ return _has(obj, path);
+ }
+ var length = path.length;
+ for (var i = 0; i < length; i++) {
+ var key = path[i];
+ if (obj == null || !hasOwnProperty.call(obj, key)) {
+ return false;
+ }
+ obj = obj[key];
+ }
+ return !!length;
+}
+
+// Utility Functions
+// -----------------
+
+// Keep the identity function around for default iteratees.
+export function identity(value) {
+ return value;
+}
+
+// Predicate-generating functions. Often useful outside of Underscore.
+export function constant(value) {
+ return function() {
+ return value;
+ };
+}
+
+export function noop(){}
+
+// Creates a function that, when passed an object, will traverse that object’s
+// properties down the given `path`, specified as an array of keys or indexes.
+export function property(path) {
+ if (!isArray(path)) {
+ return shallowProperty(path);
+ }
+ return function(obj) {
+ return deepGet(obj, path);
+ };
+}
+
+// Generates a function for a given object that returns a given property.
+export function propertyOf(obj) {
+ if (obj == null) {
+ return function(){};
+ }
+ return function(path) {
+ return !isArray(path) ? obj[path] : deepGet(obj, path);
+ };
+}
+
+// Returns a predicate for checking whether an object has a given set of
+// `key:value` pairs.
+export function matcher(attrs) {
+ attrs = extendOwn({}, attrs);
+ return function(obj) {
+ return isMatch(obj, attrs);
+ };
+}
+export { matcher as matches };
+
+// Run a function **n** times.
+export function times(n, iteratee, context) {
+ var accum = Array(Math.max(0, n));
+ iteratee = optimizeCb(iteratee, context, 1);
+ for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+ return accum;
+}
+
+// Return a random integer between min and max (inclusive).
+export function random(min, max) {
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + Math.floor(Math.random() * (max - min + 1));
+}
+
+// A (possibly faster) way to get the current timestamp as an integer.
+export var now = Date.now || function() {
+ return new Date().getTime();
+};
+
+// List of HTML entities for escaping.
+var escapeMap = {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#x27;',
+ '`': '&#x60;'
+};
+var unescapeMap = invert(escapeMap);
+
+// Functions for escaping and unescaping strings to/from HTML interpolation.
+function createEscaper(map) {
+ var escaper = function(match) {
+ return map[match];
+ };
+ // Regexes for identifying a key that needs to be escaped.
+ var source = '(?:' + keys(map).join('|') + ')';
+ var testRegexp = RegExp(source);
+ var replaceRegexp = RegExp(source, 'g');
+ return function(string) {
+ string = string == null ? '' : '' + string;
+ return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+ };
+}
+export var escape = createEscaper(escapeMap);
+export var unescape = createEscaper(unescapeMap);
+
+// Traverses the children of `obj` along `path`. If a child is a function, it
+// is invoked with its parent as context. Returns the value of the final
+// child, or `fallback` if any child is undefined.
+export function result(obj, path, fallback) {
+ if (!isArray(path)) path = [path];
+ var length = path.length;
+ if (!length) {
+ return isFunction(fallback) ? fallback.call(obj) : fallback;
+ }
+ for (var i = 0; i < length; i++) {
+ var prop = obj == null ? void 0 : obj[path[i]];
+ if (prop === void 0) {
+ prop = fallback;
+ i = length; // Ensure we don't continue iterating.
+ }
+ obj = isFunction(prop) ? prop.call(obj) : prop;
+ }
+ return obj;
+}
+
+// Generate a unique integer id (unique within the entire client session).
+// Useful for temporary DOM ids.
+var idCounter = 0;
+export function uniqueId(prefix) {
+ var id = ++idCounter + '';
+ return prefix ? prefix + id : id;
+}
+
+// By default, Underscore uses ERB-style template delimiters, change the
+// following template settings to use alternative delimiters.
+export var templateSettings = _.templateSettings = {
+ evaluate: /<%([\s\S]+?)%>/g,
+ interpolate: /<%=([\s\S]+?)%>/g,
+ escape: /<%-([\s\S]+?)%>/g
+};
+
+// When customizing `templateSettings`, if you don't want to define an
+// interpolation, evaluation or escaping regex, we need one that is
+// guaranteed not to match.
+var noMatch = /(.)^/;
+
+// Certain characters need to be escaped so that they can be put into a
+// string literal.
+var escapes = {
+ "'": "'",
+ '\\': '\\',
+ '\r': 'r',
+ '\n': 'n',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+};
+
+var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
+
+var escapeChar = function(match) {
+ return '\\' + escapes[match];
+};
+
+// JavaScript micro-templating, similar to John Resig's implementation.
+// Underscore templating handles arbitrary delimiters, preserves whitespace,
+// and correctly escapes quotes within interpolated code.
+// NB: `oldSettings` only exists for backwards compatibility.
+export function template(text, settings, oldSettings) {
+ if (!settings && oldSettings) settings = oldSettings;
+ settings = defaults({}, settings, _.templateSettings);
+
+ // Combine delimiters into one regular expression via alternation.
+ var matcher = RegExp([
+ (settings.escape || noMatch).source,
+ (settings.interpolate || noMatch).source,
+ (settings.evaluate || noMatch).source
+ ].join('|') + '|$', 'g');
+
+ // Compile the template source, escaping string literals appropriately.
+ var index = 0;
+ var source = "__p+='";
+ text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+ source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
+ index = offset + match.length;
+
+ if (escape) {
+ source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+ } else if (interpolate) {
+ source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+ } else if (evaluate) {
+ source += "';\n" + evaluate + "\n__p+='";
+ }
+
+ // Adobe VMs need the match returned to produce the correct offset.
+ return match;
+ });
+ source += "';\n";
+
+ // If a variable is not specified, place data values in local scope.
+ if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+ source = "var __t,__p='',__j=Array.prototype.join," +
+ "print=function(){__p+=__j.call(arguments,'');};\n" +
+ source + 'return __p;\n';
+
+ var render;
+ try {
+ render = new Function(settings.variable || 'obj', '_', source);
+ } catch (e) {
+ e.source = source;
+ throw e;
+ }
+
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled source as a convenience for precompilation.
+ var argument = settings.variable || 'obj';
+ template.source = 'function(' + argument + '){\n' + source + '}';
+
+ return template;
+}
+
+// Add a "chain" function. Start chaining a wrapped Underscore object.
+export function chain(obj) {
+ var instance = _(obj);
+ instance._chain = true;
+ return instance;
+}
+
+// OOP
+// ---------------
+// If Underscore is called as a function, it returns a wrapped object that
+// can be used OO-style. This wrapper holds altered versions of all the
+// underscore functions. Wrapped objects may be chained.
+
+// Helper function to continue chaining intermediate results.
+function chainResult(instance, obj) {
+ return instance._chain ? _(obj).chain() : obj;
+}
+
+// Add your own custom functions to the Underscore object.
+export function mixin(obj) {
+ each(functions(obj), function(name) {
+ var func = _[name] = obj[name];
+ _.prototype[name] = function() {
+ var args = [this._wrapped];
+ push.apply(args, arguments);
+ return chainResult(this, func.apply(_, args));
+ };
+ });
+ return _;
+}
+
+// Add all mutator Array functions to the wrapper.
+each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ var obj = this._wrapped;
+ method.apply(obj, arguments);
+ if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
+ return chainResult(this, obj);
+ };
+});
+
+// Add all accessor Array functions to the wrapper.
+each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ return chainResult(this, method.apply(this._wrapped, arguments));
+ };
+});
+
+// Extracts the result from a wrapped and chained object.
+_.prototype.value = function() {
+ return this._wrapped;
+};
+
+// Provide unwrapping proxy for some methods used in engine operations
+// such as arithmetic and JSON stringification.
+_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
+
+_.prototype.toString = function() {
+ return String(this._wrapped);
+};
diff --git a/node_modules/underscore/package.json b/node_modules/underscore/package.json
new file mode 100644
index 0000000..2f94762
--- /dev/null
+++ b/node_modules/underscore/package.json
@@ -0,0 +1,98 @@
+{
+ "_from": "underscore@^1.9.1",
+ "_id": "[email protected]",
+ "_inBundle": false,
+ "_integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==",
+ "_location": "/underscore",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "range",
+ "registry": true,
+ "raw": "underscore@^1.9.1",
+ "name": "underscore",
+ "escapedName": "underscore",
+ "rawSpec": "^1.9.1",
+ "saveSpec": null,
+ "fetchSpec": "^1.9.1"
+ },
+ "_requiredBy": [
+ "/demojijs"
+ ],
+ "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz",
+ "_shasum": "73d6aa3668f3188e4adb0f1943bd12cfd7efaaaf",
+ "_spec": "underscore@^1.9.1",
+ "_where": "E:\\Documents\\GitHub\\s5nical\\node_modules\\demojijs",
+ "author": {
+ "name": "Jeremy Ashkenas",
+ "email": "[email protected]"
+ },
+ "bugs": {
+ "url": "https://github.com/jashkenas/underscore/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "JavaScript's functional programming helper library.",
+ "devDependencies": {
+ "coveralls": "^2.11.2",
+ "docco": "*",
+ "eslint": "^6.8.0",
+ "eslint-plugin-import": "^2.20.1",
+ "gzip-size-cli": "^1.0.0",
+ "husky": "^4.2.3",
+ "karma": "^0.13.13",
+ "karma-qunit": "~2.0.1",
+ "karma-sauce-launcher": "^1.2.0",
+ "nyc": "^2.1.3",
+ "pretty-bytes-cli": "^1.0.0",
+ "qunit": "^2.6.0",
+ "qunit-cli": "~0.2.0",
+ "rollup": "^0.59.4",
+ "uglify-js": "3.3.21"
+ },
+ "files": [
+ "underscore.js",
+ "underscore.js.map",
+ "underscore-min.js",
+ "underscore-min.js.map",
+ "modules/"
+ ],
+ "homepage": "https://underscorejs.org",
+ "husky": {
+ "hooks": {
+ "pre-commit": "npm run bundle && git add underscore.js underscore.js.map",
+ "post-commit": "git reset underscore.js underscore.js.map"
+ }
+ },
+ "keywords": [
+ "util",
+ "functional",
+ "server",
+ "client",
+ "browser"
+ ],
+ "license": "MIT",
+ "main": "underscore.js",
+ "module": "modules/index-all.js",
+ "name": "underscore",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jashkenas/underscore.git"
+ },
+ "scripts": {
+ "build": "npm run bundle && npm run minify -- --source-map content=underscore.js.map --source-map-url \" \" -o underscore-min.js",
+ "bundle": "rollup --config && eslint underscore.js",
+ "bundle-treeshake": "cd test-treeshake && npx rollup@latest --config",
+ "coverage": "nyc npm run test-node && nyc report",
+ "coveralls": "nyc npm run test-node && nyc report --reporter=text-lcov | coveralls",
+ "doc": "cd docs && rollup -c && docco -o . underscore.js",
+ "lint": "eslint modules/*.js test/*.js",
+ "minify": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m",
+ "prepare-tests": "npm run bundle && npm run bundle-treeshake",
+ "prepublishOnly": "npm run build && npm run doc",
+ "test": "npm run lint && npm run test-node",
+ "test-browser": "npm run prepare-tests && npm i karma-phantomjs-launcher && karma start",
+ "test-node": "npm run prepare-tests && qunit-cli test/*.js",
+ "weight": "npm run bundle && npm run minify | gzip-size | pretty-bytes"
+ },
+ "version": "1.10.2"
+}
diff --git a/node_modules/underscore/underscore-min.js b/node_modules/underscore/underscore-min.js
new file mode 100644
index 0000000..a4b8800
--- /dev/null
+++ b/node_modules/underscore/underscore-min.js
@@ -0,0 +1,6 @@
+!function(n,r){var t,e;"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(t=n._,e=r(),(n._=e).noConflict=function(){return n._=t,e})}(this,function(){
+// Underscore.js 1.10.2
+// https://underscorejs.org
+// (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+// Underscore may be freely distributed under the MIT license.
+var n="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},e=Array.prototype,i=Object.prototype,p="undefined"!=typeof Symbol?Symbol.prototype:null,u=e.push,f=e.slice,s=i.toString,o=i.hasOwnProperty,r=Array.isArray,a=Object.keys,t=Object.create,c=n.isNaN,l=n.isFinite,v=function(){};function h(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)}var g=h.VERSION="1.10.2";function y(u,o,n){if(void 0===o)return u;switch(null==n?3:n){case 1:return function(n){return u.call(o,n)};case 3:return function(n,r,t){return u.call(o,n,r,t)};case 4:return function(n,r,t,e){return u.call(o,n,r,t,e)}}return function(){return u.apply(o,arguments)}}function d(n,r,t){return null==n?ur:Cn(n)?y(n,r,t):Ln(n)&&!Kn(n)?ir(n):or(n)}function m(n,r){return d(n,r,1/0)}function b(n,r,t){return h.iteratee!==m?h.iteratee(n,r):d(n,r,t)}function j(u,o){return o=null==o?u.length-1:+o,function(){for(var n=Math.max(arguments.length-o,0),r=Array(n),t=0;t<n;t++)r[t]=arguments[t+o];switch(o){case 0:return u.call(this,r);case 1:return u.call(this,arguments[0],r);case 2:return u.call(this,arguments[0],arguments[1],r)}var e=Array(o+1);for(t=0;t<o;t++)e[t]=arguments[t];return e[o]=r,u.apply(this,e)}}function _(n){if(!Ln(n))return{};if(t)return t(n);v.prototype=n;var r=new v;return v.prototype=null,r}function w(r){return function(n){return null==n?void 0:n[r]}}function x(n,r){return null!=n&&o.call(n,r)}function S(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0}h.iteratee=m;var A=Math.pow(2,53)-1,O=w("length");function M(n){var r=O(n);return"number"==typeof r&&0<=r&&r<=A}function E(n,r,t){var e,u;if(r=y(r,t),M(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var o=Sn(n);for(e=0,u=o.length;e<u;e++)r(n[o[e]],o[e],n)}return n}function N(n,r,t){r=b(r,t);for(var e=!M(n)&&Sn(n),u=(e||n).length,o=Array(u),i=0;i<u;i++){var a=e?e[i]:i;o[i]=r(n[a],a,n)}return o}function k(f){return function(n,r,t,e){var u=3<=arguments.length;return function(n,r,t,e){var u=!M(n)&&Sn(n),o=(u||n).length,i=0<f?0:o-1;for(e||(t=n[u?u[i]:i],i+=f);0<=i&&i<o;i+=f){var a=u?u[i]:i;t=r(t,n[a],a,n)}return t}(n,y(r,e,4),t,u)}}var I=k(1),T=k(-1);function B(n,r,t){var e=(M(n)?on:Tn)(n,r,t);if(void 0!==e&&-1!==e)return n[e]}function R(n,e,r){var u=[];return e=b(e,r),E(n,function(n,r,t){e(n,r,t)&&u.push(n)}),u}function F(n,r,t){r=b(r,t);for(var e=!M(n)&&Sn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(!r(n[i],i,n))return!1}return!0}function q(n,r,t){r=b(r,t);for(var e=!M(n)&&Sn(n),u=(e||n).length,o=0;o<u;o++){var i=e?e[o]:o;if(r(n[i],i,n))return!0}return!1}function D(n,r,t,e){return M(n)||(n=On(n)),("number"!=typeof t||e)&&(t=0),0<=ln(n,r,t)}var W=j(function(n,t,e){var u,o;return Cn(t)?o=t:Kn(t)&&(u=t.slice(0,-1),t=t[t.length-1]),N(n,function(n){var r=o;if(!r){if(u&&u.length&&(n=S(n,u)),null==n)return;r=n[t]}return null==r?r:r.apply(n,e)})});function z(n,r){return N(n,or(r))}function P(n,e,r){var t,u,o=-1/0,i=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=M(n)?n:On(n)).length;a<f;a++)null!=(t=n[a])&&o<t&&(o=t);else e=b(e,r),E(n,function(n,r,t){u=e(n,r,t),(i<u||u===-1/0&&o===-1/0)&&(o=n,i=u)});return o}function K(n,r,t){if(null==r||t)return M(n)||(n=On(n)),n[ar(n.length-1)];var e=M(n)?Dn(n):On(n),u=O(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i<r;i++){var a=ar(i,o),f=e[i];e[i]=e[a],e[a]=f}return e.slice(0,r)}function L(i,r){return function(e,u,n){var o=r?[[],[]]:{};return u=b(u,n),E(e,function(n,r){var t=u(n,r,e);i(o,n,t)}),o}}var V=L(function(n,r,t){x(n,t)?n[t].push(r):n[t]=[r]}),C=L(function(n,r,t){n[t]=r}),J=L(function(n,r,t){x(n,t)?n[t]++:n[t]=1}),U=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;var $=L(function(n,r,t){n[t?0:1].push(r)},!0);function G(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[0]:H(n,n.length-r)}function H(n,r,t){return f.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Q(n,r,t){return f.call(n,null==r||t?1:r)}function X(n,r,t,e){for(var u=(e=e||[]).length,o=0,i=O(n);o<i;o++){var a=n[o];if(M(a)&&(Kn(a)||Vn(a)))if(r)for(var f=0,c=a.length;f<c;)e[u++]=a[f++];else X(a,r,t,e),u=e.length;else t||(e[u++]=a)}return e}var Y=j(function(n,r){return rn(n,r)});function Z(n,r,t,e){er(r)||(e=t,t=r,r=!1),null!=t&&(t=b(t,e));for(var u=[],o=[],i=0,a=O(n);i<a;i++){var f=n[i],c=t?t(f,i,n):f;r&&!t?(i&&o===c||u.push(f),o=c):t?D(o,c)||(o.push(c),u.push(f)):D(u,f)||u.push(f)}return u}var nn=j(function(n){return Z(X(n,!0,!0))});var rn=j(function(n,r){return r=X(r,!0,!0),R(n,function(n){return!D(r,n)})});function tn(n){for(var r=n&&P(n,O).length||0,t=Array(r),e=0;e<r;e++)t[e]=z(n,e);return t}var en=j(tn);function un(o){return function(n,r,t){r=b(r,t);for(var e=O(n),u=0<o?0:e-1;0<=u&&u<e;u+=o)if(r(n[u],u,n))return u;return-1}}var on=un(1),an=un(-1);function fn(n,r,t,e){for(var u=(t=b(t,e,1))(r),o=0,i=O(n);o<i;){var a=Math.floor((o+i)/2);t(n[a])<u?o=a+1:i=a}return o}function cn(o,i,a){return function(n,r,t){var e=0,u=O(n);if("number"==typeof t)0<o?e=0<=t?t:Math.max(t+u,e):u=0<=t?Math.min(t+1,u):t+u+1;else if(a&&t&&u)return n[t=a(n,r)]===r?t:-1;if(r!=r)return 0<=(t=i(f.call(n,e,u),tr))?t+e:-1;for(t=0<o?e:u-1;0<=t&&t<u;t+=o)if(n[t]===r)return t;return-1}}var ln=cn(1,on,fn),pn=cn(-1,an);function sn(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=_(n.prototype),i=n.apply(o,u);return Ln(i)?i:o}var vn=j(function(r,t,e){if(!Cn(r))throw new TypeError("Bind must be called on a function");var u=j(function(n){return sn(r,u,t,this,e.concat(n))});return u}),hn=j(function(u,o){var i=hn.placeholder,a=function(){for(var n=0,r=o.length,t=Array(r),e=0;e<r;e++)t[e]=o[e]===i?arguments[n++]:o[e];for(;n<arguments.length;)t.push(arguments[n++]);return sn(u,a,this,this,t)};return a});hn.placeholder=h;var gn=j(function(n,r){var t=(r=X(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=vn(n[e],n)}});var yn=j(function(n,r,t){return setTimeout(function(){return n.apply(null,t)},r)}),dn=hn(yn,h,1);function mn(n){return function(){return!n.apply(this,arguments)}}function bn(n,r){var t;return function(){return 0<--n&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var jn=hn(bn,2),_n=!{toString:null}.propertyIsEnumerable("toString"),wn=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];function xn(n,r){var t=wn.length,e=n.constructor,u=Cn(e)&&e.prototype||i,o="constructor";for(x(n,o)&&!D(r,o)&&r.push(o);t--;)(o=wn[t])in n&&n[o]!==u[o]&&!D(r,o)&&r.push(o)}function Sn(n){if(!Ln(n))return[];if(a)return a(n);var r=[];for(var t in n)x(n,t)&&r.push(t);return _n&&xn(n,r),r}function An(n){if(!Ln(n))return[];var r=[];for(var t in n)r.push(t);return _n&&xn(n,r),r}function On(n){for(var r=Sn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e}function Mn(n){for(var r={},t=Sn(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r}function En(n){var r=[];for(var t in n)Cn(n[t])&&r.push(t);return r.sort()}function Nn(f,c){return function(n){var r=arguments.length;if(c&&(n=Object(n)),r<2||null==n)return n;for(var t=1;t<r;t++)for(var e=arguments[t],u=f(e),o=u.length,i=0;i<o;i++){var a=u[i];c&&void 0!==n[a]||(n[a]=e[a])}return n}}var kn=Nn(An),In=Nn(Sn);function Tn(n,r,t){r=b(r,t);for(var e,u=Sn(n),o=0,i=u.length;o<i;o++)if(r(n[e=u[o]],e,n))return e}function Bn(n,r,t){return r in t}var Rn=j(function(n,r){var t={},e=r[0];if(null==n)return t;Cn(e)?(1<r.length&&(e=y(e,r[1])),r=An(n)):(e=Bn,r=X(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u<o;u++){var i=r[u],a=n[i];e(a,i,n)&&(t[i]=a)}return t}),Fn=j(function(n,t){var r,e=t[0];return Cn(e)?(e=mn(e),1<t.length&&(r=t[1])):(t=N(X(t,!1,!1),String),e=function(n,r){return!D(t,r)}),Rn(n,e,r)}),qn=Nn(An,!0);function Dn(n){return Ln(n)?Kn(n)?n.slice():kn({},n):n}function Wn(n,r){var t=Sn(r),e=t.length;if(null==n)return!e;for(var u=Object(n),o=0;o<e;o++){var i=t[o];if(r[i]!==u[i]||!(i in u))return!1}return!0}function zn(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var u=typeof n;return("function"===u||"object"===u||"object"==typeof r)&&function(n,r,t,e){n instanceof h&&(n=n._wrapped);r instanceof h&&(r=r._wrapped);var u=s.call(n);if(u!==s.call(r))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+r;case"[object Number]":return+n!=+n?+r!=+r:0==+n?1/+n==1/r:+n==+r;case"[object Date]":case"[object Boolean]":return+n==+r;case"[object Symbol]":return p.valueOf.call(n)===p.valueOf.call(r)}var o="[object Array]"===u;if(!o){if("object"!=typeof n||"object"!=typeof r)return!1;var i=n.constructor,a=r.constructor;if(i!==a&&!(Cn(i)&&i instanceof i&&Cn(a)&&a instanceof a)&&"constructor"in n&&"constructor"in r)return!1}e=e||[];var f=(t=t||[]).length;for(;f--;)if(t[f]===n)return e[f]===r;if(t.push(n),e.push(r),o){if((f=n.length)!==r.length)return!1;for(;f--;)if(!zn(n[f],r[f],t,e))return!1}else{var c,l=Sn(n);if(f=l.length,Sn(r).length!==f)return!1;for(;f--;)if(c=l[f],!x(r,c)||!zn(n[c],r[c],t,e))return!1}return t.pop(),e.pop(),!0}(n,r,t,e)}function Pn(r){return function(n){return s.call(n)==="[object "+r+"]"}}var Kn=r||Pn("Array");function Ln(n){var r=typeof n;return"function"===r||"object"===r&&!!n}var Vn=Pn("Arguments"),Cn=Pn("Function"),Jn=Pn("String"),Un=Pn("Number"),$n=Pn("Date"),Gn=Pn("RegExp"),Hn=Pn("Error"),Qn=Pn("Symbol"),Xn=Pn("Map"),Yn=Pn("WeakMap"),Zn=Pn("Set"),nr=Pn("WeakSet");!function(){Vn(arguments)||(Vn=function(n){return x(n,"callee")})}();var rr=n.document&&n.document.childNodes;function tr(n){return Un(n)&&c(n)}function er(n){return!0===n||!1===n||"[object Boolean]"===s.call(n)}function ur(n){return n}function or(r){return Kn(r)?function(n){return S(n,r)}:w(r)}function ir(r){return r=In({},r),function(n){return Wn(n,r)}}function ar(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))}"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof rr&&(Cn=function(n){return"function"==typeof n||!1});var fr=Date.now||function(){return(new Date).getTime()},cr={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},lr=Mn(cr);function pr(r){var t=function(n){return r[n]},n="(?:"+Sn(r).join("|")+")",e=RegExp(n),u=RegExp(n,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}}var sr=pr(cr),vr=pr(lr);var hr=0;var gr=h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},yr=/(.)^/,dr={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},mr=/\\|'|\r|\n|\u2028|\u2029/g,br=function(n){return"\\"+dr[n]};function jr(n,r){return n._chain?h(r).chain():r}function _r(t){return E(En(t),function(n){var r=h[n]=t[n];h.prototype[n]=function(){var n=[this._wrapped];return u.apply(n,arguments),jr(this,r.apply(h,n))}}),h}E(["pop","push","reverse","shift","sort","splice","unshift"],function(r){var t=e[r];h.prototype[r]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==r&&"splice"!==r||0!==n.length||delete n[0],jr(this,n)}}),E(["concat","join","slice"],function(n){var r=e[n];h.prototype[n]=function(){return jr(this,r.apply(this._wrapped,arguments))}}),h.prototype.valueOf=h.prototype.toJSON=h.prototype.value=function(){return this._wrapped},h.prototype.toString=function(){return String(this._wrapped)};var wr=_r({default:h,VERSION:g,iteratee:m,restArguments:j,each:E,forEach:E,map:N,collect:N,reduce:I,foldl:I,inject:I,reduceRight:T,foldr:T,find:B,detect:B,filter:R,select:R,reject:function(n,r,t){return R(n,mn(b(r)),t)},every:F,all:F,some:q,any:q,contains:D,includes:D,include:D,invoke:W,pluck:z,where:function(n,r){return R(n,ir(r))},findWhere:function(n,r){return B(n,ir(r))},max:P,min:function(n,e,r){var t,u,o=1/0,i=1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=M(n)?n:On(n)).length;a<f;a++)null!=(t=n[a])&&t<o&&(o=t);else e=b(e,r),E(n,function(n,r,t){((u=e(n,r,t))<i||u===1/0&&o===1/0)&&(o=n,i=u)});return o},shuffle:function(n){return K(n,1/0)},sample:K,sortBy:function(n,e,r){var u=0;return e=b(e,r),z(N(n,function(n,r,t){return{value:n,index:u++,criteria:e(n,r,t)}}).sort(function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(e<t||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index}),"value")},groupBy:V,indexBy:C,countBy:J,toArray:function(n){return n?Kn(n)?f.call(n):Jn(n)?n.match(U):M(n)?N(n,ur):On(n):[]},size:function(n){return null==n?0:M(n)?n.length:Sn(n).length},partition:$,first:G,head:G,take:G,initial:H,last:function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[n.length-1]:Q(n,Math.max(0,n.length-r))},rest:Q,tail:Q,drop:Q,compact:function(n){return R(n,Boolean)},flatten:function(n,r){return X(n,r,!1)},without:Y,uniq:Z,unique:Z,union:nn,intersection:function(n){for(var r=[],t=arguments.length,e=0,u=O(n);e<u;e++){var o=n[e];if(!D(r,o)){var i;for(i=1;i<t&&D(arguments[i],o);i++);i===t&&r.push(o)}}return r},difference:rn,unzip:tn,zip:en,object:function(n,r){for(var t={},e=0,u=O(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t},findIndex:on,findLastIndex:an,sortedIndex:fn,indexOf:ln,lastIndexOf:pn,range:function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),o=0;o<e;o++,n+=t)u[o]=n;return u},chunk:function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(f.call(n,e,e+=r));return t},bind:vn,partial:hn,bindAll:gn,memoize:function(e,u){var o=function(n){var r=o.cache,t=""+(u?u.apply(this,arguments):n);return x(r,t)||(r[t]=e.apply(this,arguments)),r[t]};return o.cache={},o},delay:yn,defer:dn,throttle:function(t,e,u){var o,i,a,f,c=0;u||(u={});var l=function(){c=!1===u.leading?0:fr(),o=null,f=t.apply(i,a),o||(i=a=null)},n=function(){var n=fr();c||!1!==u.leading||(c=n);var r=e-(n-c);return i=this,a=arguments,r<=0||e<r?(o&&(clearTimeout(o),o=null),c=n,f=t.apply(i,a),o||(i=a=null)):o||!1===u.trailing||(o=setTimeout(l,r)),f};return n.cancel=function(){clearTimeout(o),c=0,o=i=a=null},n},debounce:function(t,e,u){var o,i,a=function(n,r){o=null,r&&(i=t.apply(n,r))},n=j(function(n){if(o&&clearTimeout(o),u){var r=!o;o=setTimeout(a,e),r&&(i=t.apply(this,n))}else o=yn(a,e,this,n);return i});return n.cancel=function(){clearTimeout(o),o=null},n},wrap:function(n,r){return hn(r,n)},negate:mn,compose:function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:bn,once:jn,keys:Sn,allKeys:An,values:On,mapObject:function(n,r,t){r=b(r,t);for(var e=Sn(n),u=e.length,o={},i=0;i<u;i++){var a=e[i];o[a]=r(n[a],a,n)}return o},pairs:function(n){for(var r=Sn(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},invert:Mn,functions:En,methods:En,extend:kn,extendOwn:In,assign:In,findKey:Tn,pick:Rn,omit:Fn,defaults:qn,create:function(n,r){var t=_(n);return r&&In(t,r),t},clone:Dn,tap:function(n,r){return r(n),n},isMatch:Wn,isEqual:function(n,r){return zn(n,r)},isEmpty:function(n){return null==n||(M(n)&&(Kn(n)||Jn(n)||Vn(n))?0===n.length:0===Sn(n).length)},isElement:function(n){return!(!n||1!==n.nodeType)},isArray:Kn,isObject:Ln,isArguments:Vn,isFunction:Cn,isString:Jn,isNumber:Un,isDate:$n,isRegExp:Gn,isError:Hn,isSymbol:Qn,isMap:Xn,isWeakMap:Yn,isSet:Zn,isWeakSet:nr,isFinite:function(n){return!Qn(n)&&l(n)&&!c(parseFloat(n))},isNaN:tr,isBoolean:er,isNull:function(n){return null===n},isUndefined:function(n){return void 0===n},has:function(n,r){if(!Kn(r))return x(n,r);for(var t=r.length,e=0;e<t;e++){var u=r[e];if(null==n||!o.call(n,u))return!1;n=n[u]}return!!t},identity:ur,constant:function(n){return function(){return n}},noop:function(){},property:or,propertyOf:function(r){return null==r?function(){}:function(n){return Kn(n)?S(r,n):r[n]}},matcher:ir,matches:ir,times:function(n,r,t){var e=Array(Math.max(0,n));r=y(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},random:ar,now:fr,escape:sr,unescape:vr,result:function(n,r,t){Kn(r)||(r=[r]);var e=r.length;if(!e)return Cn(t)?t.call(n):t;for(var u=0;u<e;u++){var o=null==n?void 0:n[r[u]];void 0===o&&(o=t,u=e),n=Cn(o)?o.call(n):o}return n},uniqueId:function(n){var r=++hr+"";return n?n+r:r},templateSettings:gr,template:function(o,n,r){!n&&r&&(n=r),n=qn({},n,h.templateSettings);var t,e=RegExp([(n.escape||yr).source,(n.interpolate||yr).source,(n.evaluate||yr).source].join("|")+"|$","g"),i=0,a="__p+='";o.replace(e,function(n,r,t,e,u){return a+=o.slice(i,u).replace(mr,br),i=u+n.length,r?a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":t?a+="'+\n((__t=("+t+"))==null?'':__t)+\n'":e&&(a+="';\n"+e+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{t=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}var u=function(n){return t.call(this,n,h)},f=n.variable||"obj";return u.source="function("+f+"){\n"+a+"}",u},chain:function(n){var r=h(n);return r._chain=!0,r},mixin:_r});return wr._=wr}); \ No newline at end of file
diff --git a/node_modules/underscore/underscore-min.js.map b/node_modules/underscore/underscore-min.js.map
new file mode 100644
index 0000000..d6bfdb9
--- /dev/null
+++ b/node_modules/underscore/underscore-min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["modules/index.js","modules/index-default.js"],"names":["root","self","global","Function","ArrayProto","Array","prototype","ObjProto","Object","SymbolProto","Symbol","push","slice","toString","hasOwnProperty","nativeIsArray","isArray","nativeKeys","keys","nativeCreate","create","_isNaN","isNaN","_isFinite","isFinite","Ctor","_","obj","this","_wrapped","VERSION","optimizeCb","func","context","argCount","value","call","index","collection","accumulator","apply","arguments","baseIteratee","identity","isFunction","isObject","matcher","property","iteratee","Infinity","cb","restArguments","startIndex","length","Math","max","rest","args","baseCreate","result","shallowProperty","key","_has","path","deepGet","i","MAX_ARRAY_INDEX","pow","getLength","isArrayLike","each","_keys","map","results","currentKey","createReduce","dir","memo","initial","reducer","reduce","reduceRight","find","predicate","findIndex","findKey","filter","list","every","some","contains","item","fromIndex","guard","values","indexOf","invoke","contextPath","method","pluck","computed","lastComputed","v","sample","n","random","clone","min","last","rand","temp","group","behavior","partition","groupBy","indexBy","countBy","reStrSymbol","pass","first","array","_flatten","input","shallow","strict","output","idx","isArguments","j","len","without","otherArrays","difference","uniq","isSorted","isBoolean","seen","union","arrays","unzip","zip","createPredicateIndexFinder","findLastIndex","sortedIndex","low","high","mid","floor","createIndexFinder","predicateFind","lastIndexOf","executeBound","sourceFunc","boundFunc","callingContext","bind","TypeError","bound","callArgs","concat","partial","boundArgs","placeholder","position","bindAll","Error","delay","wait","setTimeout","defer","negate","before","times","once","hasEnumBug","propertyIsEnumerable","nonEnumerableProps","collectNonEnumProps","nonEnumIdx","constructor","proto","prop","allKeys","invert","functions","names","sort","createAssigner","keysFunc","defaults","source","l","extend","extendOwn","keyInObj","pick","omit","String","isMatch","object","attrs","eq","a","b","aStack","bStack","type","className","valueOf","areArrays","aCtor","bCtor","pop","deepEq","tagTester","name","isString","isNumber","isDate","isRegExp","isError","isSymbol","isMap","isWeakMap","isSet","isWeakSet","nodelist","document","childNodes","Int8Array","now","Date","getTime","escapeMap","&","<",">","\"","'","`","unescapeMap","createEscaper","escaper","match","join","testRegexp","RegExp","replaceRegexp","string","test","replace","escape","unescape","idCounter","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeRegExp","escapeChar","chainResult","instance","_chain","chain","mixin","toJSON","criteria","left","right","Boolean","argsLength","start","stop","step","ceil","range","count","hasher","memoize","cache","address","options","timeout","previous","later","leading","throttled","_now","remaining","clearTimeout","trailing","cancel","immediate","debounced","callNow","wrapper","pairs","props","interceptor","nodeType","parseFloat","accum","fallback","prefix","id","text","settings","oldSettings","render","offset","variable","e","template","data","argument"],"mappings":"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"} \ No newline at end of file
diff --git a/node_modules/underscore/underscore.js b/node_modules/underscore/underscore.js
new file mode 100644
index 0000000..31cb51c
--- /dev/null
+++ b/node_modules/underscore/underscore.js
@@ -0,0 +1,1827 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+ typeof define === 'function' && define.amd ? define('underscore', factory) :
+ (function() {
+ var current = global._;
+ var exports = factory();
+ global._ = exports;
+ exports.noConflict = function() { global._ = current; return exports; };
+ })();
+}(this, (function () {
+
+ // Underscore.js 1.10.2
+ // https://underscorejs.org
+ // (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ // Underscore may be freely distributed under the MIT license.
+
+ // Baseline setup
+ // --------------
+
+ // Establish the root object, `window` (`self`) in the browser, `global`
+ // on the server, or `this` in some virtual machines. We use `self`
+ // instead of `window` for `WebWorker` support.
+ var root = typeof self == 'object' && self.self === self && self ||
+ typeof global == 'object' && global.global === global && global ||
+ Function('return this')() ||
+ {};
+
+ // Save bytes in the minified (but not gzipped) version:
+ var ArrayProto = Array.prototype, ObjProto = Object.prototype;
+ var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
+
+ // Create quick reference variables for speed access to core prototypes.
+ var push = ArrayProto.push,
+ slice = ArrayProto.slice,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+ // All **ECMAScript 5** native function implementations that we hope to use
+ // are declared here.
+ var nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeCreate = Object.create;
+
+ // Create references to these builtin functions because we override them.
+ var _isNaN = root.isNaN,
+ _isFinite = root.isFinite;
+
+ // Naked function reference for surrogate-prototype-swapping.
+ var Ctor = function(){};
+
+ // The Underscore object. All exported functions below are added to it in the
+ // modules/index-all.js using the mixin function.
+ function _(obj) {
+ if (obj instanceof _) return obj;
+ if (!(this instanceof _)) return new _(obj);
+ this._wrapped = obj;
+ }
+
+ // Current version.
+ var VERSION = _.VERSION = '1.10.2';
+
+ // Internal function that returns an efficient (for current engines) version
+ // of the passed-in callback, to be repeatedly applied in other Underscore
+ // functions.
+ function optimizeCb(func, context, argCount) {
+ if (context === void 0) return func;
+ switch (argCount == null ? 3 : argCount) {
+ case 1: return function(value) {
+ return func.call(context, value);
+ };
+ // The 2-argument case is omitted because we’re not using it.
+ case 3: return function(value, index, collection) {
+ return func.call(context, value, index, collection);
+ };
+ case 4: return function(accumulator, value, index, collection) {
+ return func.call(context, accumulator, value, index, collection);
+ };
+ }
+ return function() {
+ return func.apply(context, arguments);
+ };
+ }
+
+ // An internal function to generate callbacks that can be applied to each
+ // element in a collection, returning the desired result — either `identity`,
+ // an arbitrary callback, a property matcher, or a property accessor.
+ function baseIteratee(value, context, argCount) {
+ if (value == null) return identity;
+ if (isFunction(value)) return optimizeCb(value, context, argCount);
+ if (isObject(value) && !isArray(value)) return matcher(value);
+ return property(value);
+ }
+
+ // External wrapper for our callback generator. Users may customize
+ // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
+ // This abstraction hides the internal-only argCount argument.
+ _.iteratee = iteratee;
+ function iteratee(value, context) {
+ return baseIteratee(value, context, Infinity);
+ }
+
+ // The function we actually call internally. It invokes _.iteratee if
+ // overridden, otherwise baseIteratee.
+ function cb(value, context, argCount) {
+ if (_.iteratee !== iteratee) return _.iteratee(value, context);
+ return baseIteratee(value, context, argCount);
+ }
+
+ // Some functions take a variable number of arguments, or a few expected
+ // arguments at the beginning and then a variable number of values to operate
+ // on. This helper accumulates all remaining arguments past the function’s
+ // argument length (or an explicit `startIndex`), into an array that becomes
+ // the last argument. Similar to ES6’s "rest parameter".
+ function restArguments(func, startIndex) {
+ startIndex = startIndex == null ? func.length - 1 : +startIndex;
+ return function() {
+ var length = Math.max(arguments.length - startIndex, 0),
+ rest = Array(length),
+ index = 0;
+ for (; index < length; index++) {
+ rest[index] = arguments[index + startIndex];
+ }
+ switch (startIndex) {
+ case 0: return func.call(this, rest);
+ case 1: return func.call(this, arguments[0], rest);
+ case 2: return func.call(this, arguments[0], arguments[1], rest);
+ }
+ var args = Array(startIndex + 1);
+ for (index = 0; index < startIndex; index++) {
+ args[index] = arguments[index];
+ }
+ args[startIndex] = rest;
+ return func.apply(this, args);
+ };
+ }
+
+ // An internal function for creating a new object that inherits from another.
+ function baseCreate(prototype) {
+ if (!isObject(prototype)) return {};
+ if (nativeCreate) return nativeCreate(prototype);
+ Ctor.prototype = prototype;
+ var result = new Ctor;
+ Ctor.prototype = null;
+ return result;
+ }
+
+ function shallowProperty(key) {
+ return function(obj) {
+ return obj == null ? void 0 : obj[key];
+ };
+ }
+
+ function _has(obj, path) {
+ return obj != null && hasOwnProperty.call(obj, path);
+ }
+
+ function deepGet(obj, path) {
+ var length = path.length;
+ for (var i = 0; i < length; i++) {
+ if (obj == null) return void 0;
+ obj = obj[path[i]];
+ }
+ return length ? obj : void 0;
+ }
+
+ // Helper for collection methods to determine whether a collection
+ // should be iterated as an array or as an object.
+ // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+ // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+ var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+ var getLength = shallowProperty('length');
+ function isArrayLike(collection) {
+ var length = getLength(collection);
+ return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
+ }
+
+ // Collection Functions
+ // --------------------
+
+ // The cornerstone, an `each` implementation, aka `forEach`.
+ // Handles raw objects in addition to array-likes. Treats all
+ // sparse array-likes as if they were dense.
+ function each(obj, iteratee, context) {
+ iteratee = optimizeCb(iteratee, context);
+ var i, length;
+ if (isArrayLike(obj)) {
+ for (i = 0, length = obj.length; i < length; i++) {
+ iteratee(obj[i], i, obj);
+ }
+ } else {
+ var _keys = keys(obj);
+ for (i = 0, length = _keys.length; i < length; i++) {
+ iteratee(obj[_keys[i]], _keys[i], obj);
+ }
+ }
+ return obj;
+ }
+
+ // Return the results of applying the iteratee to each element.
+ function map(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var _keys = !isArrayLike(obj) && keys(obj),
+ length = (_keys || obj).length,
+ results = Array(length);
+ for (var index = 0; index < length; index++) {
+ var currentKey = _keys ? _keys[index] : index;
+ results[index] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ }
+
+ // Create a reducing function iterating left or right.
+ function createReduce(dir) {
+ // Wrap code that reassigns argument variables in a separate function than
+ // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
+ var reducer = function(obj, iteratee, memo, initial) {
+ var _keys = !isArrayLike(obj) && keys(obj),
+ length = (_keys || obj).length,
+ index = dir > 0 ? 0 : length - 1;
+ if (!initial) {
+ memo = obj[_keys ? _keys[index] : index];
+ index += dir;
+ }
+ for (; index >= 0 && index < length; index += dir) {
+ var currentKey = _keys ? _keys[index] : index;
+ memo = iteratee(memo, obj[currentKey], currentKey, obj);
+ }
+ return memo;
+ };
+
+ return function(obj, iteratee, memo, context) {
+ var initial = arguments.length >= 3;
+ return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
+ };
+ }
+
+ // **Reduce** builds up a single result from a list of values, aka `inject`,
+ // or `foldl`.
+ var reduce = createReduce(1);
+
+ // The right-associative version of reduce, also known as `foldr`.
+ var reduceRight = createReduce(-1);
+
+ // Return the first value which passes a truth test.
+ function find(obj, predicate, context) {
+ var keyFinder = isArrayLike(obj) ? findIndex : findKey;
+ var key = keyFinder(obj, predicate, context);
+ if (key !== void 0 && key !== -1) return obj[key];
+ }
+
+ // Return all the elements that pass a truth test.
+ function filter(obj, predicate, context) {
+ var results = [];
+ predicate = cb(predicate, context);
+ each(obj, function(value, index, list) {
+ if (predicate(value, index, list)) results.push(value);
+ });
+ return results;
+ }
+
+ // Return all the elements for which a truth test fails.
+ function reject(obj, predicate, context) {
+ return filter(obj, negate(cb(predicate)), context);
+ }
+
+ // Determine whether all of the elements match a truth test.
+ function every(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var _keys = !isArrayLike(obj) && keys(obj),
+ length = (_keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = _keys ? _keys[index] : index;
+ if (!predicate(obj[currentKey], currentKey, obj)) return false;
+ }
+ return true;
+ }
+
+ // Determine if at least one element in the object matches a truth test.
+ function some(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var _keys = !isArrayLike(obj) && keys(obj),
+ length = (_keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = _keys ? _keys[index] : index;
+ if (predicate(obj[currentKey], currentKey, obj)) return true;
+ }
+ return false;
+ }
+
+ // Determine if the array or object contains a given item (using `===`).
+ function contains(obj, item, fromIndex, guard) {
+ if (!isArrayLike(obj)) obj = values(obj);
+ if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+ return indexOf(obj, item, fromIndex) >= 0;
+ }
+
+ // Invoke a method (with arguments) on every item in a collection.
+ var invoke = restArguments(function(obj, path, args) {
+ var contextPath, func;
+ if (isFunction(path)) {
+ func = path;
+ } else if (isArray(path)) {
+ contextPath = path.slice(0, -1);
+ path = path[path.length - 1];
+ }
+ return map(obj, function(context) {
+ var method = func;
+ if (!method) {
+ if (contextPath && contextPath.length) {
+ context = deepGet(context, contextPath);
+ }
+ if (context == null) return void 0;
+ method = context[path];
+ }
+ return method == null ? method : method.apply(context, args);
+ });
+ });
+
+ // Convenience version of a common use case of `map`: fetching a property.
+ function pluck(obj, key) {
+ return map(obj, property(key));
+ }
+
+ // Convenience version of a common use case of `filter`: selecting only objects
+ // containing specific `key:value` pairs.
+ function where(obj, attrs) {
+ return filter(obj, matcher(attrs));
+ }
+
+ // Convenience version of a common use case of `find`: getting the first object
+ // containing specific `key:value` pairs.
+ function findWhere(obj, attrs) {
+ return find(obj, matcher(attrs));
+ }
+
+ // Return the maximum element (or element-based computation).
+ function max(obj, iteratee, context) {
+ var result = -Infinity, lastComputed = -Infinity,
+ value, computed;
+ if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+ obj = isArrayLike(obj) ? obj : values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value != null && value > result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ each(obj, function(v, index, list) {
+ computed = iteratee(v, index, list);
+ if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+ result = v;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ }
+
+ // Return the minimum element (or element-based computation).
+ function min(obj, iteratee, context) {
+ var result = Infinity, lastComputed = Infinity,
+ value, computed;
+ if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
+ obj = isArrayLike(obj) ? obj : values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value != null && value < result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ each(obj, function(v, index, list) {
+ computed = iteratee(v, index, list);
+ if (computed < lastComputed || computed === Infinity && result === Infinity) {
+ result = v;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ }
+
+ // Shuffle a collection.
+ function shuffle(obj) {
+ return sample(obj, Infinity);
+ }
+
+ // Sample **n** random values from a collection using the modern version of the
+ // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+ // If **n** is not specified, returns a single random element.
+ // The internal `guard` argument allows it to work with `map`.
+ function sample(obj, n, guard) {
+ if (n == null || guard) {
+ if (!isArrayLike(obj)) obj = values(obj);
+ return obj[random(obj.length - 1)];
+ }
+ var sample = isArrayLike(obj) ? clone(obj) : values(obj);
+ var length = getLength(sample);
+ n = Math.max(Math.min(n, length), 0);
+ var last = length - 1;
+ for (var index = 0; index < n; index++) {
+ var rand = random(index, last);
+ var temp = sample[index];
+ sample[index] = sample[rand];
+ sample[rand] = temp;
+ }
+ return sample.slice(0, n);
+ }
+
+ // Sort the object's values by a criterion produced by an iteratee.
+ function sortBy(obj, iteratee, context) {
+ var index = 0;
+ iteratee = cb(iteratee, context);
+ return pluck(map(obj, function(value, key, list) {
+ return {
+ value: value,
+ index: index++,
+ criteria: iteratee(value, key, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria;
+ var b = right.criteria;
+ if (a !== b) {
+ if (a > b || a === void 0) return 1;
+ if (a < b || b === void 0) return -1;
+ }
+ return left.index - right.index;
+ }), 'value');
+ }
+
+ // An internal function used for aggregate "group by" operations.
+ function group(behavior, partition) {
+ return function(obj, iteratee, context) {
+ var result = partition ? [[], []] : {};
+ iteratee = cb(iteratee, context);
+ each(obj, function(value, index) {
+ var key = iteratee(value, index, obj);
+ behavior(result, value, key);
+ });
+ return result;
+ };
+ }
+
+ // Groups the object's values by a criterion. Pass either a string attribute
+ // to group by, or a function that returns the criterion.
+ var groupBy = group(function(result, value, key) {
+ if (_has(result, key)) result[key].push(value); else result[key] = [value];
+ });
+
+ // Indexes the object's values by a criterion, similar to `groupBy`, but for
+ // when you know that your index values will be unique.
+ var indexBy = group(function(result, value, key) {
+ result[key] = value;
+ });
+
+ // Counts instances of an object that group by a certain criterion. Pass
+ // either a string attribute to count by, or a function that returns the
+ // criterion.
+ var countBy = group(function(result, value, key) {
+ if (_has(result, key)) result[key]++; else result[key] = 1;
+ });
+
+ var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
+ // Safely create a real, live array from anything iterable.
+ function toArray(obj) {
+ if (!obj) return [];
+ if (isArray(obj)) return slice.call(obj);
+ if (isString(obj)) {
+ // Keep surrogate pair characters together
+ return obj.match(reStrSymbol);
+ }
+ if (isArrayLike(obj)) return map(obj, identity);
+ return values(obj);
+ }
+
+ // Return the number of elements in an object.
+ function size(obj) {
+ if (obj == null) return 0;
+ return isArrayLike(obj) ? obj.length : keys(obj).length;
+ }
+
+ // Split a collection into two arrays: one whose elements all satisfy the given
+ // predicate, and one whose elements all do not satisfy the predicate.
+ var partition = group(function(result, value, pass) {
+ result[pass ? 0 : 1].push(value);
+ }, true);
+
+ // Array Functions
+ // ---------------
+
+ // Get the first element of an array. Passing **n** will return the first N
+ // values in the array. The **guard** check allows it to work with `map`.
+ function first(array, n, guard) {
+ if (array == null || array.length < 1) return n == null ? void 0 : [];
+ if (n == null || guard) return array[0];
+ return initial(array, array.length - n);
+ }
+
+ // Returns everything but the last entry of the array. Especially useful on
+ // the arguments object. Passing **n** will return all the values in
+ // the array, excluding the last N.
+ function initial(array, n, guard) {
+ return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+ }
+
+ // Get the last element of an array. Passing **n** will return the last N
+ // values in the array.
+ function last(array, n, guard) {
+ if (array == null || array.length < 1) return n == null ? void 0 : [];
+ if (n == null || guard) return array[array.length - 1];
+ return rest(array, Math.max(0, array.length - n));
+ }
+
+ // Returns everything but the first entry of the array. Especially useful on
+ // the arguments object. Passing an **n** will return the rest N values in the
+ // array.
+ function rest(array, n, guard) {
+ return slice.call(array, n == null || guard ? 1 : n);
+ }
+
+ // Trim out all falsy values from an array.
+ function compact(array) {
+ return filter(array, Boolean);
+ }
+
+ // Internal implementation of a recursive `flatten` function.
+ function _flatten(input, shallow, strict, output) {
+ output = output || [];
+ var idx = output.length;
+ for (var i = 0, length = getLength(input); i < length; i++) {
+ var value = input[i];
+ if (isArrayLike(value) && (isArray(value) || isArguments(value))) {
+ // Flatten current level of array or arguments object.
+ if (shallow) {
+ var j = 0, len = value.length;
+ while (j < len) output[idx++] = value[j++];
+ } else {
+ _flatten(value, shallow, strict, output);
+ idx = output.length;
+ }
+ } else if (!strict) {
+ output[idx++] = value;
+ }
+ }
+ return output;
+ }
+
+ // Flatten out an array, either recursively (by default), or just one level.
+ function flatten(array, shallow) {
+ return _flatten(array, shallow, false);
+ }
+
+ // Return a version of the array that does not contain the specified value(s).
+ var without = restArguments(function(array, otherArrays) {
+ return difference(array, otherArrays);
+ });
+
+ // Produce a duplicate-free version of the array. If the array has already
+ // been sorted, you have the option of using a faster algorithm.
+ // The faster algorithm will not work with an iteratee if the iteratee
+ // is not a one-to-one function, so providing an iteratee will disable
+ // the faster algorithm.
+ function uniq(array, isSorted, iteratee, context) {
+ if (!isBoolean(isSorted)) {
+ context = iteratee;
+ iteratee = isSorted;
+ isSorted = false;
+ }
+ if (iteratee != null) iteratee = cb(iteratee, context);
+ var result = [];
+ var seen = [];
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var value = array[i],
+ computed = iteratee ? iteratee(value, i, array) : value;
+ if (isSorted && !iteratee) {
+ if (!i || seen !== computed) result.push(value);
+ seen = computed;
+ } else if (iteratee) {
+ if (!contains(seen, computed)) {
+ seen.push(computed);
+ result.push(value);
+ }
+ } else if (!contains(result, value)) {
+ result.push(value);
+ }
+ }
+ return result;
+ }
+
+ // Produce an array that contains the union: each distinct element from all of
+ // the passed-in arrays.
+ var union = restArguments(function(arrays) {
+ return uniq(_flatten(arrays, true, true));
+ });
+
+ // Produce an array that contains every item shared between all the
+ // passed-in arrays.
+ function intersection(array) {
+ var result = [];
+ var argsLength = arguments.length;
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var item = array[i];
+ if (contains(result, item)) continue;
+ var j;
+ for (j = 1; j < argsLength; j++) {
+ if (!contains(arguments[j], item)) break;
+ }
+ if (j === argsLength) result.push(item);
+ }
+ return result;
+ }
+
+ // Take the difference between one array and a number of other arrays.
+ // Only the elements present in just the first array will remain.
+ var difference = restArguments(function(array, rest) {
+ rest = _flatten(rest, true, true);
+ return filter(array, function(value){
+ return !contains(rest, value);
+ });
+ });
+
+ // Complement of zip. Unzip accepts an array of arrays and groups
+ // each array's elements on shared indices.
+ function unzip(array) {
+ var length = array && max(array, getLength).length || 0;
+ var result = Array(length);
+
+ for (var index = 0; index < length; index++) {
+ result[index] = pluck(array, index);
+ }
+ return result;
+ }
+
+ // Zip together multiple lists into a single array -- elements that share
+ // an index go together.
+ var zip = restArguments(unzip);
+
+ // Converts lists into objects. Pass either a single array of `[key, value]`
+ // pairs, or two parallel arrays of the same length -- one of keys, and one of
+ // the corresponding values. Passing by pairs is the reverse of pairs.
+ function object(list, values) {
+ var result = {};
+ for (var i = 0, length = getLength(list); i < length; i++) {
+ if (values) {
+ result[list[i]] = values[i];
+ } else {
+ result[list[i][0]] = list[i][1];
+ }
+ }
+ return result;
+ }
+
+ // Generator function to create the findIndex and findLastIndex functions.
+ function createPredicateIndexFinder(dir) {
+ return function(array, predicate, context) {
+ predicate = cb(predicate, context);
+ var length = getLength(array);
+ var index = dir > 0 ? 0 : length - 1;
+ for (; index >= 0 && index < length; index += dir) {
+ if (predicate(array[index], index, array)) return index;
+ }
+ return -1;
+ };
+ }
+
+ // Returns the first index on an array-like that passes a predicate test.
+ var findIndex = createPredicateIndexFinder(1);
+ var findLastIndex = createPredicateIndexFinder(-1);
+
+ // Use a comparator function to figure out the smallest index at which
+ // an object should be inserted so as to maintain order. Uses binary search.
+ function sortedIndex(array, obj, iteratee, context) {
+ iteratee = cb(iteratee, context, 1);
+ var value = iteratee(obj);
+ var low = 0, high = getLength(array);
+ while (low < high) {
+ var mid = Math.floor((low + high) / 2);
+ if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
+ }
+ return low;
+ }
+
+ // Generator function to create the indexOf and lastIndexOf functions.
+ function createIndexFinder(dir, predicateFind, sortedIndex) {
+ return function(array, item, idx) {
+ var i = 0, length = getLength(array);
+ if (typeof idx == 'number') {
+ if (dir > 0) {
+ i = idx >= 0 ? idx : Math.max(idx + length, i);
+ } else {
+ length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+ }
+ } else if (sortedIndex && idx && length) {
+ idx = sortedIndex(array, item);
+ return array[idx] === item ? idx : -1;
+ }
+ if (item !== item) {
+ idx = predicateFind(slice.call(array, i, length), isNaN);
+ return idx >= 0 ? idx + i : -1;
+ }
+ for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+ if (array[idx] === item) return idx;
+ }
+ return -1;
+ };
+ }
+
+ // Return the position of the first occurrence of an item in an array,
+ // or -1 if the item is not included in the array.
+ // If the array is large and already in sort order, pass `true`
+ // for **isSorted** to use binary search.
+ var indexOf = createIndexFinder(1, findIndex, sortedIndex);
+ var lastIndexOf = createIndexFinder(-1, findLastIndex);
+
+ // Generate an integer Array containing an arithmetic progression. A port of
+ // the native Python `range()` function. See
+ // [the Python documentation](https://docs.python.org/library/functions.html#range).
+ function range(start, stop, step) {
+ if (stop == null) {
+ stop = start || 0;
+ start = 0;
+ }
+ if (!step) {
+ step = stop < start ? -1 : 1;
+ }
+
+ var length = Math.max(Math.ceil((stop - start) / step), 0);
+ var range = Array(length);
+
+ for (var idx = 0; idx < length; idx++, start += step) {
+ range[idx] = start;
+ }
+
+ return range;
+ }
+
+ // Chunk a single array into multiple arrays, each containing `count` or fewer
+ // items.
+ function chunk(array, count) {
+ if (count == null || count < 1) return [];
+ var result = [];
+ var i = 0, length = array.length;
+ while (i < length) {
+ result.push(slice.call(array, i, i += count));
+ }
+ return result;
+ }
+
+ // Function (ahem) Functions
+ // ------------------
+
+ // Determines whether to execute a function as a constructor
+ // or a normal function with the provided arguments.
+ function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
+ if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+ var self = baseCreate(sourceFunc.prototype);
+ var result = sourceFunc.apply(self, args);
+ if (isObject(result)) return result;
+ return self;
+ }
+
+ // Create a function bound to a given object (assigning `this`, and arguments,
+ // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+ // available.
+ var bind = restArguments(function(func, context, args) {
+ if (!isFunction(func)) throw new TypeError('Bind must be called on a function');
+ var bound = restArguments(function(callArgs) {
+ return executeBound(func, bound, context, this, args.concat(callArgs));
+ });
+ return bound;
+ });
+
+ // Partially apply a function by creating a version that has had some of its
+ // arguments pre-filled, without changing its dynamic `this` context. _ acts
+ // as a placeholder by default, allowing any combination of arguments to be
+ // pre-filled. Set `partial.placeholder` for a custom placeholder argument.
+ var partial = restArguments(function(func, boundArgs) {
+ var placeholder = partial.placeholder;
+ var bound = function() {
+ var position = 0, length = boundArgs.length;
+ var args = Array(length);
+ for (var i = 0; i < length; i++) {
+ args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
+ }
+ while (position < arguments.length) args.push(arguments[position++]);
+ return executeBound(func, bound, this, this, args);
+ };
+ return bound;
+ });
+
+ partial.placeholder = _;
+
+ // Bind a number of an object's methods to that object. Remaining arguments
+ // are the method names to be bound. Useful for ensuring that all callbacks
+ // defined on an object belong to it.
+ var bindAll = restArguments(function(obj, _keys) {
+ _keys = _flatten(_keys, false, false);
+ var index = _keys.length;
+ if (index < 1) throw new Error('bindAll must be passed function names');
+ while (index--) {
+ var key = _keys[index];
+ obj[key] = bind(obj[key], obj);
+ }
+ });
+
+ // Memoize an expensive function by storing its results.
+ function memoize(func, hasher) {
+ var memoize = function(key) {
+ var cache = memoize.cache;
+ var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+ if (!_has(cache, address)) cache[address] = func.apply(this, arguments);
+ return cache[address];
+ };
+ memoize.cache = {};
+ return memoize;
+ }
+
+ // Delays a function for the given number of milliseconds, and then calls
+ // it with the arguments supplied.
+ var delay = restArguments(function(func, wait, args) {
+ return setTimeout(function() {
+ return func.apply(null, args);
+ }, wait);
+ });
+
+ // Defers a function, scheduling it to run after the current call stack has
+ // cleared.
+ var defer = partial(delay, _, 1);
+
+ // Returns a function, that, when invoked, will only be triggered at most once
+ // during a given window of time. Normally, the throttled function will run
+ // as much as it can, without ever going more than once per `wait` duration;
+ // but if you'd like to disable the execution on the leading edge, pass
+ // `{leading: false}`. To disable execution on the trailing edge, ditto.
+ function throttle(func, wait, options) {
+ var timeout, context, args, result;
+ var previous = 0;
+ if (!options) options = {};
+
+ var later = function() {
+ previous = options.leading === false ? 0 : now();
+ timeout = null;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ };
+
+ var throttled = function() {
+ var _now = now();
+ if (!previous && options.leading === false) previous = _now;
+ var remaining = wait - (_now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0 || remaining > wait) {
+ if (timeout) {
+ clearTimeout(timeout);
+ timeout = null;
+ }
+ previous = _now;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ } else if (!timeout && options.trailing !== false) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+
+ throttled.cancel = function() {
+ clearTimeout(timeout);
+ previous = 0;
+ timeout = context = args = null;
+ };
+
+ return throttled;
+ }
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ function debounce(func, wait, immediate) {
+ var timeout, result;
+
+ var later = function(context, args) {
+ timeout = null;
+ if (args) result = func.apply(context, args);
+ };
+
+ var debounced = restArguments(function(args) {
+ if (timeout) clearTimeout(timeout);
+ if (immediate) {
+ var callNow = !timeout;
+ timeout = setTimeout(later, wait);
+ if (callNow) result = func.apply(this, args);
+ } else {
+ timeout = delay(later, wait, this, args);
+ }
+
+ return result;
+ });
+
+ debounced.cancel = function() {
+ clearTimeout(timeout);
+ timeout = null;
+ };
+
+ return debounced;
+ }
+
+ // Returns the first function passed as an argument to the second,
+ // allowing you to adjust arguments, run code before and after, and
+ // conditionally execute the original function.
+ function wrap(func, wrapper) {
+ return partial(wrapper, func);
+ }
+
+ // Returns a negated version of the passed-in predicate.
+ function negate(predicate) {
+ return function() {
+ return !predicate.apply(this, arguments);
+ };
+ }
+
+ // Returns a function that is the composition of a list of functions, each
+ // consuming the return value of the function that follows.
+ function compose() {
+ var args = arguments;
+ var start = args.length - 1;
+ return function() {
+ var i = start;
+ var result = args[start].apply(this, arguments);
+ while (i--) result = args[i].call(this, result);
+ return result;
+ };
+ }
+
+ // Returns a function that will only be executed on and after the Nth call.
+ function after(times, func) {
+ return function() {
+ if (--times < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ }
+
+ // Returns a function that will only be executed up to (but not including) the Nth call.
+ function before(times, func) {
+ var memo;
+ return function() {
+ if (--times > 0) {
+ memo = func.apply(this, arguments);
+ }
+ if (times <= 1) func = null;
+ return memo;
+ };
+ }
+
+ // Returns a function that will be executed at most one time, no matter how
+ // often you call it. Useful for lazy initialization.
+ var once = partial(before, 2);
+
+ // Object Functions
+ // ----------------
+
+ // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+ var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
+ var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+ 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
+
+ function collectNonEnumProps(obj, _keys) {
+ var nonEnumIdx = nonEnumerableProps.length;
+ var constructor = obj.constructor;
+ var proto = isFunction(constructor) && constructor.prototype || ObjProto;
+
+ // Constructor is a special case.
+ var prop = 'constructor';
+ if (_has(obj, prop) && !contains(_keys, prop)) _keys.push(prop);
+
+ while (nonEnumIdx--) {
+ prop = nonEnumerableProps[nonEnumIdx];
+ if (prop in obj && obj[prop] !== proto[prop] && !contains(_keys, prop)) {
+ _keys.push(prop);
+ }
+ }
+ }
+
+ // Retrieve the names of an object's own properties.
+ // Delegates to **ECMAScript 5**'s native `Object.keys`.
+ function keys(obj) {
+ if (!isObject(obj)) return [];
+ if (nativeKeys) return nativeKeys(obj);
+ var _keys = [];
+ for (var key in obj) if (_has(obj, key)) _keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, _keys);
+ return _keys;
+ }
+
+ // Retrieve all the property names of an object.
+ function allKeys(obj) {
+ if (!isObject(obj)) return [];
+ var _keys = [];
+ for (var key in obj) _keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, _keys);
+ return _keys;
+ }
+
+ // Retrieve the values of an object's properties.
+ function values(obj) {
+ var _keys = keys(obj);
+ var length = _keys.length;
+ var values = Array(length);
+ for (var i = 0; i < length; i++) {
+ values[i] = obj[_keys[i]];
+ }
+ return values;
+ }
+
+ // Returns the results of applying the iteratee to each element of the object.
+ // In contrast to map it returns an object.
+ function mapObject(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var _keys = keys(obj),
+ length = _keys.length,
+ results = {};
+ for (var index = 0; index < length; index++) {
+ var currentKey = _keys[index];
+ results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ }
+
+ // Convert an object into a list of `[key, value]` pairs.
+ // The opposite of object.
+ function pairs(obj) {
+ var _keys = keys(obj);
+ var length = _keys.length;
+ var pairs = Array(length);
+ for (var i = 0; i < length; i++) {
+ pairs[i] = [_keys[i], obj[_keys[i]]];
+ }
+ return pairs;
+ }
+
+ // Invert the keys and values of an object. The values must be serializable.
+ function invert(obj) {
+ var result = {};
+ var _keys = keys(obj);
+ for (var i = 0, length = _keys.length; i < length; i++) {
+ result[obj[_keys[i]]] = _keys[i];
+ }
+ return result;
+ }
+
+ // Return a sorted list of the function names available on the object.
+ function functions(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+ }
+
+ // An internal function for creating assigner functions.
+ function createAssigner(keysFunc, defaults) {
+ return function(obj) {
+ var length = arguments.length;
+ if (defaults) obj = Object(obj);
+ if (length < 2 || obj == null) return obj;
+ for (var index = 1; index < length; index++) {
+ var source = arguments[index],
+ _keys = keysFunc(source),
+ l = _keys.length;
+ for (var i = 0; i < l; i++) {
+ var key = _keys[i];
+ if (!defaults || obj[key] === void 0) obj[key] = source[key];
+ }
+ }
+ return obj;
+ };
+ }
+
+ // Extend a given object with all the properties in passed-in object(s).
+ var extend = createAssigner(allKeys);
+
+ // Assigns a given object with all the own properties in the passed-in object(s).
+ // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+ var extendOwn = createAssigner(keys);
+
+ // Returns the first key on an object that passes a predicate test.
+ function findKey(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var _keys = keys(obj), key;
+ for (var i = 0, length = _keys.length; i < length; i++) {
+ key = _keys[i];
+ if (predicate(obj[key], key, obj)) return key;
+ }
+ }
+
+ // Internal pick helper function to determine if `obj` has key `key`.
+ function keyInObj(value, key, obj) {
+ return key in obj;
+ }
+
+ // Return a copy of the object only containing the whitelisted properties.
+ var pick = restArguments(function(obj, _keys) {
+ var result = {}, iteratee = _keys[0];
+ if (obj == null) return result;
+ if (isFunction(iteratee)) {
+ if (_keys.length > 1) iteratee = optimizeCb(iteratee, _keys[1]);
+ _keys = allKeys(obj);
+ } else {
+ iteratee = keyInObj;
+ _keys = _flatten(_keys, false, false);
+ obj = Object(obj);
+ }
+ for (var i = 0, length = _keys.length; i < length; i++) {
+ var key = _keys[i];
+ var value = obj[key];
+ if (iteratee(value, key, obj)) result[key] = value;
+ }
+ return result;
+ });
+
+ // Return a copy of the object without the blacklisted properties.
+ var omit = restArguments(function(obj, _keys) {
+ var iteratee = _keys[0], context;
+ if (isFunction(iteratee)) {
+ iteratee = negate(iteratee);
+ if (_keys.length > 1) context = _keys[1];
+ } else {
+ _keys = map(_flatten(_keys, false, false), String);
+ iteratee = function(value, key) {
+ return !contains(_keys, key);
+ };
+ }
+ return pick(obj, iteratee, context);
+ });
+
+ // Fill in a given object with default properties.
+ var defaults = createAssigner(allKeys, true);
+
+ // Creates an object that inherits from the given prototype object.
+ // If additional properties are provided then they will be added to the
+ // created object.
+ function create(prototype, props) {
+ var result = baseCreate(prototype);
+ if (props) extendOwn(result, props);
+ return result;
+ }
+
+ // Create a (shallow-cloned) duplicate of an object.
+ function clone(obj) {
+ if (!isObject(obj)) return obj;
+ return isArray(obj) ? obj.slice() : extend({}, obj);
+ }
+
+ // Invokes interceptor with the obj, and then returns obj.
+ // The primary purpose of this method is to "tap into" a method chain, in
+ // order to perform operations on intermediate results within the chain.
+ function tap(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+ }
+
+ // Returns whether an object has a given set of `key:value` pairs.
+ function isMatch(object, attrs) {
+ var _keys = keys(attrs), length = _keys.length;
+ if (object == null) return !length;
+ var obj = Object(object);
+ for (var i = 0; i < length; i++) {
+ var key = _keys[i];
+ if (attrs[key] !== obj[key] || !(key in obj)) return false;
+ }
+ return true;
+ }
+
+
+ // Internal recursive comparison function for `isEqual`.
+ function eq(a, b, aStack, bStack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
+ // `null` or `undefined` only equal to itself (strict comparison).
+ if (a == null || b == null) return false;
+ // `NaN`s are equivalent, but non-reflexive.
+ if (a !== a) return b !== b;
+ // Exhaust primitive checks
+ var type = typeof a;
+ if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
+ return deepEq(a, b, aStack, bStack);
+ }
+
+ // Internal recursive comparison function for `isEqual`.
+ function deepEq(a, b, aStack, bStack) {
+ // Unwrap any wrapped objects.
+ if (a instanceof _) a = a._wrapped;
+ if (b instanceof _) b = b._wrapped;
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className !== toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, regular expressions, dates, and booleans are compared by value.
+ case '[object RegExp]':
+ // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return '' + a === '' + b;
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive.
+ // Object(NaN) is equivalent to NaN.
+ if (+a !== +a) return +b !== +b;
+ // An `egal` comparison is performed for other numeric values.
+ return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a === +b;
+ case '[object Symbol]':
+ return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
+ }
+
+ var areArrays = className === '[object Array]';
+ if (!areArrays) {
+ if (typeof a != 'object' || typeof b != 'object') return false;
+
+ // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+ // from different frames are.
+ var aCtor = a.constructor, bCtor = b.constructor;
+ if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&
+ isFunction(bCtor) && bCtor instanceof bCtor)
+ && ('constructor' in a && 'constructor' in b)) {
+ return false;
+ }
+ }
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+ // Initializing stack of traversed objects.
+ // It's done here since we only need them for objects and arrays comparison.
+ aStack = aStack || [];
+ bStack = bStack || [];
+ var length = aStack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (aStack[length] === a) return bStack[length] === b;
+ }
+
+ // Add the first object to the stack of traversed objects.
+ aStack.push(a);
+ bStack.push(b);
+
+ // Recursively compare objects and arrays.
+ if (areArrays) {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ length = a.length;
+ if (length !== b.length) return false;
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (length--) {
+ if (!eq(a[length], b[length], aStack, bStack)) return false;
+ }
+ } else {
+ // Deep compare objects.
+ var _keys = keys(a), key;
+ length = _keys.length;
+ // Ensure that both objects contain the same number of properties before comparing deep equality.
+ if (keys(b).length !== length) return false;
+ while (length--) {
+ // Deep compare each member
+ key = _keys[length];
+ if (!(_has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ aStack.pop();
+ bStack.pop();
+ return true;
+ }
+
+ // Perform a deep comparison to check if two objects are equal.
+ function isEqual(a, b) {
+ return eq(a, b);
+ }
+
+ // Is a given array, string, or object empty?
+ // An "empty" object has no enumerable own-properties.
+ function isEmpty(obj) {
+ if (obj == null) return true;
+ if (isArrayLike(obj) && (isArray(obj) || isString(obj) || isArguments(obj))) return obj.length === 0;
+ return keys(obj).length === 0;
+ }
+
+ // Is a given value a DOM element?
+ function isElement(obj) {
+ return !!(obj && obj.nodeType === 1);
+ }
+
+ // Internal function for creating a toString-based type tester.
+ function tagTester(name) {
+ return function(obj) {
+ return toString.call(obj) === '[object ' + name + ']';
+ };
+ }
+
+ // Is a given value an array?
+ // Delegates to ECMA5's native Array.isArray
+ var isArray = nativeIsArray || tagTester('Array');
+
+ // Is a given variable an object?
+ function isObject(obj) {
+ var type = typeof obj;
+ return type === 'function' || type === 'object' && !!obj;
+ }
+
+ // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.
+ var isArguments = tagTester('Arguments');
+ var isFunction = tagTester('Function');
+ var isString = tagTester('String');
+ var isNumber = tagTester('Number');
+ var isDate = tagTester('Date');
+ var isRegExp = tagTester('RegExp');
+ var isError = tagTester('Error');
+ var isSymbol = tagTester('Symbol');
+ var isMap = tagTester('Map');
+ var isWeakMap = tagTester('WeakMap');
+ var isSet = tagTester('Set');
+ var isWeakSet = tagTester('WeakSet');
+
+ // Define a fallback version of the method in browsers (ahem, IE < 9), where
+ // there isn't any inspectable "Arguments" type.
+ (function() {
+ if (!isArguments(arguments)) {
+ isArguments = function(obj) {
+ return _has(obj, 'callee');
+ };
+ }
+ }());
+
+ // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
+ // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
+ var nodelist = root.document && root.document.childNodes;
+ if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
+ isFunction = function(obj) {
+ return typeof obj == 'function' || false;
+ };
+ }
+
+ // Is a given object a finite number?
+ function isFinite(obj) {
+ return !isSymbol(obj) && _isFinite(obj) && !_isNaN(parseFloat(obj));
+ }
+
+ // Is the given value `NaN`?
+ function isNaN(obj) {
+ return isNumber(obj) && _isNaN(obj);
+ }
+
+ // Is a given value a boolean?
+ function isBoolean(obj) {
+ return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+ }
+
+ // Is a given value equal to null?
+ function isNull(obj) {
+ return obj === null;
+ }
+
+ // Is a given variable undefined?
+ function isUndefined(obj) {
+ return obj === void 0;
+ }
+
+ // Shortcut function for checking if an object has a given property directly
+ // on itself (in other words, not on a prototype).
+ function has(obj, path) {
+ if (!isArray(path)) {
+ return _has(obj, path);
+ }
+ var length = path.length;
+ for (var i = 0; i < length; i++) {
+ var key = path[i];
+ if (obj == null || !hasOwnProperty.call(obj, key)) {
+ return false;
+ }
+ obj = obj[key];
+ }
+ return !!length;
+ }
+
+ // Utility Functions
+ // -----------------
+
+ // Keep the identity function around for default iteratees.
+ function identity(value) {
+ return value;
+ }
+
+ // Predicate-generating functions. Often useful outside of Underscore.
+ function constant(value) {
+ return function() {
+ return value;
+ };
+ }
+
+ function noop(){}
+
+ // Creates a function that, when passed an object, will traverse that object’s
+ // properties down the given `path`, specified as an array of keys or indexes.
+ function property(path) {
+ if (!isArray(path)) {
+ return shallowProperty(path);
+ }
+ return function(obj) {
+ return deepGet(obj, path);
+ };
+ }
+
+ // Generates a function for a given object that returns a given property.
+ function propertyOf(obj) {
+ if (obj == null) {
+ return function(){};
+ }
+ return function(path) {
+ return !isArray(path) ? obj[path] : deepGet(obj, path);
+ };
+ }
+
+ // Returns a predicate for checking whether an object has a given set of
+ // `key:value` pairs.
+ function matcher(attrs) {
+ attrs = extendOwn({}, attrs);
+ return function(obj) {
+ return isMatch(obj, attrs);
+ };
+ }
+
+ // Run a function **n** times.
+ function times(n, iteratee, context) {
+ var accum = Array(Math.max(0, n));
+ iteratee = optimizeCb(iteratee, context, 1);
+ for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+ return accum;
+ }
+
+ // Return a random integer between min and max (inclusive).
+ function random(min, max) {
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + Math.floor(Math.random() * (max - min + 1));
+ }
+
+ // A (possibly faster) way to get the current timestamp as an integer.
+ var now = Date.now || function() {
+ return new Date().getTime();
+ };
+
+ // List of HTML entities for escaping.
+ var escapeMap = {
+ '&': '&amp;',
+ '<': '&lt;',
+ '>': '&gt;',
+ '"': '&quot;',
+ "'": '&#x27;',
+ '`': '&#x60;'
+ };
+ var unescapeMap = invert(escapeMap);
+
+ // Functions for escaping and unescaping strings to/from HTML interpolation.
+ function createEscaper(map) {
+ var escaper = function(match) {
+ return map[match];
+ };
+ // Regexes for identifying a key that needs to be escaped.
+ var source = '(?:' + keys(map).join('|') + ')';
+ var testRegexp = RegExp(source);
+ var replaceRegexp = RegExp(source, 'g');
+ return function(string) {
+ string = string == null ? '' : '' + string;
+ return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+ };
+ }
+ var escape = createEscaper(escapeMap);
+ var unescape = createEscaper(unescapeMap);
+
+ // Traverses the children of `obj` along `path`. If a child is a function, it
+ // is invoked with its parent as context. Returns the value of the final
+ // child, or `fallback` if any child is undefined.
+ function result(obj, path, fallback) {
+ if (!isArray(path)) path = [path];
+ var length = path.length;
+ if (!length) {
+ return isFunction(fallback) ? fallback.call(obj) : fallback;
+ }
+ for (var i = 0; i < length; i++) {
+ var prop = obj == null ? void 0 : obj[path[i]];
+ if (prop === void 0) {
+ prop = fallback;
+ i = length; // Ensure we don't continue iterating.
+ }
+ obj = isFunction(prop) ? prop.call(obj) : prop;
+ }
+ return obj;
+ }
+
+ // Generate a unique integer id (unique within the entire client session).
+ // Useful for temporary DOM ids.
+ var idCounter = 0;
+ function uniqueId(prefix) {
+ var id = ++idCounter + '';
+ return prefix ? prefix + id : id;
+ }
+
+ // By default, Underscore uses ERB-style template delimiters, change the
+ // following template settings to use alternative delimiters.
+ var templateSettings = _.templateSettings = {
+ evaluate: /<%([\s\S]+?)%>/g,
+ interpolate: /<%=([\s\S]+?)%>/g,
+ escape: /<%-([\s\S]+?)%>/g
+ };
+
+ // When customizing `templateSettings`, if you don't want to define an
+ // interpolation, evaluation or escaping regex, we need one that is
+ // guaranteed not to match.
+ var noMatch = /(.)^/;
+
+ // Certain characters need to be escaped so that they can be put into a
+ // string literal.
+ var escapes = {
+ "'": "'",
+ '\\': '\\',
+ '\r': 'r',
+ '\n': 'n',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
+
+ var escapeChar = function(match) {
+ return '\\' + escapes[match];
+ };
+
+ // JavaScript micro-templating, similar to John Resig's implementation.
+ // Underscore templating handles arbitrary delimiters, preserves whitespace,
+ // and correctly escapes quotes within interpolated code.
+ // NB: `oldSettings` only exists for backwards compatibility.
+ function template(text, settings, oldSettings) {
+ if (!settings && oldSettings) settings = oldSettings;
+ settings = defaults({}, settings, _.templateSettings);
+
+ // Combine delimiters into one regular expression via alternation.
+ var matcher = RegExp([
+ (settings.escape || noMatch).source,
+ (settings.interpolate || noMatch).source,
+ (settings.evaluate || noMatch).source
+ ].join('|') + '|$', 'g');
+
+ // Compile the template source, escaping string literals appropriately.
+ var index = 0;
+ var source = "__p+='";
+ text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+ source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
+ index = offset + match.length;
+
+ if (escape) {
+ source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+ } else if (interpolate) {
+ source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+ } else if (evaluate) {
+ source += "';\n" + evaluate + "\n__p+='";
+ }
+
+ // Adobe VMs need the match returned to produce the correct offset.
+ return match;
+ });
+ source += "';\n";
+
+ // If a variable is not specified, place data values in local scope.
+ if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+ source = "var __t,__p='',__j=Array.prototype.join," +
+ "print=function(){__p+=__j.call(arguments,'');};\n" +
+ source + 'return __p;\n';
+
+ var render;
+ try {
+ render = new Function(settings.variable || 'obj', '_', source);
+ } catch (e) {
+ e.source = source;
+ throw e;
+ }
+
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled source as a convenience for precompilation.
+ var argument = settings.variable || 'obj';
+ template.source = 'function(' + argument + '){\n' + source + '}';
+
+ return template;
+ }
+
+ // Add a "chain" function. Start chaining a wrapped Underscore object.
+ function chain(obj) {
+ var instance = _(obj);
+ instance._chain = true;
+ return instance;
+ }
+
+ // OOP
+ // ---------------
+ // If Underscore is called as a function, it returns a wrapped object that
+ // can be used OO-style. This wrapper holds altered versions of all the
+ // underscore functions. Wrapped objects may be chained.
+
+ // Helper function to continue chaining intermediate results.
+ function chainResult(instance, obj) {
+ return instance._chain ? _(obj).chain() : obj;
+ }
+
+ // Add your own custom functions to the Underscore object.
+ function mixin(obj) {
+ each(functions(obj), function(name) {
+ var func = _[name] = obj[name];
+ _.prototype[name] = function() {
+ var args = [this._wrapped];
+ push.apply(args, arguments);
+ return chainResult(this, func.apply(_, args));
+ };
+ });
+ return _;
+ }
+
+ // Add all mutator Array functions to the wrapper.
+ each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ var obj = this._wrapped;
+ method.apply(obj, arguments);
+ if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
+ return chainResult(this, obj);
+ };
+ });
+
+ // Add all accessor Array functions to the wrapper.
+ each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ return chainResult(this, method.apply(this._wrapped, arguments));
+ };
+ });
+
+ // Extracts the result from a wrapped and chained object.
+ _.prototype.value = function() {
+ return this._wrapped;
+ };
+
+ // Provide unwrapping proxy for some methods used in engine operations
+ // such as arithmetic and JSON stringification.
+ _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
+
+ _.prototype.toString = function() {
+ return String(this._wrapped);
+ };
+
+ var allExports = ({
+ 'default': _,
+ VERSION: VERSION,
+ iteratee: iteratee,
+ restArguments: restArguments,
+ each: each,
+ forEach: each,
+ map: map,
+ collect: map,
+ reduce: reduce,
+ foldl: reduce,
+ inject: reduce,
+ reduceRight: reduceRight,
+ foldr: reduceRight,
+ find: find,
+ detect: find,
+ filter: filter,
+ select: filter,
+ reject: reject,
+ every: every,
+ all: every,
+ some: some,
+ any: some,
+ contains: contains,
+ includes: contains,
+ include: contains,
+ invoke: invoke,
+ pluck: pluck,
+ where: where,
+ findWhere: findWhere,
+ max: max,
+ min: min,
+ shuffle: shuffle,
+ sample: sample,
+ sortBy: sortBy,
+ groupBy: groupBy,
+ indexBy: indexBy,
+ countBy: countBy,
+ toArray: toArray,
+ size: size,
+ partition: partition,
+ first: first,
+ head: first,
+ take: first,
+ initial: initial,
+ last: last,
+ rest: rest,
+ tail: rest,
+ drop: rest,
+ compact: compact,
+ flatten: flatten,
+ without: without,
+ uniq: uniq,
+ unique: uniq,
+ union: union,
+ intersection: intersection,
+ difference: difference,
+ unzip: unzip,
+ zip: zip,
+ object: object,
+ findIndex: findIndex,
+ findLastIndex: findLastIndex,
+ sortedIndex: sortedIndex,
+ indexOf: indexOf,
+ lastIndexOf: lastIndexOf,
+ range: range,
+ chunk: chunk,
+ bind: bind,
+ partial: partial,
+ bindAll: bindAll,
+ memoize: memoize,
+ delay: delay,
+ defer: defer,
+ throttle: throttle,
+ debounce: debounce,
+ wrap: wrap,
+ negate: negate,
+ compose: compose,
+ after: after,
+ before: before,
+ once: once,
+ keys: keys,
+ allKeys: allKeys,
+ values: values,
+ mapObject: mapObject,
+ pairs: pairs,
+ invert: invert,
+ functions: functions,
+ methods: functions,
+ extend: extend,
+ extendOwn: extendOwn,
+ assign: extendOwn,
+ findKey: findKey,
+ pick: pick,
+ omit: omit,
+ defaults: defaults,
+ create: create,
+ clone: clone,
+ tap: tap,
+ isMatch: isMatch,
+ isEqual: isEqual,
+ isEmpty: isEmpty,
+ isElement: isElement,
+ isArray: isArray,
+ isObject: isObject,
+ isArguments: isArguments,
+ isFunction: isFunction,
+ isString: isString,
+ isNumber: isNumber,
+ isDate: isDate,
+ isRegExp: isRegExp,
+ isError: isError,
+ isSymbol: isSymbol,
+ isMap: isMap,
+ isWeakMap: isWeakMap,
+ isSet: isSet,
+ isWeakSet: isWeakSet,
+ isFinite: isFinite,
+ isNaN: isNaN,
+ isBoolean: isBoolean,
+ isNull: isNull,
+ isUndefined: isUndefined,
+ has: has,
+ identity: identity,
+ constant: constant,
+ noop: noop,
+ property: property,
+ propertyOf: propertyOf,
+ matcher: matcher,
+ matches: matcher,
+ times: times,
+ random: random,
+ now: now,
+ escape: escape,
+ unescape: unescape,
+ result: result,
+ uniqueId: uniqueId,
+ templateSettings: templateSettings,
+ template: template,
+ chain: chain,
+ mixin: mixin
+ });
+
+ // Add all of the Underscore functions to the wrapper object.
+ var _$1 = mixin(allExports);
+ // Legacy Node.js API
+ _$1._ = _$1;
+
+ return _$1;
+
+})));
+//# sourceMappingURL=underscore.js.map
diff --git a/node_modules/underscore/underscore.js.map b/node_modules/underscore/underscore.js.map
new file mode 100644
index 0000000..5aba7f2
--- /dev/null
+++ b/node_modules/underscore/underscore.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"underscore.js","sources":["modules/index.js","modules/index-default.js"],"sourcesContent":["// Underscore.js 1.10.2\n// https://underscorejs.org\n// (c) 2009-2020 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n// Baseline setup\n// --------------\n\n// Establish the root object, `window` (`self`) in the browser, `global`\n// on the server, or `this` in some virtual machines. We use `self`\n// instead of `window` for `WebWorker` support.\nvar root = typeof self == 'object' && self.self === self && self ||\n typeof global == 'object' && global.global === global && global ||\n Function('return this')() ||\n {};\n\n// Save bytes in the minified (but not gzipped) version:\nvar ArrayProto = Array.prototype, ObjProto = Object.prototype;\nvar SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;\n\n// Create quick reference variables for speed access to core prototypes.\nvar push = ArrayProto.push,\n slice = ArrayProto.slice,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n// All **ECMAScript 5** native function implementations that we hope to use\n// are declared here.\nvar nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeCreate = Object.create;\n\n// Create references to these builtin functions because we override them.\nvar _isNaN = root.isNaN,\n _isFinite = root.isFinite;\n\n// Naked function reference for surrogate-prototype-swapping.\nvar Ctor = function(){};\n\n// The Underscore object. All exported functions below are added to it in the\n// modules/index-all.js using the mixin function.\nexport default function _(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n}\n\n// Current version.\nexport var VERSION = _.VERSION = '1.10.2';\n\n// Internal function that returns an efficient (for current engines) version\n// of the passed-in callback, to be repeatedly applied in other Underscore\n// functions.\nfunction optimizeCb(func, context, argCount) {\n if (context === void 0) return func;\n switch (argCount == null ? 3 : argCount) {\n case 1: return function(value) {\n return func.call(context, value);\n };\n // The 2-argument case is omitted because we’re not using it.\n case 3: return function(value, index, collection) {\n return func.call(context, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(context, accumulator, value, index, collection);\n };\n }\n return function() {\n return func.apply(context, arguments);\n };\n}\n\n// An internal function to generate callbacks that can be applied to each\n// element in a collection, returning the desired result — either `identity`,\n// an arbitrary callback, a property matcher, or a property accessor.\nfunction baseIteratee(value, context, argCount) {\n if (value == null) return identity;\n if (isFunction(value)) return optimizeCb(value, context, argCount);\n if (isObject(value) && !isArray(value)) return matcher(value);\n return property(value);\n}\n\n// External wrapper for our callback generator. Users may customize\n// `_.iteratee` if they want additional predicate/iteratee shorthand styles.\n// This abstraction hides the internal-only argCount argument.\n_.iteratee = iteratee;\nexport function iteratee(value, context) {\n return baseIteratee(value, context, Infinity);\n}\n\n// The function we actually call internally. It invokes _.iteratee if\n// overridden, otherwise baseIteratee.\nfunction cb(value, context, argCount) {\n if (_.iteratee !== iteratee) return _.iteratee(value, context);\n return baseIteratee(value, context, argCount);\n}\n\n// Some functions take a variable number of arguments, or a few expected\n// arguments at the beginning and then a variable number of values to operate\n// on. This helper accumulates all remaining arguments past the function’s\n// argument length (or an explicit `startIndex`), into an array that becomes\n// the last argument. Similar to ES6’s \"rest parameter\".\nexport function restArguments(func, startIndex) {\n startIndex = startIndex == null ? func.length - 1 : +startIndex;\n return function() {\n var length = Math.max(arguments.length - startIndex, 0),\n rest = Array(length),\n index = 0;\n for (; index < length; index++) {\n rest[index] = arguments[index + startIndex];\n }\n switch (startIndex) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, arguments[0], rest);\n case 2: return func.call(this, arguments[0], arguments[1], rest);\n }\n var args = Array(startIndex + 1);\n for (index = 0; index < startIndex; index++) {\n args[index] = arguments[index];\n }\n args[startIndex] = rest;\n return func.apply(this, args);\n };\n}\n\n// An internal function for creating a new object that inherits from another.\nfunction baseCreate(prototype) {\n if (!isObject(prototype)) return {};\n if (nativeCreate) return nativeCreate(prototype);\n Ctor.prototype = prototype;\n var result = new Ctor;\n Ctor.prototype = null;\n return result;\n}\n\nfunction shallowProperty(key) {\n return function(obj) {\n return obj == null ? void 0 : obj[key];\n };\n}\n\nfunction _has(obj, path) {\n return obj != null && hasOwnProperty.call(obj, path);\n}\n\nfunction deepGet(obj, path) {\n var length = path.length;\n for (var i = 0; i < length; i++) {\n if (obj == null) return void 0;\n obj = obj[path[i]];\n }\n return length ? obj : void 0;\n}\n\n// Helper for collection methods to determine whether a collection\n// should be iterated as an array or as an object.\n// Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength\n// Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094\nvar MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;\nvar getLength = shallowProperty('length');\nfunction isArrayLike(collection) {\n var length = getLength(collection);\n return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;\n}\n\n// Collection Functions\n// --------------------\n\n// The cornerstone, an `each` implementation, aka `forEach`.\n// Handles raw objects in addition to array-likes. Treats all\n// sparse array-likes as if they were dense.\nexport function each(obj, iteratee, context) {\n iteratee = optimizeCb(iteratee, context);\n var i, length;\n if (isArrayLike(obj)) {\n for (i = 0, length = obj.length; i < length; i++) {\n iteratee(obj[i], i, obj);\n }\n } else {\n var _keys = keys(obj);\n for (i = 0, length = _keys.length; i < length; i++) {\n iteratee(obj[_keys[i]], _keys[i], obj);\n }\n }\n return obj;\n}\nexport { each as forEach };\n\n// Return the results of applying the iteratee to each element.\nexport function map(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n results = Array(length);\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n results[index] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\nexport { map as collect };\n\n// Create a reducing function iterating left or right.\nfunction createReduce(dir) {\n // Wrap code that reassigns argument variables in a separate function than\n // the one that accesses `arguments.length` to avoid a perf hit. (#1991)\n var reducer = function(obj, iteratee, memo, initial) {\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length,\n index = dir > 0 ? 0 : length - 1;\n if (!initial) {\n memo = obj[_keys ? _keys[index] : index];\n index += dir;\n }\n for (; index >= 0 && index < length; index += dir) {\n var currentKey = _keys ? _keys[index] : index;\n memo = iteratee(memo, obj[currentKey], currentKey, obj);\n }\n return memo;\n };\n\n return function(obj, iteratee, memo, context) {\n var initial = arguments.length >= 3;\n return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);\n };\n}\n\n// **Reduce** builds up a single result from a list of values, aka `inject`,\n// or `foldl`.\nexport var reduce = createReduce(1);\nexport { reduce as foldl, reduce as inject };\n\n// The right-associative version of reduce, also known as `foldr`.\nexport var reduceRight = createReduce(-1);\nexport { reduceRight as foldr };\n\n// Return the first value which passes a truth test.\nexport function find(obj, predicate, context) {\n var keyFinder = isArrayLike(obj) ? findIndex : findKey;\n var key = keyFinder(obj, predicate, context);\n if (key !== void 0 && key !== -1) return obj[key];\n}\nexport { find as detect };\n\n// Return all the elements that pass a truth test.\nexport function filter(obj, predicate, context) {\n var results = [];\n predicate = cb(predicate, context);\n each(obj, function(value, index, list) {\n if (predicate(value, index, list)) results.push(value);\n });\n return results;\n}\nexport { filter as select };\n\n// Return all the elements for which a truth test fails.\nexport function reject(obj, predicate, context) {\n return filter(obj, negate(cb(predicate)), context);\n}\n\n// Determine whether all of the elements match a truth test.\nexport function every(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (!predicate(obj[currentKey], currentKey, obj)) return false;\n }\n return true;\n}\nexport { every as all };\n\n// Determine if at least one element in the object matches a truth test.\nexport function some(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = !isArrayLike(obj) && keys(obj),\n length = (_keys || obj).length;\n for (var index = 0; index < length; index++) {\n var currentKey = _keys ? _keys[index] : index;\n if (predicate(obj[currentKey], currentKey, obj)) return true;\n }\n return false;\n}\nexport { some as any };\n\n// Determine if the array or object contains a given item (using `===`).\nexport function contains(obj, item, fromIndex, guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n if (typeof fromIndex != 'number' || guard) fromIndex = 0;\n return indexOf(obj, item, fromIndex) >= 0;\n}\nexport { contains as includes, contains as include };\n\n// Invoke a method (with arguments) on every item in a collection.\nexport var invoke = restArguments(function(obj, path, args) {\n var contextPath, func;\n if (isFunction(path)) {\n func = path;\n } else if (isArray(path)) {\n contextPath = path.slice(0, -1);\n path = path[path.length - 1];\n }\n return map(obj, function(context) {\n var method = func;\n if (!method) {\n if (contextPath && contextPath.length) {\n context = deepGet(context, contextPath);\n }\n if (context == null) return void 0;\n method = context[path];\n }\n return method == null ? method : method.apply(context, args);\n });\n});\n\n// Convenience version of a common use case of `map`: fetching a property.\nexport function pluck(obj, key) {\n return map(obj, property(key));\n}\n\n// Convenience version of a common use case of `filter`: selecting only objects\n// containing specific `key:value` pairs.\nexport function where(obj, attrs) {\n return filter(obj, matcher(attrs));\n}\n\n// Convenience version of a common use case of `find`: getting the first object\n// containing specific `key:value` pairs.\nexport function findWhere(obj, attrs) {\n return find(obj, matcher(attrs));\n}\n\n// Return the maximum element (or element-based computation).\nexport function max(obj, iteratee, context) {\n var result = -Infinity, lastComputed = -Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value > result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed > lastComputed || computed === -Infinity && result === -Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n\n// Return the minimum element (or element-based computation).\nexport function min(obj, iteratee, context) {\n var result = Infinity, lastComputed = Infinity,\n value, computed;\n if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {\n obj = isArrayLike(obj) ? obj : values(obj);\n for (var i = 0, length = obj.length; i < length; i++) {\n value = obj[i];\n if (value != null && value < result) {\n result = value;\n }\n }\n } else {\n iteratee = cb(iteratee, context);\n each(obj, function(v, index, list) {\n computed = iteratee(v, index, list);\n if (computed < lastComputed || computed === Infinity && result === Infinity) {\n result = v;\n lastComputed = computed;\n }\n });\n }\n return result;\n}\n\n// Shuffle a collection.\nexport function shuffle(obj) {\n return sample(obj, Infinity);\n}\n\n// Sample **n** random values from a collection using the modern version of the\n// [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n// If **n** is not specified, returns a single random element.\n// The internal `guard` argument allows it to work with `map`.\nexport function sample(obj, n, guard) {\n if (n == null || guard) {\n if (!isArrayLike(obj)) obj = values(obj);\n return obj[random(obj.length - 1)];\n }\n var sample = isArrayLike(obj) ? clone(obj) : values(obj);\n var length = getLength(sample);\n n = Math.max(Math.min(n, length), 0);\n var last = length - 1;\n for (var index = 0; index < n; index++) {\n var rand = random(index, last);\n var temp = sample[index];\n sample[index] = sample[rand];\n sample[rand] = temp;\n }\n return sample.slice(0, n);\n}\n\n// Sort the object's values by a criterion produced by an iteratee.\nexport function sortBy(obj, iteratee, context) {\n var index = 0;\n iteratee = cb(iteratee, context);\n return pluck(map(obj, function(value, key, list) {\n return {\n value: value,\n index: index++,\n criteria: iteratee(value, key, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n}\n\n// An internal function used for aggregate \"group by\" operations.\nfunction group(behavior, partition) {\n return function(obj, iteratee, context) {\n var result = partition ? [[], []] : {};\n iteratee = cb(iteratee, context);\n each(obj, function(value, index) {\n var key = iteratee(value, index, obj);\n behavior(result, value, key);\n });\n return result;\n };\n}\n\n// Groups the object's values by a criterion. Pass either a string attribute\n// to group by, or a function that returns the criterion.\nexport var groupBy = group(function(result, value, key) {\n if (_has(result, key)) result[key].push(value); else result[key] = [value];\n});\n\n// Indexes the object's values by a criterion, similar to `groupBy`, but for\n// when you know that your index values will be unique.\nexport var indexBy = group(function(result, value, key) {\n result[key] = value;\n});\n\n// Counts instances of an object that group by a certain criterion. Pass\n// either a string attribute to count by, or a function that returns the\n// criterion.\nexport var countBy = group(function(result, value, key) {\n if (_has(result, key)) result[key]++; else result[key] = 1;\n});\n\nvar reStrSymbol = /[^\\ud800-\\udfff]|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff]/g;\n// Safely create a real, live array from anything iterable.\nexport function toArray(obj) {\n if (!obj) return [];\n if (isArray(obj)) return slice.call(obj);\n if (isString(obj)) {\n // Keep surrogate pair characters together\n return obj.match(reStrSymbol);\n }\n if (isArrayLike(obj)) return map(obj, identity);\n return values(obj);\n}\n\n// Return the number of elements in an object.\nexport function size(obj) {\n if (obj == null) return 0;\n return isArrayLike(obj) ? obj.length : keys(obj).length;\n}\n\n// Split a collection into two arrays: one whose elements all satisfy the given\n// predicate, and one whose elements all do not satisfy the predicate.\nexport var partition = group(function(result, value, pass) {\n result[pass ? 0 : 1].push(value);\n}, true);\n\n// Array Functions\n// ---------------\n\n// Get the first element of an array. Passing **n** will return the first N\n// values in the array. The **guard** check allows it to work with `map`.\nexport function first(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[0];\n return initial(array, array.length - n);\n}\nexport { first as head, first as take };\n\n// Returns everything but the last entry of the array. Especially useful on\n// the arguments object. Passing **n** will return all the values in\n// the array, excluding the last N.\nexport function initial(array, n, guard) {\n return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));\n}\n\n// Get the last element of an array. Passing **n** will return the last N\n// values in the array.\nexport function last(array, n, guard) {\n if (array == null || array.length < 1) return n == null ? void 0 : [];\n if (n == null || guard) return array[array.length - 1];\n return rest(array, Math.max(0, array.length - n));\n}\n\n// Returns everything but the first entry of the array. Especially useful on\n// the arguments object. Passing an **n** will return the rest N values in the\n// array.\nexport function rest(array, n, guard) {\n return slice.call(array, n == null || guard ? 1 : n);\n}\nexport { rest as tail, rest as drop };\n\n// Trim out all falsy values from an array.\nexport function compact(array) {\n return filter(array, Boolean);\n}\n\n// Internal implementation of a recursive `flatten` function.\nfunction _flatten(input, shallow, strict, output) {\n output = output || [];\n var idx = output.length;\n for (var i = 0, length = getLength(input); i < length; i++) {\n var value = input[i];\n if (isArrayLike(value) && (isArray(value) || isArguments(value))) {\n // Flatten current level of array or arguments object.\n if (shallow) {\n var j = 0, len = value.length;\n while (j < len) output[idx++] = value[j++];\n } else {\n _flatten(value, shallow, strict, output);\n idx = output.length;\n }\n } else if (!strict) {\n output[idx++] = value;\n }\n }\n return output;\n}\n\n// Flatten out an array, either recursively (by default), or just one level.\nexport function flatten(array, shallow) {\n return _flatten(array, shallow, false);\n}\n\n// Return a version of the array that does not contain the specified value(s).\nexport var without = restArguments(function(array, otherArrays) {\n return difference(array, otherArrays);\n});\n\n// Produce a duplicate-free version of the array. If the array has already\n// been sorted, you have the option of using a faster algorithm.\n// The faster algorithm will not work with an iteratee if the iteratee\n// is not a one-to-one function, so providing an iteratee will disable\n// the faster algorithm.\nexport function uniq(array, isSorted, iteratee, context) {\n if (!isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n if (iteratee != null) iteratee = cb(iteratee, context);\n var result = [];\n var seen = [];\n for (var i = 0, length = getLength(array); i < length; i++) {\n var value = array[i],\n computed = iteratee ? iteratee(value, i, array) : value;\n if (isSorted && !iteratee) {\n if (!i || seen !== computed) result.push(value);\n seen = computed;\n } else if (iteratee) {\n if (!contains(seen, computed)) {\n seen.push(computed);\n result.push(value);\n }\n } else if (!contains(result, value)) {\n result.push(value);\n }\n }\n return result;\n}\nexport { uniq as unique };\n\n// Produce an array that contains the union: each distinct element from all of\n// the passed-in arrays.\nexport var union = restArguments(function(arrays) {\n return uniq(_flatten(arrays, true, true));\n});\n\n// Produce an array that contains every item shared between all the\n// passed-in arrays.\nexport function intersection(array) {\n var result = [];\n var argsLength = arguments.length;\n for (var i = 0, length = getLength(array); i < length; i++) {\n var item = array[i];\n if (contains(result, item)) continue;\n var j;\n for (j = 1; j < argsLength; j++) {\n if (!contains(arguments[j], item)) break;\n }\n if (j === argsLength) result.push(item);\n }\n return result;\n}\n\n// Take the difference between one array and a number of other arrays.\n// Only the elements present in just the first array will remain.\nexport var difference = restArguments(function(array, rest) {\n rest = _flatten(rest, true, true);\n return filter(array, function(value){\n return !contains(rest, value);\n });\n});\n\n// Complement of zip. Unzip accepts an array of arrays and groups\n// each array's elements on shared indices.\nexport function unzip(array) {\n var length = array && max(array, getLength).length || 0;\n var result = Array(length);\n\n for (var index = 0; index < length; index++) {\n result[index] = pluck(array, index);\n }\n return result;\n}\n\n// Zip together multiple lists into a single array -- elements that share\n// an index go together.\nexport var zip = restArguments(unzip);\n\n// Converts lists into objects. Pass either a single array of `[key, value]`\n// pairs, or two parallel arrays of the same length -- one of keys, and one of\n// the corresponding values. Passing by pairs is the reverse of pairs.\nexport function object(list, values) {\n var result = {};\n for (var i = 0, length = getLength(list); i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n}\n\n// Generator function to create the findIndex and findLastIndex functions.\nfunction createPredicateIndexFinder(dir) {\n return function(array, predicate, context) {\n predicate = cb(predicate, context);\n var length = getLength(array);\n var index = dir > 0 ? 0 : length - 1;\n for (; index >= 0 && index < length; index += dir) {\n if (predicate(array[index], index, array)) return index;\n }\n return -1;\n };\n}\n\n// Returns the first index on an array-like that passes a predicate test.\nexport var findIndex = createPredicateIndexFinder(1);\nexport var findLastIndex = createPredicateIndexFinder(-1);\n\n// Use a comparator function to figure out the smallest index at which\n// an object should be inserted so as to maintain order. Uses binary search.\nexport function sortedIndex(array, obj, iteratee, context) {\n iteratee = cb(iteratee, context, 1);\n var value = iteratee(obj);\n var low = 0, high = getLength(array);\n while (low < high) {\n var mid = Math.floor((low + high) / 2);\n if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;\n }\n return low;\n}\n\n// Generator function to create the indexOf and lastIndexOf functions.\nfunction createIndexFinder(dir, predicateFind, sortedIndex) {\n return function(array, item, idx) {\n var i = 0, length = getLength(array);\n if (typeof idx == 'number') {\n if (dir > 0) {\n i = idx >= 0 ? idx : Math.max(idx + length, i);\n } else {\n length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;\n }\n } else if (sortedIndex && idx && length) {\n idx = sortedIndex(array, item);\n return array[idx] === item ? idx : -1;\n }\n if (item !== item) {\n idx = predicateFind(slice.call(array, i, length), isNaN);\n return idx >= 0 ? idx + i : -1;\n }\n for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {\n if (array[idx] === item) return idx;\n }\n return -1;\n };\n}\n\n// Return the position of the first occurrence of an item in an array,\n// or -1 if the item is not included in the array.\n// If the array is large and already in sort order, pass `true`\n// for **isSorted** to use binary search.\nexport var indexOf = createIndexFinder(1, findIndex, sortedIndex);\nexport var lastIndexOf = createIndexFinder(-1, findLastIndex);\n\n// Generate an integer Array containing an arithmetic progression. A port of\n// the native Python `range()` function. See\n// [the Python documentation](https://docs.python.org/library/functions.html#range).\nexport function range(start, stop, step) {\n if (stop == null) {\n stop = start || 0;\n start = 0;\n }\n if (!step) {\n step = stop < start ? -1 : 1;\n }\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var range = Array(length);\n\n for (var idx = 0; idx < length; idx++, start += step) {\n range[idx] = start;\n }\n\n return range;\n}\n\n// Chunk a single array into multiple arrays, each containing `count` or fewer\n// items.\nexport function chunk(array, count) {\n if (count == null || count < 1) return [];\n var result = [];\n var i = 0, length = array.length;\n while (i < length) {\n result.push(slice.call(array, i, i += count));\n }\n return result;\n}\n\n// Function (ahem) Functions\n// ------------------\n\n// Determines whether to execute a function as a constructor\n// or a normal function with the provided arguments.\nfunction executeBound(sourceFunc, boundFunc, context, callingContext, args) {\n if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);\n var self = baseCreate(sourceFunc.prototype);\n var result = sourceFunc.apply(self, args);\n if (isObject(result)) return result;\n return self;\n}\n\n// Create a function bound to a given object (assigning `this`, and arguments,\n// optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n// available.\nexport var bind = restArguments(function(func, context, args) {\n if (!isFunction(func)) throw new TypeError('Bind must be called on a function');\n var bound = restArguments(function(callArgs) {\n return executeBound(func, bound, context, this, args.concat(callArgs));\n });\n return bound;\n});\n\n// Partially apply a function by creating a version that has had some of its\n// arguments pre-filled, without changing its dynamic `this` context. _ acts\n// as a placeholder by default, allowing any combination of arguments to be\n// pre-filled. Set `partial.placeholder` for a custom placeholder argument.\nexport var partial = restArguments(function(func, boundArgs) {\n var placeholder = partial.placeholder;\n var bound = function() {\n var position = 0, length = boundArgs.length;\n var args = Array(length);\n for (var i = 0; i < length; i++) {\n args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];\n }\n while (position < arguments.length) args.push(arguments[position++]);\n return executeBound(func, bound, this, this, args);\n };\n return bound;\n});\n\npartial.placeholder = _;\n\n// Bind a number of an object's methods to that object. Remaining arguments\n// are the method names to be bound. Useful for ensuring that all callbacks\n// defined on an object belong to it.\nexport var bindAll = restArguments(function(obj, _keys) {\n _keys = _flatten(_keys, false, false);\n var index = _keys.length;\n if (index < 1) throw new Error('bindAll must be passed function names');\n while (index--) {\n var key = _keys[index];\n obj[key] = bind(obj[key], obj);\n }\n});\n\n// Memoize an expensive function by storing its results.\nexport function memoize(func, hasher) {\n var memoize = function(key) {\n var cache = memoize.cache;\n var address = '' + (hasher ? hasher.apply(this, arguments) : key);\n if (!_has(cache, address)) cache[address] = func.apply(this, arguments);\n return cache[address];\n };\n memoize.cache = {};\n return memoize;\n}\n\n// Delays a function for the given number of milliseconds, and then calls\n// it with the arguments supplied.\nexport var delay = restArguments(function(func, wait, args) {\n return setTimeout(function() {\n return func.apply(null, args);\n }, wait);\n});\n\n// Defers a function, scheduling it to run after the current call stack has\n// cleared.\nexport var defer = partial(delay, _, 1);\n\n// Returns a function, that, when invoked, will only be triggered at most once\n// during a given window of time. Normally, the throttled function will run\n// as much as it can, without ever going more than once per `wait` duration;\n// but if you'd like to disable the execution on the leading edge, pass\n// `{leading: false}`. To disable execution on the trailing edge, ditto.\nexport function throttle(func, wait, options) {\n var timeout, context, args, result;\n var previous = 0;\n if (!options) options = {};\n\n var later = function() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function() {\n var _now = now();\n if (!previous && options.leading === false) previous = _now;\n var remaining = wait - (_now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = _now;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function() {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\nexport function debounce(func, wait, immediate) {\n var timeout, result;\n\n var later = function(context, args) {\n timeout = null;\n if (args) result = func.apply(context, args);\n };\n\n var debounced = restArguments(function(args) {\n if (timeout) clearTimeout(timeout);\n if (immediate) {\n var callNow = !timeout;\n timeout = setTimeout(later, wait);\n if (callNow) result = func.apply(this, args);\n } else {\n timeout = delay(later, wait, this, args);\n }\n\n return result;\n });\n\n debounced.cancel = function() {\n clearTimeout(timeout);\n timeout = null;\n };\n\n return debounced;\n}\n\n// Returns the first function passed as an argument to the second,\n// allowing you to adjust arguments, run code before and after, and\n// conditionally execute the original function.\nexport function wrap(func, wrapper) {\n return partial(wrapper, func);\n}\n\n// Returns a negated version of the passed-in predicate.\nexport function negate(predicate) {\n return function() {\n return !predicate.apply(this, arguments);\n };\n}\n\n// Returns a function that is the composition of a list of functions, each\n// consuming the return value of the function that follows.\nexport function compose() {\n var args = arguments;\n var start = args.length - 1;\n return function() {\n var i = start;\n var result = args[start].apply(this, arguments);\n while (i--) result = args[i].call(this, result);\n return result;\n };\n}\n\n// Returns a function that will only be executed on and after the Nth call.\nexport function after(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n}\n\n// Returns a function that will only be executed up to (but not including) the Nth call.\nexport function before(times, func) {\n var memo;\n return function() {\n if (--times > 0) {\n memo = func.apply(this, arguments);\n }\n if (times <= 1) func = null;\n return memo;\n };\n}\n\n// Returns a function that will be executed at most one time, no matter how\n// often you call it. Useful for lazy initialization.\nexport var once = partial(before, 2);\n\n// Object Functions\n// ----------------\n\n// Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.\nvar hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',\n 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n\nfunction collectNonEnumProps(obj, _keys) {\n var nonEnumIdx = nonEnumerableProps.length;\n var constructor = obj.constructor;\n var proto = isFunction(constructor) && constructor.prototype || ObjProto;\n\n // Constructor is a special case.\n var prop = 'constructor';\n if (_has(obj, prop) && !contains(_keys, prop)) _keys.push(prop);\n\n while (nonEnumIdx--) {\n prop = nonEnumerableProps[nonEnumIdx];\n if (prop in obj && obj[prop] !== proto[prop] && !contains(_keys, prop)) {\n _keys.push(prop);\n }\n }\n}\n\n// Retrieve the names of an object's own properties.\n// Delegates to **ECMAScript 5**'s native `Object.keys`.\nexport function keys(obj) {\n if (!isObject(obj)) return [];\n if (nativeKeys) return nativeKeys(obj);\n var _keys = [];\n for (var key in obj) if (_has(obj, key)) _keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, _keys);\n return _keys;\n}\n\n// Retrieve all the property names of an object.\nexport function allKeys(obj) {\n if (!isObject(obj)) return [];\n var _keys = [];\n for (var key in obj) _keys.push(key);\n // Ahem, IE < 9.\n if (hasEnumBug) collectNonEnumProps(obj, _keys);\n return _keys;\n}\n\n// Retrieve the values of an object's properties.\nexport function values(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var values = Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[_keys[i]];\n }\n return values;\n}\n\n// Returns the results of applying the iteratee to each element of the object.\n// In contrast to map it returns an object.\nexport function mapObject(obj, iteratee, context) {\n iteratee = cb(iteratee, context);\n var _keys = keys(obj),\n length = _keys.length,\n results = {};\n for (var index = 0; index < length; index++) {\n var currentKey = _keys[index];\n results[currentKey] = iteratee(obj[currentKey], currentKey, obj);\n }\n return results;\n}\n\n// Convert an object into a list of `[key, value]` pairs.\n// The opposite of object.\nexport function pairs(obj) {\n var _keys = keys(obj);\n var length = _keys.length;\n var pairs = Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [_keys[i], obj[_keys[i]]];\n }\n return pairs;\n}\n\n// Invert the keys and values of an object. The values must be serializable.\nexport function invert(obj) {\n var result = {};\n var _keys = keys(obj);\n for (var i = 0, length = _keys.length; i < length; i++) {\n result[obj[_keys[i]]] = _keys[i];\n }\n return result;\n}\n\n// Return a sorted list of the function names available on the object.\nexport function functions(obj) {\n var names = [];\n for (var key in obj) {\n if (isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n}\nexport { functions as methods };\n\n// An internal function for creating assigner functions.\nfunction createAssigner(keysFunc, defaults) {\n return function(obj) {\n var length = arguments.length;\n if (defaults) obj = Object(obj);\n if (length < 2 || obj == null) return obj;\n for (var index = 1; index < length; index++) {\n var source = arguments[index],\n _keys = keysFunc(source),\n l = _keys.length;\n for (var i = 0; i < l; i++) {\n var key = _keys[i];\n if (!defaults || obj[key] === void 0) obj[key] = source[key];\n }\n }\n return obj;\n };\n}\n\n// Extend a given object with all the properties in passed-in object(s).\nexport var extend = createAssigner(allKeys);\n\n// Assigns a given object with all the own properties in the passed-in object(s).\n// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)\nexport var extendOwn = createAssigner(keys);\nexport { extendOwn as assign };\n\n// Returns the first key on an object that passes a predicate test.\nexport function findKey(obj, predicate, context) {\n predicate = cb(predicate, context);\n var _keys = keys(obj), key;\n for (var i = 0, length = _keys.length; i < length; i++) {\n key = _keys[i];\n if (predicate(obj[key], key, obj)) return key;\n }\n}\n\n// Internal pick helper function to determine if `obj` has key `key`.\nfunction keyInObj(value, key, obj) {\n return key in obj;\n}\n\n// Return a copy of the object only containing the whitelisted properties.\nexport var pick = restArguments(function(obj, _keys) {\n var result = {}, iteratee = _keys[0];\n if (obj == null) return result;\n if (isFunction(iteratee)) {\n if (_keys.length > 1) iteratee = optimizeCb(iteratee, _keys[1]);\n _keys = allKeys(obj);\n } else {\n iteratee = keyInObj;\n _keys = _flatten(_keys, false, false);\n obj = Object(obj);\n }\n for (var i = 0, length = _keys.length; i < length; i++) {\n var key = _keys[i];\n var value = obj[key];\n if (iteratee(value, key, obj)) result[key] = value;\n }\n return result;\n});\n\n// Return a copy of the object without the blacklisted properties.\nexport var omit = restArguments(function(obj, _keys) {\n var iteratee = _keys[0], context;\n if (isFunction(iteratee)) {\n iteratee = negate(iteratee);\n if (_keys.length > 1) context = _keys[1];\n } else {\n _keys = map(_flatten(_keys, false, false), String);\n iteratee = function(value, key) {\n return !contains(_keys, key);\n };\n }\n return pick(obj, iteratee, context);\n});\n\n// Fill in a given object with default properties.\nexport var defaults = createAssigner(allKeys, true);\n\n// Creates an object that inherits from the given prototype object.\n// If additional properties are provided then they will be added to the\n// created object.\nexport function create(prototype, props) {\n var result = baseCreate(prototype);\n if (props) extendOwn(result, props);\n return result;\n}\n\n// Create a (shallow-cloned) duplicate of an object.\nexport function clone(obj) {\n if (!isObject(obj)) return obj;\n return isArray(obj) ? obj.slice() : extend({}, obj);\n}\n\n// Invokes interceptor with the obj, and then returns obj.\n// The primary purpose of this method is to \"tap into\" a method chain, in\n// order to perform operations on intermediate results within the chain.\nexport function tap(obj, interceptor) {\n interceptor(obj);\n return obj;\n}\n\n// Returns whether an object has a given set of `key:value` pairs.\nexport function isMatch(object, attrs) {\n var _keys = keys(attrs), length = _keys.length;\n if (object == null) return !length;\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = _keys[i];\n if (attrs[key] !== obj[key] || !(key in obj)) return false;\n }\n return true;\n}\n\n\n// Internal recursive comparison function for `isEqual`.\nfunction eq(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a === 1 / b;\n // `null` or `undefined` only equal to itself (strict comparison).\n if (a == null || b == null) return false;\n // `NaN`s are equivalent, but non-reflexive.\n if (a !== a) return b !== b;\n // Exhaust primitive checks\n var type = typeof a;\n if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;\n return deepEq(a, b, aStack, bStack);\n}\n\n// Internal recursive comparison function for `isEqual`.\nfunction deepEq(a, b, aStack, bStack) {\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className !== toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, regular expressions, dates, and booleans are compared by value.\n case '[object RegExp]':\n // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return '' + a === '' + b;\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive.\n // Object(NaN) is equivalent to NaN.\n if (+a !== +a) return +b !== +b;\n // An `egal` comparison is performed for other numeric values.\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a === +b;\n case '[object Symbol]':\n return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);\n }\n\n var areArrays = className === '[object Array]';\n if (!areArrays) {\n if (typeof a != 'object' || typeof b != 'object') return false;\n\n // Objects with different constructors are not equivalent, but `Object`s or `Array`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor &&\n isFunction(bCtor) && bCtor instanceof bCtor)\n && ('constructor' in a && 'constructor' in b)) {\n return false;\n }\n }\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n\n // Initializing stack of traversed objects.\n // It's done here since we only need them for objects and arrays comparison.\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] === a) return bStack[length] === b;\n }\n\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n\n // Recursively compare objects and arrays.\n if (areArrays) {\n // Compare array lengths to determine if a deep comparison is necessary.\n length = a.length;\n if (length !== b.length) return false;\n // Deep compare the contents, ignoring non-numeric properties.\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) return false;\n }\n } else {\n // Deep compare objects.\n var _keys = keys(a), key;\n length = _keys.length;\n // Ensure that both objects contain the same number of properties before comparing deep equality.\n if (keys(b).length !== length) return false;\n while (length--) {\n // Deep compare each member\n key = _keys[length];\n if (!(_has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return true;\n}\n\n// Perform a deep comparison to check if two objects are equal.\nexport function isEqual(a, b) {\n return eq(a, b);\n}\n\n// Is a given array, string, or object empty?\n// An \"empty\" object has no enumerable own-properties.\nexport function isEmpty(obj) {\n if (obj == null) return true;\n if (isArrayLike(obj) && (isArray(obj) || isString(obj) || isArguments(obj))) return obj.length === 0;\n return keys(obj).length === 0;\n}\n\n// Is a given value a DOM element?\nexport function isElement(obj) {\n return !!(obj && obj.nodeType === 1);\n}\n\n// Internal function for creating a toString-based type tester.\nfunction tagTester(name) {\n return function(obj) {\n return toString.call(obj) === '[object ' + name + ']';\n };\n}\n\n// Is a given value an array?\n// Delegates to ECMA5's native Array.isArray\nexport var isArray = nativeIsArray || tagTester('Array');\n\n// Is a given variable an object?\nexport function isObject(obj) {\n var type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n}\n\n// Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.\nexport var isArguments = tagTester('Arguments');\nexport var isFunction = tagTester('Function');\nexport var isString = tagTester('String');\nexport var isNumber = tagTester('Number');\nexport var isDate = tagTester('Date');\nexport var isRegExp = tagTester('RegExp');\nexport var isError = tagTester('Error');\nexport var isSymbol = tagTester('Symbol');\nexport var isMap = tagTester('Map');\nexport var isWeakMap = tagTester('WeakMap');\nexport var isSet = tagTester('Set');\nexport var isWeakSet = tagTester('WeakSet');\n\n// Define a fallback version of the method in browsers (ahem, IE < 9), where\n// there isn't any inspectable \"Arguments\" type.\n(function() {\n if (!isArguments(arguments)) {\n isArguments = function(obj) {\n return _has(obj, 'callee');\n };\n }\n}());\n\n// Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,\n// IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).\nvar nodelist = root.document && root.document.childNodes;\nif (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {\n isFunction = function(obj) {\n return typeof obj == 'function' || false;\n };\n}\n\n// Is a given object a finite number?\nexport function isFinite(obj) {\n return !isSymbol(obj) && _isFinite(obj) && !_isNaN(parseFloat(obj));\n}\n\n// Is the given value `NaN`?\nexport function isNaN(obj) {\n return isNumber(obj) && _isNaN(obj);\n}\n\n// Is a given value a boolean?\nexport function isBoolean(obj) {\n return obj === true || obj === false || toString.call(obj) === '[object Boolean]';\n}\n\n// Is a given value equal to null?\nexport function isNull(obj) {\n return obj === null;\n}\n\n// Is a given variable undefined?\nexport function isUndefined(obj) {\n return obj === void 0;\n}\n\n// Shortcut function for checking if an object has a given property directly\n// on itself (in other words, not on a prototype).\nexport function has(obj, path) {\n if (!isArray(path)) {\n return _has(obj, path);\n }\n var length = path.length;\n for (var i = 0; i < length; i++) {\n var key = path[i];\n if (obj == null || !hasOwnProperty.call(obj, key)) {\n return false;\n }\n obj = obj[key];\n }\n return !!length;\n}\n\n// Utility Functions\n// -----------------\n\n// Keep the identity function around for default iteratees.\nexport function identity(value) {\n return value;\n}\n\n// Predicate-generating functions. Often useful outside of Underscore.\nexport function constant(value) {\n return function() {\n return value;\n };\n}\n\nexport function noop(){}\n\n// Creates a function that, when passed an object, will traverse that object’s\n// properties down the given `path`, specified as an array of keys or indexes.\nexport function property(path) {\n if (!isArray(path)) {\n return shallowProperty(path);\n }\n return function(obj) {\n return deepGet(obj, path);\n };\n}\n\n// Generates a function for a given object that returns a given property.\nexport function propertyOf(obj) {\n if (obj == null) {\n return function(){};\n }\n return function(path) {\n return !isArray(path) ? obj[path] : deepGet(obj, path);\n };\n}\n\n// Returns a predicate for checking whether an object has a given set of\n// `key:value` pairs.\nexport function matcher(attrs) {\n attrs = extendOwn({}, attrs);\n return function(obj) {\n return isMatch(obj, attrs);\n };\n}\nexport { matcher as matches };\n\n// Run a function **n** times.\nexport function times(n, iteratee, context) {\n var accum = Array(Math.max(0, n));\n iteratee = optimizeCb(iteratee, context, 1);\n for (var i = 0; i < n; i++) accum[i] = iteratee(i);\n return accum;\n}\n\n// Return a random integer between min and max (inclusive).\nexport function random(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n\n// A (possibly faster) way to get the current timestamp as an integer.\nexport var now = Date.now || function() {\n return new Date().getTime();\n};\n\n// List of HTML entities for escaping.\nvar escapeMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;'\n};\nvar unescapeMap = invert(escapeMap);\n\n// Functions for escaping and unescaping strings to/from HTML interpolation.\nfunction createEscaper(map) {\n var escaper = function(match) {\n return map[match];\n };\n // Regexes for identifying a key that needs to be escaped.\n var source = '(?:' + keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function(string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n}\nexport var escape = createEscaper(escapeMap);\nexport var unescape = createEscaper(unescapeMap);\n\n// Traverses the children of `obj` along `path`. If a child is a function, it\n// is invoked with its parent as context. Returns the value of the final\n// child, or `fallback` if any child is undefined.\nexport function result(obj, path, fallback) {\n if (!isArray(path)) path = [path];\n var length = path.length;\n if (!length) {\n return isFunction(fallback) ? fallback.call(obj) : fallback;\n }\n for (var i = 0; i < length; i++) {\n var prop = obj == null ? void 0 : obj[path[i]];\n if (prop === void 0) {\n prop = fallback;\n i = length; // Ensure we don't continue iterating.\n }\n obj = isFunction(prop) ? prop.call(obj) : prop;\n }\n return obj;\n}\n\n// Generate a unique integer id (unique within the entire client session).\n// Useful for temporary DOM ids.\nvar idCounter = 0;\nexport function uniqueId(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n}\n\n// By default, Underscore uses ERB-style template delimiters, change the\n// following template settings to use alternative delimiters.\nexport var templateSettings = _.templateSettings = {\n evaluate: /<%([\\s\\S]+?)%>/g,\n interpolate: /<%=([\\s\\S]+?)%>/g,\n escape: /<%-([\\s\\S]+?)%>/g\n};\n\n// When customizing `templateSettings`, if you don't want to define an\n// interpolation, evaluation or escaping regex, we need one that is\n// guaranteed not to match.\nvar noMatch = /(.)^/;\n\n// Certain characters need to be escaped so that they can be put into a\n// string literal.\nvar escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n};\n\nvar escapeRegExp = /\\\\|'|\\r|\\n|\\u2028|\\u2029/g;\n\nvar escapeChar = function(match) {\n return '\\\\' + escapes[match];\n};\n\n// JavaScript micro-templating, similar to John Resig's implementation.\n// Underscore templating handles arbitrary delimiters, preserves whitespace,\n// and correctly escapes quotes within interpolated code.\n// NB: `oldSettings` only exists for backwards compatibility.\nexport function template(text, settings, oldSettings) {\n if (!settings && oldSettings) settings = oldSettings;\n settings = defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset).replace(escapeRegExp, escapeChar);\n index = offset + match.length;\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n } else if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n } else if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n\n // Adobe VMs need the match returned to produce the correct offset.\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + 'return __p;\\n';\n\n var render;\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled source as a convenience for precompilation.\n var argument = settings.variable || 'obj';\n template.source = 'function(' + argument + '){\\n' + source + '}';\n\n return template;\n}\n\n// Add a \"chain\" function. Start chaining a wrapped Underscore object.\nexport function chain(obj) {\n var instance = _(obj);\n instance._chain = true;\n return instance;\n}\n\n// OOP\n// ---------------\n// If Underscore is called as a function, it returns a wrapped object that\n// can be used OO-style. This wrapper holds altered versions of all the\n// underscore functions. Wrapped objects may be chained.\n\n// Helper function to continue chaining intermediate results.\nfunction chainResult(instance, obj) {\n return instance._chain ? _(obj).chain() : obj;\n}\n\n// Add your own custom functions to the Underscore object.\nexport function mixin(obj) {\n each(functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return chainResult(this, func.apply(_, args));\n };\n });\n return _;\n}\n\n// Add all mutator Array functions to the wrapper.\neach(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];\n return chainResult(this, obj);\n };\n});\n\n// Add all accessor Array functions to the wrapper.\neach(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return chainResult(this, method.apply(this._wrapped, arguments));\n };\n});\n\n// Extracts the result from a wrapped and chained object.\n_.prototype.value = function() {\n return this._wrapped;\n};\n\n// Provide unwrapping proxy for some methods used in engine operations\n// such as arithmetic and JSON stringification.\n_.prototype.valueOf = _.prototype.toJSON = _.prototype.value;\n\n_.prototype.toString = function() {\n return String(this._wrapped);\n};\n","import * as allExports from './index.js';\nimport { mixin } from './index.js';\n\n// Add all of the Underscore functions to the wrapper object.\nvar _ = mixin(allExports);\n// Legacy Node.js API\n_._ = _;\n// Export the Underscore API.\nexport default _;\n"],"names":["_"],"mappings":"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"} \ No newline at end of file