{"version":3,"file":"js/4447-b5a50ff33aba10cc631e.js","mappings":"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","sources":["webpack://bravely/./node_modules/extend/index.js","webpack://bravely/./node_modules/inline-style-parser/index.js","webpack://bravely/./node_modules/lodash.clone/index.js","webpack://bravely/./node_modules/lodash.debounce/index.js","webpack://bravely/./node_modules/lodash.orderby/index.js","webpack://bravely/./node_modules/lodash/lodash.js","webpack://bravely/./node_modules/html-parse-stringify/dist/html-parse-stringify.module.js","webpack://bravely/./node_modules/react-i18next/dist/es/Trans.js","webpack://bravely/./node_modules/react-select/creatable/dist/react-select.browser.esm.js","webpack://bravely/./node_modules/react-select/dist/react-select.browser.esm.js","webpack://bravely/./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://bravely/./node_modules/react/jsx-runtime.js","webpack://bravely/./node_modules/style-to-object/cjs/index.js","webpack://bravely/./node_modules/void-elements/index.js","webpack://bravely/./node_modules/estree-util-is-identifier-name/lib/index.js","webpack://bravely/./node_modules/hast-util-whitespace/lib/index.js","webpack://bravely/./node_modules/property-information/lib/util/schema.js","webpack://bravely/./node_modules/property-information/lib/util/merge.js","webpack://bravely/./node_modules/property-information/lib/normalize.js","webpack://bravely/./node_modules/property-information/lib/util/info.js","webpack://bravely/./node_modules/property-information/lib/util/types.js","webpack://bravely/./node_modules/property-information/lib/util/defined-info.js","webpack://bravely/./node_modules/property-information/lib/util/create.js","webpack://bravely/./node_modules/property-information/lib/xlink.js","webpack://bravely/./node_modules/property-information/lib/xml.js","webpack://bravely/./node_modules/property-information/lib/util/case-sensitive-transform.js","webpack://bravely/./node_modules/property-information/lib/util/case-insensitive-transform.js","webpack://bravely/./node_modules/property-information/lib/xmlns.js","webpack://bravely/./node_modules/property-information/lib/aria.js","webpack://bravely/./node_modules/property-information/lib/html.js","webpack://bravely/./node_modules/property-information/lib/svg.js","webpack://bravely/./node_modules/property-information/index.js","webpack://bravely/./node_modules/property-information/lib/find.js","webpack://bravely/./node_modules/property-information/lib/hast-to-react.js","webpack://bravely/./node_modules/style-to-object/esm/index.mjs","webpack://bravely/./node_modules/unist-util-position/lib/index.js","webpack://bravely/./node_modules/unist-util-stringify-position/lib/index.js","webpack://bravely/./node_modules/vfile-message/lib/index.js","webpack://bravely/./node_modules/hast-util-to-jsx-runtime/lib/index.js","webpack://bravely/./node_modules/comma-separated-tokens/index.js","webpack://bravely/./node_modules/space-separated-tokens/index.js","webpack://bravely/./node_modules/html-url-attributes/lib/index.js","webpack://bravely/./node_modules/mdast-util-to-string/lib/index.js","webpack://bravely/./node_modules/micromark-util-chunked/index.js","webpack://bravely/./node_modules/micromark-util-subtokenize/lib/splice-buffer.js","webpack://bravely/./node_modules/micromark-util-subtokenize/index.js","webpack://bravely/./node_modules/micromark-util-combine-extensions/index.js","webpack://bravely/./node_modules/micromark-util-character/index.js","webpack://bravely/./node_modules/micromark-factory-space/index.js","webpack://bravely/./node_modules/micromark/lib/initialize/content.js","webpack://bravely/./node_modules/micromark/lib/initialize/document.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/blank-line.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/content.js","webpack://bravely/./node_modules/micromark/lib/initialize/flow.js","webpack://bravely/./node_modules/micromark/lib/initialize/text.js","webpack://bravely/./node_modules/micromark-util-resolve-all/index.js","webpack://bravely/./node_modules/micromark/lib/create-tokenizer.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/thematic-break.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/list.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/block-quote.js","webpack://bravely/./node_modules/micromark-factory-destination/index.js","webpack://bravely/./node_modules/micromark-factory-label/index.js","webpack://bravely/./node_modules/micromark-factory-title/index.js","webpack://bravely/./node_modules/micromark-factory-whitespace/index.js","webpack://bravely/./node_modules/micromark-util-normalize-identifier/index.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/definition.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/code-indented.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/heading-atx.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/setext-underline.js","webpack://bravely/./node_modules/micromark-util-html-tag-name/index.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/html-flow.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/code-fenced.js","webpack://bravely/./node_modules/decode-named-character-reference/index.dom.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/character-reference.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/character-escape.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/line-ending.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/label-end.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/label-start-image.js","webpack://bravely/./node_modules/micromark-util-classify-character/index.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/attention.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/autolink.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/html-text.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/label-start-link.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/hard-break-escape.js","webpack://bravely/./node_modules/micromark-core-commonmark/lib/code-text.js","webpack://bravely/./node_modules/micromark/lib/constructs.js","webpack://bravely/./node_modules/micromark/lib/parse.js","webpack://bravely/./node_modules/micromark/lib/preprocess.js","webpack://bravely/./node_modules/micromark-util-decode-numeric-character-reference/index.js","webpack://bravely/./node_modules/micromark-util-decode-string/index.js","webpack://bravely/./node_modules/mdast-util-from-markdown/lib/index.js","webpack://bravely/./node_modules/micromark/lib/postprocess.js","webpack://bravely/./node_modules/remark-parse/lib/index.js","webpack://bravely/./node_modules/@ungap/structured-clone/esm/types.js","webpack://bravely/./node_modules/@ungap/structured-clone/esm/deserialize.js","webpack://bravely/./node_modules/@ungap/structured-clone/esm/serialize.js","webpack://bravely/./node_modules/@ungap/structured-clone/esm/index.js","webpack://bravely/./node_modules/micromark-util-sanitize-uri/index.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/footer.js","webpack://bravely/./node_modules/unist-util-is/lib/index.js","webpack://bravely/./node_modules/unist-util-visit-parents/lib/index.js","webpack://bravely/./node_modules/unist-util-visit/lib/index.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/revert.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/list-item.js","webpack://bravely/./node_modules/trim-lines/index.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/index.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/break.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/code.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/delete.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/heading.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/html.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/image.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/link.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/list.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/root.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/strong.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/table.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/table-row.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/text.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/state.js","webpack://bravely/./node_modules/mdast-util-to-hast/lib/index.js","webpack://bravely/./node_modules/remark-rehype/lib/index.js","webpack://bravely/./node_modules/bail/index.js","webpack://bravely/./node_modules/unified/node_modules/is-plain-obj/index.js","webpack://bravely/./node_modules/trough/index.js","webpack://bravely/./node_modules/vfile/lib/minpath.browser.js","webpack://bravely/./node_modules/vfile/lib/minproc.browser.js","webpack://bravely/./node_modules/vfile/lib/minurl.shared.js","webpack://bravely/./node_modules/vfile/lib/minurl.browser.js","webpack://bravely/./node_modules/vfile/lib/index.js","webpack://bravely/./node_modules/unified/lib/callable-instance.js","webpack://bravely/./node_modules/unified/lib/index.js","webpack://bravely/./node_modules/react-markdown/lib/index.js"],"sourcesContent":["'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n if (typeof style !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n if (!style) return [];\n\n options = options || {};\n\n /**\n * Positional.\n */\n var lineno = 1;\n var column = 1;\n\n /**\n * Update lineno and column based on `str`.\n *\n * @param {String} str\n */\n function updatePosition(str) {\n var lines = str.match(NEWLINE_REGEX);\n if (lines) lineno += lines.length;\n var i = str.lastIndexOf(NEWLINE);\n column = ~i ? str.length - i : column + str.length;\n }\n\n /**\n * Mark position and patch `node.position`.\n *\n * @return {Function}\n */\n function position() {\n var start = { line: lineno, column: column };\n return function (node) {\n node.position = new Position(start);\n whitespace();\n return node;\n };\n }\n\n /**\n * Store position information for a node.\n *\n * @constructor\n * @property {Object} start\n * @property {Object} end\n * @property {undefined|String} source\n */\n function Position(start) {\n this.start = start;\n this.end = { line: lineno, column: column };\n this.source = options.source;\n }\n\n /**\n * Non-enumerable source string.\n */\n Position.prototype.content = style;\n\n var errorsList = [];\n\n /**\n * Error `msg`.\n *\n * @param {String} msg\n * @throws {Error}\n */\n function error(msg) {\n var err = new Error(\n options.source + ':' + lineno + ':' + column + ': ' + msg\n );\n err.reason = msg;\n err.filename = options.source;\n err.line = lineno;\n err.column = column;\n err.source = style;\n\n if (options.silent) {\n errorsList.push(err);\n } else {\n throw err;\n }\n }\n\n /**\n * Match `re` and return captures.\n *\n * @param {RegExp} re\n * @return {undefined|Array}\n */\n function match(re) {\n var m = re.exec(style);\n if (!m) return;\n var str = m[0];\n updatePosition(str);\n style = style.slice(str.length);\n return m;\n }\n\n /**\n * Parse whitespace.\n */\n function whitespace() {\n match(WHITESPACE_REGEX);\n }\n\n /**\n * Parse comments.\n *\n * @param {Object[]} [rules]\n * @return {Object[]}\n */\n function comments(rules) {\n var c;\n rules = rules || [];\n while ((c = comment())) {\n if (c !== false) {\n rules.push(c);\n }\n }\n return rules;\n }\n\n /**\n * Parse comment.\n *\n * @return {Object}\n * @throws {Error}\n */\n function comment() {\n var pos = position();\n if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n var i = 2;\n while (\n EMPTY_STRING != style.charAt(i) &&\n (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n ) {\n ++i;\n }\n i += 2;\n\n if (EMPTY_STRING === style.charAt(i - 1)) {\n return error('End of comment missing');\n }\n\n var str = style.slice(2, i - 2);\n column += 2;\n updatePosition(str);\n style = style.slice(i);\n column += 2;\n\n return pos({\n type: TYPE_COMMENT,\n comment: str\n });\n }\n\n /**\n * Parse declaration.\n *\n * @return {Object}\n * @throws {Error}\n */\n function declaration() {\n var pos = position();\n\n // prop\n var prop = match(PROPERTY_REGEX);\n if (!prop) return;\n comment();\n\n // :\n if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n // val\n var val = match(VALUE_REGEX);\n\n var ret = pos({\n type: TYPE_DECLARATION,\n property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n value: val\n ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n : EMPTY_STRING\n });\n\n // ;\n match(SEMICOLON_REGEX);\n\n return ret;\n }\n\n /**\n * Parse declarations.\n *\n * @return {Object[]}\n */\n function declarations() {\n var decls = [];\n\n comments(decls);\n\n // declarations\n var decl;\n while ((decl = declaration())) {\n if (decl !== false) {\n decls.push(decl);\n comments(decls);\n }\n }\n\n return decls;\n }\n\n whitespace();\n return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\n/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Creates an array of the own enumerable symbol properties of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n return baseClone(value, false, true);\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = clone;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n}\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\nfunction orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = orderBy;\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code);\n buffer = '';\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after ` | \n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase();\n if (htmlRawNames.includes(name)) {\n effects.consume(code);\n return continuationClose;\n }\n return continuation(code);\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code);\n // @ts-expect-error: not null.\n buffer += String.fromCharCode(code);\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code);\n return continuationClose;\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationAfter(code);\n }\n effects.consume(code);\n return continuationClose;\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit(\"htmlFlow\");\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start;\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > |
\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n tokenize: tokenizeNonLazyContinuation,\n partial: true\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n const closeStart = {\n tokenize: tokenizeCloseStart,\n partial: true\n };\n let initialPrefix = 0;\n let sizeOpen = 0;\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code);\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1];\n initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n marker = code;\n effects.enter(\"codeFenced\");\n effects.enter(\"codeFencedFence\");\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++;\n effects.consume(code);\n return sequenceOpen;\n }\n if (sizeOpen < 3) {\n return nok(code);\n }\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFencedFenceInfo\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return info(code);\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return infoBefore(code);\n }\n if (markdownSpace(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return factorySpace(effects, metaBefore, \"whitespace\")(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return info;\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code);\n }\n effects.enter(\"codeFencedFenceMeta\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return meta(code);\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceMeta\");\n return infoBefore(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return meta;\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code);\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return contentStart;\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return contentChunk(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return beforeContentChunk(code);\n }\n effects.consume(code);\n return contentChunk;\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit(\"codeFenced\");\n return ok(code);\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0;\n return startBefore;\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return start;\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter(\"codeFencedFence\");\n return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceClose(code);\n }\n return nok(code);\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++;\n effects.consume(code);\n return sequenceClose;\n }\n if (size >= sizeOpen) {\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n }\n return nok(code);\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return ok(code);\n }\n return nok(code);\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === null) {\n return nok(code);\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineStart;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}","/// \n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const char = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n return char === characterReference ? false : char\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this;\n let size = 0;\n /** @type {number} */\n let max;\n /** @type {(code: Code) => boolean} */\n let test;\n return start;\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterReference\");\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n return open;\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 35) {\n effects.enter(\"characterReferenceMarkerNumeric\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerNumeric\");\n return numeric;\n }\n effects.enter(\"characterReferenceValue\");\n max = 31;\n test = asciiAlphanumeric;\n return value(code);\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter(\"characterReferenceMarkerHexadecimal\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerHexadecimal\");\n effects.enter(\"characterReferenceValue\");\n max = 6;\n test = asciiHexDigit;\n return value;\n }\n effects.enter(\"characterReferenceValue\");\n max = 7;\n test = asciiDigit;\n return value(code);\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit(\"characterReferenceValue\");\n if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n return nok(code);\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n effects.exit(\"characterReference\");\n return ok;\n }\n if (test(code) && size++ < max) {\n effects.consume(code);\n return value;\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterEscape\");\n effects.enter(\"escapeMarker\");\n effects.consume(code);\n effects.exit(\"escapeMarker\");\n return inside;\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter(\"characterEscapeValue\");\n effects.consume(code);\n effects.exit(\"characterEscapeValue\");\n effects.exit(\"characterEscape\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n\n /** @type {State} */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, ok, \"linePrefix\");\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n while (++index < events.length) {\n const token = events[index][1];\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n events.splice(index + 1, token.type === \"labelImage\" ? 4 : 2);\n token.type = \"data\";\n index++;\n }\n }\n return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {Token} */\n let token;\n /** @type {number | undefined} */\n let open;\n /** @type {number | undefined} */\n let close;\n /** @type {Array} */\n let media;\n\n // Find an opening.\n while (index--) {\n token = events[index][1];\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n open = index;\n if (token.type !== \"labelLink\") {\n offset = 2;\n break;\n }\n }\n } else if (token.type === \"labelEnd\") {\n close = index;\n }\n }\n const group = {\n type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n const label = {\n type: \"label\",\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[close][1].end)\n };\n const text = {\n type: \"labelText\",\n start: Object.assign({}, events[open + offset + 2][1].end),\n end: Object.assign({}, events[close - 2][1].start)\n };\n media = [['enter', group, context], ['enter', label, context]];\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3));\n\n // Text open.\n media = push(media, [['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1));\n\n // Media close.\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n /** @type {Token} */\n let labelStart;\n /** @type {boolean} */\n let defined;\n\n // Find an opening.\n while (index--) {\n if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n labelStart = self.events[index][1];\n break;\n }\n }\n return start;\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter(\"labelEnd\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelEnd\");\n return after;\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code);\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter(\"resource\");\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n return resourceBefore;\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n }\n return resourceEnd(code);\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n effects.exit(\"resource\");\n return ok;\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter(\"reference\");\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n return referenceCollapsedOpen;\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n effects.exit(\"reference\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelImage\");\n effects.enter(\"labelImageMarker\");\n effects.consume(code);\n effects.exit(\"labelImageMarker\");\n return open;\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelImage\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n *

!^a

\n *

!^a

\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n markdownLineEndingOrSpace,\n unicodePunctuation,\n unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (\n code === null ||\n markdownLineEndingOrSpace(code) ||\n unicodeWhitespace(code)\n ) {\n return 1\n }\n if (unicodePunctuation(code)) {\n return 2\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n let index = -1;\n /** @type {number} */\n let open;\n /** @type {Token} */\n let group;\n /** @type {Token} */\n let text;\n /** @type {Token} */\n let openingSequence;\n /** @type {Token} */\n let closingSequence;\n /** @type {number} */\n let use;\n /** @type {Array} */\n let nextEvents;\n /** @type {number} */\n let offset;\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n\n // Number of markers to use from the sequence.\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = Object.assign({}, events[open][1].end);\n const end = Object.assign({}, events[index][1].start);\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start,\n end: Object.assign({}, events[open][1].end)\n };\n closingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start: Object.assign({}, events[index][1].start),\n end\n };\n text = {\n type: use > 1 ? \"strongText\" : \"emphasisText\",\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n group = {\n type: use > 1 ? \"strong\" : \"emphasis\",\n start: Object.assign({}, openingSequence.start),\n end: Object.assign({}, closingSequence.end)\n };\n events[open][1].end = Object.assign({}, openingSequence.start);\n events[index][1].start = Object.assign({}, closingSequence.end);\n nextEvents = [];\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n }\n\n // Opening.\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n // Closing.\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n } else {\n offset = 0;\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data';\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const previous = this.previous;\n const before = classifyCharacter(previous);\n\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code;\n effects.enter('attentionSequence');\n return inside(code);\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit('attentionSequence');\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code);\n\n // Always populated by defaults.\n\n const open = !after || after === 2 && before || attentionMarkers.includes(code);\n const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n token._open = Boolean(marker === 42 ? open : open && (before || !close));\n token._close = Boolean(marker === 42 ? close : close && (after || !open));\n return ok(code);\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {undefined}\n */\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"autolink\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.enter(\"autolinkProtocol\");\n return open;\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return schemeOrEmailAtext;\n }\n if (code === 64) {\n return nok(code);\n }\n return emailAtext(code);\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1;\n return schemeInsideOrEmailAtext(code);\n }\n return emailAtext(code);\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code);\n size = 0;\n return urlInside;\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n effects.consume(code);\n return schemeInsideOrEmailAtext;\n }\n size = 0;\n return emailAtext(code);\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit(\"autolinkProtocol\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return urlInside;\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code);\n return emailAtSignOrDot;\n }\n if (asciiAtext(code)) {\n effects.consume(code);\n return emailAtext;\n }\n return nok(code);\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | ab\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code);\n size = 0;\n return emailAtSignOrDot;\n }\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n return emailValue(code);\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel;\n effects.consume(code);\n return next;\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlpha, asciiAlphanumeric, markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable | undefined} */\n let marker;\n /** @type {number} */\n let index;\n /** @type {State} */\n let returnState;\n return start;\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"htmlText\");\n effects.enter(\"htmlTextData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a c\n * ^\n * > | a c\n * ^\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n return instruction;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * > | a c\n * ^\n * > | a &<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n return nok(code);\n }\n\n /**\n * In a comment, after ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return nok(code);\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return comment;\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return comment(code);\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n\n /**\n * After ` | a &<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a &<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return cdata;\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return declaration;\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return instruction;\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n return tagCloseBetween(code);\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n return end(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n return end(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n return tagOpenAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n return tagOpenBetween(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n if (code === null) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit(\"htmlTextData\");\n effects.exit(\"htmlText\");\n return ok;\n }\n return nok(code);\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a \n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit(\"htmlTextData\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineEndingAfter;\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(\"htmlTextData\");\n return returnState(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelLink\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelLink\");\n return after;\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"hardBreakEscape\");\n effects.consume(code);\n return after;\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit(\"hardBreakEscape\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4;\n let headEnterIndex = 3;\n /** @type {number} */\n let index;\n /** @type {number | undefined} */\n let enter;\n\n // If we start and end with an EOL or a space.\n if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n index = headEnterIndex;\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === \"codeTextData\") {\n // Then we have padding.\n events[headEnterIndex][1].type = \"codeTextPadding\";\n events[tailExitIndex][1].type = \"codeTextPadding\";\n headEnterIndex += 2;\n tailExitIndex -= 2;\n break;\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1;\n tailExitIndex++;\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n enter = index;\n }\n } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n events[enter][1].type = \"codeTextData\";\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n tailExitIndex -= index - enter - 2;\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this;\n let sizeOpen = 0;\n /** @type {number} */\n let size;\n /** @type {Token} */\n let token;\n return start;\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"codeText\");\n effects.enter(\"codeTextSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code);\n sizeOpen++;\n return sequenceOpen;\n }\n effects.exit(\"codeTextSequence\");\n return between(code);\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code);\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space');\n effects.consume(code);\n effects.exit('space');\n return between;\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter(\"codeTextSequence\");\n size = 0;\n return sequenceClose(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return between;\n }\n\n // Data.\n effects.enter(\"codeTextData\");\n return data(code);\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n effects.exit(\"codeTextData\");\n return between(code);\n }\n effects.consume(code);\n return data;\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code);\n size++;\n return sequenceClose;\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit(\"codeTextSequence\");\n effects.exit(\"codeText\");\n return ok(code);\n }\n\n // More or less accents: mark as data.\n token.type = \"codeTextData\";\n return data(code);\n }\n}","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n attention,\n autolink,\n blockQuote,\n characterEscape,\n characterReference,\n codeFenced,\n codeIndented,\n codeText,\n definition,\n hardBreakEscape,\n headingAtx,\n htmlFlow,\n htmlText,\n labelEnd,\n labelStartImage,\n labelStartLink,\n lineEnding,\n list,\n setextUnderline,\n thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n}\n","/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {string, text} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n const settings = options || {}\n const constructs =\n /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n /** @type {ParseContext} */\n const parser = {\n defined: [],\n lazy: {},\n constructs,\n content: create(content),\n document: create(document),\n flow: create(flow),\n string: create(string),\n text: create(text)\n }\n return parser\n\n /**\n * @param {InitialConstruct} initial\n */\n function create(initial) {\n return creator\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from)\n }\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n let column = 1\n let buffer = ''\n /** @type {boolean | undefined} */\n let start = true\n /** @type {boolean | undefined} */\n let atCarriageReturn\n return preprocessor\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n /** @type {Array} */\n const chunks = []\n /** @type {RegExpMatchArray | null} */\n let match\n /** @type {number} */\n let next\n /** @type {number} */\n let startPosition\n /** @type {number} */\n let endPosition\n /** @type {Code} */\n let code\n value =\n buffer +\n (typeof value === 'string'\n ? value.toString()\n : new TextDecoder(encoding || undefined).decode(value))\n startPosition = 0\n buffer = ''\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++\n }\n start = undefined\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition\n match = search.exec(value)\n endPosition =\n match && match.index !== undefined ? match.index : value.length\n code = value.charCodeAt(endPosition)\n if (!match) {\n buffer = value.slice(startPosition)\n break\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3)\n atCarriageReturn = undefined\n } else {\n if (atCarriageReturn) {\n chunks.push(-5)\n atCarriageReturn = undefined\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition))\n column += endPosition - startPosition\n }\n switch (code) {\n case 0: {\n chunks.push(65533)\n column++\n break\n }\n case 9: {\n next = Math.ceil(column / 4) * 4\n chunks.push(-2)\n while (column++ < next) chunks.push(-1)\n break\n }\n case 10: {\n chunks.push(-4)\n column = 1\n break\n }\n default: {\n atCarriageReturn = true\n column = 1\n }\n }\n }\n startPosition = endPosition + 1\n }\n if (end) {\n if (atCarriageReturn) chunks.push(-5)\n if (buffer) chunks.push(buffer)\n chunks.push(null)\n }\n return chunks\n }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base);\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 || code === 11 || code > 13 && code < 32 ||\n // Control character (DEL) of C0, and C1 controls.\n code > 126 && code < 160 ||\n // Lone high surrogates and low surrogates.\n code > 55_295 && code < 57_344 ||\n // Noncharacters.\n code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n // Out of range\n code > 1_114_111) {\n return \"\\uFFFD\";\n }\n return String.fromCodePoint(code);\n}","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1\n }\n\n // Reference.\n const head = $2.charCodeAt(0)\n if (head === 35) {\n const head = $2.charCodeAt(1)\n const hex = head === 120 || head === 88\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n }\n return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n *\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Omit & {type: 'fragment', children: Array}} Fragment\n */\n\n/**\n * @callback Transform\n * Extra transform, to change the AST afterwards.\n * @param {Root} tree\n * Tree to transform.\n * @returns {Root | null | undefined | void}\n * New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n * Handle a token.\n * @param {CompileContext} this\n * Context.\n * @param {Token} token\n * Current token.\n * @returns {undefined | void}\n * Nothing.\n *\n * @typedef {Record} Handles\n * Token types mapping to handles\n *\n * @callback OnEnterError\n * Handle the case where the `right` token is open, but it is closed (by the\n * `left` token) or because we reached the end of the document.\n * @param {Omit} this\n * Context.\n * @param {Token | undefined} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {undefined}\n * Nothing.\n *\n * @callback OnExitError\n * Handle the case where the `right` token is open but it is closed by\n * exiting the `left` token.\n * @param {Omit} this\n * Context.\n * @param {Token} left\n * Left token.\n * @param {Token} right\n * Right token.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n * Open token on the stack, with an optional error handler for when\n * that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n * Configuration.\n *\n * We have our defaults, but extensions will add more.\n * @property {Array} canContainEols\n * Token types where line endings are used.\n * @property {Handles} enter\n * Opening handles.\n * @property {Handles} exit\n * Closing handles.\n * @property {Array} transforms\n * Tree transforms.\n *\n * @typedef {Partial} Extension\n * Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n * mdast compiler context.\n * @property {Array} stack\n * Stack of nodes.\n * @property {Array} tokenStack\n * Stack of tokens.\n * @property {(this: CompileContext) => undefined} buffer\n * Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n * Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Nodes, token: Token, onError?: OnEnterError) => undefined} enter\n * Enter a node.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => undefined} exit\n * Exit a node.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n * Get the string value of a token.\n * @property {Config} config\n * Configuration.\n * @property {CompileData} data\n * Info passed around; key/value store.\n *\n * @typedef FromMarkdownOptions\n * Configuration for how to build mdast.\n * @property {Array> | null | undefined} [mdastExtensions]\n * Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n * Configuration.\n */\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse, postprocess, preprocess} from 'micromark'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding\n encoding = undefined\n }\n return compiler(options)(\n postprocess(\n parse(options).document().write(preprocess()(value, encoding, true))\n )\n )\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n }\n configure(config, (options || {}).mdastExtensions || [])\n\n /** @type {CompileData} */\n const data = {}\n return compile\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n }\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n }\n /** @type {Array} */\n const listStack = []\n let index = -1\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (\n events[index][1].type === 'listOrdered' ||\n events[index][1].type === 'listUnordered'\n ) {\n if (events[index][0] === 'enter') {\n listStack.push(index)\n } else {\n const tail = listStack.pop()\n index = prepareList(events, tail, index)\n }\n }\n }\n index = -1\n while (++index < events.length) {\n const handler = config[events[index][0]]\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(\n Object.assign(\n {\n sliceSerialize: events[index][2].sliceSerialize\n },\n context\n ),\n events[index][1]\n )\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1]\n const handler = tail[1] || defaultOnError\n handler.call(context, undefined, tail[0])\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(\n events.length > 0\n ? events[0][1].start\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n ),\n end: point(\n events.length > 0\n ? events[events.length - 2][1].end\n : {\n line: 1,\n column: 1,\n offset: 0\n }\n )\n }\n\n // Call transforms.\n index = -1\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree\n }\n return tree\n }\n\n /**\n * @param {Array} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1\n let containerBalance = -1\n let listSpread = false\n /** @type {Token | undefined} */\n let listItem\n /** @type {number | undefined} */\n let lineIndex\n /** @type {number | undefined} */\n let firstBlankLineIndex\n /** @type {boolean | undefined} */\n let atMarker\n while (++index <= length) {\n const event = events[index]\n switch (event[1].type) {\n case 'listUnordered':\n case 'listOrdered':\n case 'blockQuote': {\n if (event[0] === 'enter') {\n containerBalance++\n } else {\n containerBalance--\n }\n atMarker = undefined\n break\n }\n case 'lineEndingBlank': {\n if (event[0] === 'enter') {\n if (\n listItem &&\n !atMarker &&\n !containerBalance &&\n !firstBlankLineIndex\n ) {\n firstBlankLineIndex = index\n }\n atMarker = undefined\n }\n break\n }\n case 'linePrefix':\n case 'listItemValue':\n case 'listItemMarker':\n case 'listItemPrefix':\n case 'listItemPrefixWhitespace': {\n // Empty.\n\n break\n }\n default: {\n atMarker = undefined\n }\n }\n if (\n (!containerBalance &&\n event[0] === 'enter' &&\n event[1].type === 'listItemPrefix') ||\n (containerBalance === -1 &&\n event[0] === 'exit' &&\n (event[1].type === 'listUnordered' ||\n event[1].type === 'listOrdered'))\n ) {\n if (listItem) {\n let tailIndex = index\n lineIndex = undefined\n while (tailIndex--) {\n const tailEvent = events[tailIndex]\n if (\n tailEvent[1].type === 'lineEnding' ||\n tailEvent[1].type === 'lineEndingBlank'\n ) {\n if (tailEvent[0] === 'exit') continue\n if (lineIndex) {\n events[lineIndex][1].type = 'lineEndingBlank'\n listSpread = true\n }\n tailEvent[1].type = 'lineEnding'\n lineIndex = tailIndex\n } else if (\n tailEvent[1].type === 'linePrefix' ||\n tailEvent[1].type === 'blockQuotePrefix' ||\n tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n tailEvent[1].type === 'blockQuoteMarker' ||\n tailEvent[1].type === 'listItemIndent'\n ) {\n // Empty\n } else {\n break\n }\n }\n if (\n firstBlankLineIndex &&\n (!lineIndex || firstBlankLineIndex < lineIndex)\n ) {\n listItem._spread = true\n }\n\n // Fix position.\n listItem.end = Object.assign(\n {},\n lineIndex ? events[lineIndex][1].start : event[1].end\n )\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n index++\n length++\n }\n\n // Create a new list item.\n if (event[1].type === 'listItemPrefix') {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n }\n listItem = item\n events.splice(index, 0, ['enter', item, event[2]])\n index++\n length++\n firstBlankLineIndex = undefined\n atMarker = true\n }\n }\n }\n events[start][1]._spread = listSpread\n return length\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token)\n if (and) and.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @returns {undefined}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n })\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Nodes} node\n * Node to enter.\n * @param {Token} token\n * Corresponding token.\n * @param {OnEnterError | undefined} [errorHandler]\n * Handle the case where this token is open, but it is closed by something else.\n * @returns {undefined}\n * Nothing.\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1]\n /** @type {Array} */\n const siblings = parent.children\n siblings.push(node)\n this.stack.push(node)\n this.tokenStack.push([token, errorHandler])\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n }\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token)\n exit.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * Context.\n * @param {Token} token\n * Corresponding token.\n * @param {OnExitError | undefined} [onExitError]\n * Handle the case where another token is open.\n * @returns {undefined}\n * Nothing.\n */\n function exit(token, onExitError) {\n const node = this.stack.pop()\n const open = this.tokenStack.pop()\n if (!open) {\n throw new Error(\n 'Cannot close `' +\n token.type +\n '` (' +\n stringifyPosition({\n start: token.start,\n end: token.end\n }) +\n '): it’s not open'\n )\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0])\n } else {\n const handler = open[1] || defaultOnError\n handler.call(this, token, open[0])\n }\n }\n node.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @returns {string}\n */\n function resume() {\n return toString(this.stack.pop())\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2]\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n this.data.expectingFirstListItemValue = undefined\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.lang = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.meta = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return\n this.buffer()\n this.data.flowCodeInside = true\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n this.data.flowCodeInside = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1]\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length\n node.depth = depth\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1]\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1]\n /** @type {Array} */\n const siblings = node.children\n let tail = siblings[siblings.length - 1]\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text()\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n }\n siblings.push(tail)\n }\n this.stack.push(tail)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop()\n tail.value += this.sliceSerialize(token)\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1]\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1]\n tail.position.end = point(token.end)\n this.data.atHardBreak = undefined\n return\n }\n if (\n !this.data.setextHeadingSlurpLineEnding &&\n config.canContainEols.includes(context.type)\n ) {\n onenterdata.call(this, token)\n onexitdata.call(this, token)\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.value = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n this.data.referenceType = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1]\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut'\n node.type += 'Reference'\n // @ts-expect-error: mutate.\n node.referenceType = referenceType\n // @ts-expect-error: mutate.\n delete node.url\n delete node.title\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier\n // @ts-expect-error: mutate.\n delete node.label\n }\n this.data.referenceType = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token)\n const ancestor = this.stack[this.stack.length - 2]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string)\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1]\n const value = this.resume()\n const node = this.stack[this.stack.length - 1]\n // Assume a reference.\n this.data.inReference = true\n if (node.type === 'link') {\n /** @type {Array} */\n const children = fragment.children\n node.children = children\n } else {\n node.alt = value\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.url = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume()\n const node = this.stack[this.stack.length - 1]\n node.title = data\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed'\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n this.data.referenceType = 'full'\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token)\n const type = this.data.characterReferenceType\n /** @type {string} */\n let value\n if (type) {\n value = decodeNumericCharacterReference(\n data,\n type === 'characterReferenceMarkerNumeric' ? 10 : 16\n )\n this.data.characterReferenceType = undefined\n } else {\n const result = decodeNamedCharacterReference(data)\n value = result\n }\n const tail = this.stack.pop()\n tail.value += value\n tail.position.end = point(token.end)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = this.sliceSerialize(token)\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token)\n const node = this.stack[this.stack.length - 1]\n node.url = 'mailto:' + this.sliceSerialize(token)\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n }\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n }\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n }\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n }\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n }\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: []\n }\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n }\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: ''\n }\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n }\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n }\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n }\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n }\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n }\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n }\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n }\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Array | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1\n while (++index < extensions.length) {\n const value = extensions[index]\n if (Array.isArray(value)) {\n configure(combined, value)\n } else {\n extension(combined, value)\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols': {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n break\n }\n case 'transforms': {\n const right = extension[key]\n if (right) {\n combined[key].push(...right)\n }\n break\n }\n case 'enter':\n case 'exit': {\n const right = extension[key]\n if (right) {\n Object.assign(combined[key], right)\n }\n break\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error(\n 'Cannot close `' +\n left.type +\n '` (' +\n stringifyPosition({\n start: left.start,\n end: left.end\n }) +\n '): a different token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is open'\n )\n } else {\n throw new Error(\n 'Cannot close document, a token (`' +\n right.type +\n '`, ' +\n stringifyPosition({\n start: right.start,\n end: right.end\n }) +\n ') is still open'\n )\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array} events\n * @returns {Array}\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser} Parser\n * @typedef {import('unified').Processor} Processor\n */\n\n/**\n * @typedef {Omit} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(new env[name](message), index);\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n }\n return as(new env[type](value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (asString.includes('Error'))\n return [ERROR, asString];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type)\n return as([type, [...value]], value);\n \n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n /* c8 ignore start */\n (any, options) => (\n options && ('json' in options || 'lossy' in options) ?\n deserialize(serialize(any, options)) : structuredClone(any)\n ) :\n (any, options) => deserialize(serialize(any, options));\n /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","import {asciiAlphanumeric} from 'micromark-util-character'\nimport {encode} from 'micromark-util-encode'\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n * URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n * Allowed protocols.\n * @returns {string}\n * Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n const value = encode(normalizeUri(url || ''))\n if (!protocol) {\n return value\n }\n const colon = value.indexOf(':')\n const questionMark = value.indexOf('?')\n const numberSign = value.indexOf('#')\n const slash = value.indexOf('/')\n if (\n // If there is no protocol, it’s relative.\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash > -1 && colon > slash) ||\n (questionMark > -1 && colon > questionMark) ||\n (numberSign > -1 && colon > numberSign) ||\n // It is a protocol, it should be allowed.\n protocol.test(value.slice(0, colon))\n ) {\n return value\n }\n return ''\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n * URI to normalize.\n * @returns {string}\n * Normalized URI.\n */\nexport function normalizeUri(value) {\n /** @type {Array} */\n const result = []\n let index = -1\n let start = 0\n let skip = 0\n while (++index < value.length) {\n const code = value.charCodeAt(index)\n /** @type {string} */\n let replace = ''\n\n // A correct percent encoded value.\n if (\n code === 37 &&\n asciiAlphanumeric(value.charCodeAt(index + 1)) &&\n asciiAlphanumeric(value.charCodeAt(index + 2))\n ) {\n skip = 2\n }\n // ASCII.\n else if (code < 128) {\n if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n replace = String.fromCharCode(code)\n }\n }\n // Astral.\n else if (code > 55_295 && code < 57_344) {\n const next = value.charCodeAt(index + 1)\n\n // A correct surrogate pair.\n if (code < 56_320 && next > 56_319 && next < 57_344) {\n replace = String.fromCharCode(code, next)\n skip = 1\n }\n // Lone surrogate.\n else {\n replace = '\\uFFFD'\n }\n }\n // Unicode.\n else {\n replace = String.fromCharCode(code)\n }\n if (replace) {\n result.push(value.slice(start, index), encodeURIComponent(replace))\n start = index + skip + 1\n replace = ''\n }\n if (skip) {\n index += skip\n skip = 0\n }\n }\n return result.join('') + value.slice(start)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n * Generate content for the backreference dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array | ElementContent | string}\n * Content for the backreference when linking back from definitions to their\n * reference.\n *\n * @callback FootnoteBackLabelTemplate\n * Generate a back label dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array}\n * Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n /** @type {Array} */\n const result = [{type: 'text', value: '↩'}]\n\n if (rereferenceIndex > 1) {\n result.push({\n type: 'element',\n tagName: 'sup',\n properties: {},\n children: [{type: 'text', value: String(rereferenceIndex)}]\n })\n }\n\n return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n return (\n 'Back to reference ' +\n (referenceIndex + 1) +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n * Info passed around.\n * @returns {Element | undefined}\n * `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n const clobberPrefix =\n typeof state.options.clobberPrefix === 'string'\n ? state.options.clobberPrefix\n : 'user-content-'\n const footnoteBackContent =\n state.options.footnoteBackContent || defaultFootnoteBackContent\n const footnoteBackLabel =\n state.options.footnoteBackLabel || defaultFootnoteBackLabel\n const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n className: ['sr-only']\n }\n /** @type {Array} */\n const listItems = []\n let referenceIndex = -1\n\n while (++referenceIndex < state.footnoteOrder.length) {\n const def = state.footnoteById.get(state.footnoteOrder[referenceIndex])\n\n if (!def) {\n continue\n }\n\n const content = state.all(def)\n const id = String(def.identifier).toUpperCase()\n const safeId = normalizeUri(id.toLowerCase())\n let rereferenceIndex = 0\n /** @type {Array} */\n const backReferences = []\n const counts = state.footnoteCounts.get(id)\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (counts !== undefined && ++rereferenceIndex <= counts) {\n if (backReferences.length > 0) {\n backReferences.push({type: 'text', value: ' '})\n }\n\n let children =\n typeof footnoteBackContent === 'string'\n ? footnoteBackContent\n : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n if (typeof children === 'string') {\n children = {type: 'text', value: children}\n }\n\n backReferences.push({\n type: 'element',\n tagName: 'a',\n properties: {\n href:\n '#' +\n clobberPrefix +\n 'fnref-' +\n safeId +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n dataFootnoteBackref: '',\n ariaLabel:\n typeof footnoteBackLabel === 'string'\n ? footnoteBackLabel\n : footnoteBackLabel(referenceIndex, rereferenceIndex),\n className: ['data-footnote-backref']\n },\n children: Array.isArray(children) ? children : [children]\n })\n }\n\n const tail = content[content.length - 1]\n\n if (tail && tail.type === 'element' && tail.tagName === 'p') {\n const tailTail = tail.children[tail.children.length - 1]\n if (tailTail && tailTail.type === 'text') {\n tailTail.value += ' '\n } else {\n tail.children.push({type: 'text', value: ' '})\n }\n\n tail.children.push(...backReferences)\n } else {\n content.push(...backReferences)\n }\n\n /** @type {Element} */\n const listItem = {\n type: 'element',\n tagName: 'li',\n properties: {id: clobberPrefix + 'fn-' + safeId},\n children: state.wrap(content, true)\n }\n\n state.patch(def, listItem)\n\n listItems.push(listItem)\n }\n\n if (listItems.length === 0) {\n return\n }\n\n return {\n type: 'element',\n tagName: 'section',\n properties: {dataFootnotes: true, className: ['footnotes']},\n children: [\n {\n type: 'element',\n tagName: footnoteLabelTagName,\n properties: {\n ...structuredClone(footnoteLabelProperties),\n id: 'footnote-label'\n },\n children: [{type: 'text', value: footnoteLabel}]\n },\n {type: 'text', value: '\\n'},\n {\n type: 'element',\n tagName: 'ol',\n properties: {},\n children: state.wrap(listItems, true)\n },\n {type: 'text', value: '\\n'}\n ]\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n const checkAsRecord = /** @type {Record} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor, Check>, Ancestor, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly} */\n let result = empty\n /** @type {Readonly} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches,\n * Extract\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Reference} Reference\n *\n * @typedef {import('./state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n * Info passed around.\n * @param {Extract} node\n * Reference node (image, link).\n * @returns {Array}\n * hast content.\n */\nexport function revert(state, node) {\n const subtype = node.referenceType\n let suffix = ']'\n\n if (subtype === 'collapsed') {\n suffix += '[]'\n } else if (subtype === 'full') {\n suffix += '[' + (node.label || node.identifier) + ']'\n }\n\n if (node.type === 'imageReference') {\n return [{type: 'text', value: '![' + node.alt + suffix}]\n }\n\n const contents = state.all(node)\n const head = contents[0]\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value\n } else {\n contents.unshift({type: 'text', value: '['})\n }\n\n const tail = contents[contents.length - 1]\n\n if (tail && tail.type === 'text') {\n tail.value += suffix\n } else {\n contents.push({type: 'text', value: suffix})\n }\n\n return contents\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {ListItem} node\n * mdast node.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {Element}\n * hast node.\n */\nexport function listItem(state, node, parent) {\n const results = state.all(node)\n const loose = parent ? listLoose(parent) : listItemLoose(node)\n /** @type {Properties} */\n const properties = {}\n /** @type {Array} */\n const children = []\n\n if (typeof node.checked === 'boolean') {\n const head = results[0]\n /** @type {Element} */\n let paragraph\n\n if (head && head.type === 'element' && head.tagName === 'p') {\n paragraph = head\n } else {\n paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n results.unshift(paragraph)\n }\n\n if (paragraph.children.length > 0) {\n paragraph.children.unshift({type: 'text', value: ' '})\n }\n\n paragraph.children.unshift({\n type: 'element',\n tagName: 'input',\n properties: {type: 'checkbox', checked: node.checked, disabled: true},\n children: []\n })\n\n // According to github-markdown-css, this class hides bullet.\n // See: .\n properties.className = ['task-list-item']\n }\n\n let index = -1\n\n while (++index < results.length) {\n const child = results[index]\n\n // Add eols before nodes, except if this is a loose, first paragraph.\n if (\n loose ||\n index !== 0 ||\n child.type !== 'element' ||\n child.tagName !== 'p'\n ) {\n children.push({type: 'text', value: '\\n'})\n }\n\n if (child.type === 'element' && child.tagName === 'p' && !loose) {\n children.push(...child.children)\n } else {\n children.push(child)\n }\n }\n\n const tail = results[results.length - 1]\n\n // Add a final eol.\n if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n children.push({type: 'text', value: '\\n'})\n }\n\n /** @type {Element} */\n const result = {type: 'element', tagName: 'li', properties, children}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n let loose = false\n if (node.type === 'list') {\n loose = node.spread || false\n const children = node.children\n let index = -1\n\n while (!loose && ++index < children.length) {\n loose = listItemLoose(children[index])\n }\n }\n\n return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n const spread = node.spread\n\n return spread === null || spread === undefined\n ? node.children.length > 1\n : spread\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Trimmed value.\n */\nexport function trimLines(value) {\n const source = String(value)\n const search = /\\r?\\n|\\r/g\n let match = search.exec(source)\n let last = 0\n /** @type {Array} */\n const lines = []\n\n while (match) {\n lines.push(\n trimLine(source.slice(last, match.index), last > 0, true),\n match[0]\n )\n\n last = match.index + match[0].length\n match = search.exec(source)\n }\n\n lines.push(trimLine(source.slice(last), last > 0, false))\n\n return lines.join('')\n}\n\n/**\n * @param {string} value\n * Line to trim.\n * @param {boolean} start\n * Whether to trim the start of the line.\n * @param {boolean} end\n * Whether to trim the end of the line.\n * @returns {string}\n * Trimmed line.\n */\nfunction trimLine(value, start, end) {\n let startIndex = 0\n let endIndex = value.length\n\n if (start) {\n let code = value.codePointAt(startIndex)\n\n while (code === tab || code === space) {\n startIndex++\n code = value.codePointAt(startIndex)\n }\n }\n\n if (end) {\n let code = value.codePointAt(endIndex - 1)\n\n while (code === tab || code === space) {\n endIndex--\n code = value.codePointAt(endIndex - 1)\n }\n }\n\n return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {import('../state.js').Handlers}\n */\nexport const handlers = {\n blockquote,\n break: hardBreak,\n code,\n delete: strikethrough,\n emphasis,\n footnoteReference,\n heading,\n html,\n imageReference,\n image,\n inlineCode,\n linkReference,\n link,\n listItem,\n list,\n paragraph,\n // @ts-expect-error: root is different, but hard to type.\n root,\n strong,\n table,\n tableCell,\n tableRow,\n text,\n thematicBreak,\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Blockquote} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function blockquote(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'blockquote',\n properties: {},\n children: state.wrap(state.all(node), true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Break} node\n * mdast node.\n * @returns {Array}\n * hast element content.\n */\nexport function hardBreak(state, node) {\n /** @type {Element} */\n const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n state.patch(node, result)\n return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Code} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function code(state, node) {\n const value = node.value ? node.value + '\\n' : ''\n /** @type {Properties} */\n const properties = {}\n\n if (node.lang) {\n properties.className = ['language-' + node.lang]\n }\n\n // Create ``.\n /** @type {Element} */\n let result = {\n type: 'element',\n tagName: 'code',\n properties,\n children: [{type: 'text', value}]\n }\n\n if (node.meta) {\n result.data = {meta: node.meta}\n }\n\n state.patch(node, result)\n result = state.applyData(node, result)\n\n // Create `
`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Html} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const def = state.definitionById.get(id)\n\n  if (!def) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(def.url || ''), alt: node.alt}\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const def = state.definitionById.get(id)\n\n  if (!def) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(def.url || '')}\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Parents} HastParents\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').RootContent} HastRootContent\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('mdast').Parents} MdastParents\n *\n * @typedef {import('vfile').VFile} VFile\n *\n * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate\n * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   

\n * \n * ```\n *\n * The above example shows that elements are made available by browsers, by\n * their ID, on the `window` object.\n * This is a security risk because you might be expecting some other variable\n * at that place.\n * It can also break polyfills.\n * Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n * Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n * Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackContent(_, rereferenceIndex) {\n * const result = [{type: 'text', value: '↩'}]\n *\n * if (rereferenceIndex > 1) {\n * result.push({\n * type: 'element',\n * tagName: 'sup',\n * properties: {},\n * children: [{type: 'text', value: String(rereferenceIndex)}]\n * })\n * }\n *\n * return result\n * }\n * ```\n *\n * This content is used in the `a` element of each backreference (the `↩`\n * links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n * Label to describe the backreference back to references (default:\n * `defaultFootnoteBackLabel`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n * return (\n * 'Back to reference ' +\n * (referenceIndex + 1) +\n * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n * )\n * }\n * ```\n *\n * Change it when the markdown is not in English.\n *\n * This label is used in the `ariaLabel` property on each backreference\n * (the `↩` links).\n * It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n * Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n * Change it when the markdown is not in English.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n * Properties to use on the footnote label (default: `{className:\n * ['sr-only']}`).\n *\n * Change it to show the label and add other properties.\n *\n * This label is typically hidden visually (assuming an `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass an empty string.\n * You can also add different properties.\n *\n * > 👉 **Note**: `id: 'footnote-label'` is always added, because footnote\n * > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n * HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n * Change it to match your document structure.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n * Extra handlers for nodes (optional).\n * @property {Array | null | undefined} [passThrough]\n * List of custom mdast node types to pass through (keep) in hast (note that\n * the node itself is passed, but eventual children are transformed)\n * (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n * Handler for all unknown nodes (optional).\n *\n * @typedef State\n * Info passed around.\n * @property {(node: MdastNodes) => Array} all\n * Transform the children of an mdast parent to hast.\n * @property {(from: MdastNodes, to: Type) => HastElement | Type} applyData\n * Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map} definitionById\n * Definitions by their identifier.\n * @property {Map} footnoteById\n * Footnote definitions by their identifier.\n * @property {Map} footnoteCounts\n * Counts for how often the same footnote was called.\n * @property {Array} footnoteOrder\n * Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n * Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array | HastElementContent | undefined} one\n * Transform an mdast node to hast.\n * @property {Options} options\n * Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n * Copy a node’s positional info.\n * @property {(nodes: Array, loose?: boolean | undefined) => Array} wrap\n * Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n * mdast node to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {State}\n * `state` function.\n */\nexport function createState(tree, options) {\n const settings = options || emptyOptions\n /** @type {Map} */\n const definitionById = new Map()\n /** @type {Map} */\n const footnoteById = new Map()\n /** @type {Map} */\n const footnoteCounts = new Map()\n /** @type {Handlers} */\n // @ts-expect-error: the root handler returns a root.\n // Hard to type.\n const handlers = {...defaultHandlers, ...settings.handlers}\n\n /** @type {State} */\n const state = {\n all,\n applyData,\n definitionById,\n footnoteById,\n footnoteCounts,\n footnoteOrder: [],\n handlers,\n one,\n options: settings,\n patch,\n wrap\n }\n\n visit(tree, function (node) {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const map = node.type === 'definition' ? definitionById : footnoteById\n const id = String(node.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: .\n if (!map.has(id)) {\n // @ts-expect-error: node type matches map.\n map.set(id, node)\n }\n }\n })\n\n return state\n\n /**\n * Transform an mdast node into a hast node.\n *\n * @param {MdastNodes} node\n * mdast node.\n * @param {MdastParents | undefined} [parent]\n * Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n * Resulting hast node.\n */\n function one(node, parent) {\n const type = node.type\n const handle = state.handlers[type]\n\n if (own.call(state.handlers, type) && handle) {\n return handle(state, node, parent)\n }\n\n if (state.options.passThrough && state.options.passThrough.includes(type)) {\n if ('children' in node) {\n const {children, ...shallow} = node\n const result = structuredClone(shallow)\n // @ts-expect-error: TS doesn’t understand…\n result.children = state.all(node)\n // @ts-expect-error: TS doesn’t understand…\n return result\n }\n\n // @ts-expect-error: it’s custom.\n return structuredClone(node)\n }\n\n const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n return unknown(state, node, parent)\n }\n\n /**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {MdastNodes} parent\n * mdast node to compile\n * @returns {Array}\n * Resulting hast nodes.\n */\n function all(parent) {\n /** @type {Array} */\n const values = []\n\n if ('children' in parent) {\n const nodes = parent.children\n let index = -1\n while (++index < nodes.length) {\n const result = state.one(nodes[index], parent)\n\n // To do: see if we van clean this? Can we merge texts?\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (!Array.isArray(result) && result.type === 'text') {\n result.value = trimMarkdownSpaceStart(result.value)\n }\n\n if (!Array.isArray(result) && result.type === 'element') {\n const head = result.children[0]\n\n if (head && head.type === 'text') {\n head.value = trimMarkdownSpaceStart(head.value)\n }\n }\n }\n\n if (Array.isArray(result)) {\n values.push(...result)\n } else {\n values.push(result)\n }\n }\n }\n }\n\n return values\n }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n * mdast node to copy from.\n * @param {HastNodes} to\n * hast node to copy into.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(from, to) {\n if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n * Node type.\n * @param {MdastNodes} from\n * mdast node to use data from.\n * @param {Type} to\n * hast node to change.\n * @returns {HastElement | Type}\n * Nothing.\n */\nfunction applyData(from, to) {\n /** @type {HastElement | Type} */\n let result = to\n\n // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n if (from && from.data) {\n const hName = from.data.hName\n const hChildren = from.data.hChildren\n const hProperties = from.data.hProperties\n\n if (typeof hName === 'string') {\n // Transforming the node resulted in an element with a different name\n // than wanted:\n if (result.type === 'element') {\n result.tagName = hName\n }\n // Transforming the node resulted in a non-element, which happens for\n // raw, text, and root nodes (unless custom handlers are passed).\n // The intent of `hName` is to create an element, but likely also to keep\n // the content around (otherwise: pass `hChildren`).\n else {\n /** @type {Array} */\n // @ts-expect-error: assume no doctypes in `root`.\n const children = 'children' in result ? result.children : [result]\n result = {type: 'element', tagName: hName, properties: {}, children}\n }\n }\n\n if (result.type === 'element' && hProperties) {\n Object.assign(result.properties, structuredClone(hProperties))\n }\n\n if (\n 'children' in result &&\n result.children &&\n hChildren !== null &&\n hChildren !== undefined\n ) {\n result.children = hChildren\n }\n }\n\n return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdastNodes} node\n * Unknown mdast node.\n * @returns {HastElement | HastText}\n * Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n const data = node.data || {}\n /** @type {HastElement | HastText} */\n const result =\n 'value' in node &&\n !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n ? {type: 'text', value: node.value}\n : {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: state.all(node)\n }\n\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n * Node type.\n * @param {Array} nodes\n * List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n * Whether to add line endings at start and end (default: `false`).\n * @returns {Array}\n * Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n if (loose) {\n result.push({type: 'text', value: '\\n'})\n }\n\n while (++index < nodes.length) {\n if (index) result.push({type: 'text', value: '\\n'})\n result.push(nodes[index])\n }\n\n if (loose && nodes.length > 0) {\n result.push({type: 'text', value: '\\n'})\n }\n\n return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n let index = 0\n let code = value.charCodeAt(index)\n\n while (code === 9 || code === 32) {\n index++\n code = value.charCodeAt(index)\n }\n\n return value.slice(index)\n}\n","/**\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('./state.js').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * * `hast-util-to-html` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful\n * if you completely trust authors\n * * `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only\n * way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n * mdast tree.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {HastNodes}\n * hast tree.\n */\nexport function toHast(tree, options) {\n const state = createState(tree, options)\n const node = state.one(tree, undefined)\n const foot = footer(state)\n /** @type {HastNodes} */\n const result = Array.isArray(node)\n ? {type: 'root', children: node}\n : node || {type: 'root', children: []}\n\n if (foot) {\n // If there’s a footer, there were definitions, meaning block\n // content.\n // So `result` is a parent node.\n assert('children' in result)\n result.children.push({type: 'text', value: '\\n'}, foot)\n }\n\n return result\n}\n","// Include `data` fields in mdast and `raw` nodes in hast.\n/// \n\n/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('mdast-util-to-hast').Options} ToHastOptions\n * @typedef {import('unified').Processor} Processor\n * @typedef {import('vfile').VFile} VFile\n */\n\n/**\n * @typedef {Omit} Options\n *\n * @callback TransformBridge\n * Bridge-mode.\n *\n * Runs the destination with the new hast tree.\n * Discards result.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Promise}\n * Nothing.\n *\n * @callback TransformMutate\n * Mutate-mode.\n *\n * Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {HastRoot}\n * Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given, runs the (rehype) plugins used on it with a\n * hast tree, then discards the result (*bridge mode*)\n * * otherwise, returns a hast tree, the plugins used after `remarkRehype`\n * are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful if\n * you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only way\n * to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @param {Readonly | Processor | null | undefined} [destination]\n * Processor or configuration (optional).\n * @param {Readonly | null | undefined} [options]\n * When a processor was given, configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n * Transform.\n */\nexport default function remarkRehype(destination, options) {\n if (destination && 'run' in destination) {\n /**\n * @type {TransformBridge}\n */\n return async function (tree, file) {\n // Cast because root in -> root out.\n const hastTree = /** @type {HastRoot} */ (\n toHast(tree, {file, ...options})\n )\n await destination.run(hastTree, file)\n }\n }\n\n /**\n * @type {TransformMutate}\n */\n return function (tree, file) {\n // Cast because root in -> root out.\n return /** @type {HastRoot} */ (\n toHast(tree, {file, ...(options || destination)})\n )\n }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","/**\n * @typedef {(error?: Error|null|undefined, ...output: Array) => void} Callback\n * @typedef {(...input: Array) => any} Middleware\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add `fn` (middleware) to the list.\n * @typedef {{run: Run, use: Use}} Pipeline\n * Middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n */\nexport function trough() {\n /** @type {Array} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error|null|undefined} error\n * @param {Array} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware`.\n * Can be sync or async; return a promise, receive a callback, or return new\n * values and errors.\n *\n * @param {Middleware} middleware\n * @param {Callback} callback\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result instanceof Promise) {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const path = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [ext]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (ext === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extIndex = ext.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === ext.codePointAt(extIndex--)) {\n if (extIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// .\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const proc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: \nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: \n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n * @typedef {import('vfile-message').Options} MessageOptions\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {Options | URL | VFile | Value} Compatible\n * Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n * Set multiple values.\n * @property {string | null | undefined} [basename]\n * Set `basename` (name).\n * @property {string | null | undefined} [cwd]\n * Set `cwd` (working directory).\n * @property {Data | null | undefined} [data]\n * Set `data` (associated info).\n * @property {string | null | undefined} [dirname]\n * Set `dirname` (path w/o basename).\n * @property {string | null | undefined} [extname]\n * Set `extname` (extension with dot).\n * @property {Array | null | undefined} [history]\n * Set `history` (paths the file moved between).\n * @property {URL | string | null | undefined} [path]\n * Set `path` (current path).\n * @property {string | null | undefined} [stem]\n * Set `stem` (name without extension).\n * @property {Value | null | undefined} [value]\n * Set `value` (the contents of the file).\n *\n * @typedef Map\n * Raw source map.\n *\n * See:\n * .\n * @property {number} version\n * Which version of the source map spec this map is following.\n * @property {Array} sources\n * An array of URLs to the original source files.\n * @property {Array} names\n * An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n * The URL root from which all sources are relative.\n * @property {Array | undefined} [sourcesContent]\n * An array of contents of the original source files.\n * @property {string} mappings\n * A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n * The generated file this source map is associated with.\n *\n * @typedef {Record & VFileCoreOptions} Options\n * Configuration.\n *\n * A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record} ReporterSettings\n * Configuration for reporters.\n */\n\n/**\n * @template [Settings=ReporterSettings]\n * Options type.\n * @callback Reporter\n * Type for a reporter.\n * @param {Array} files\n * Files to report.\n * @param {Settings} options\n * Configuration.\n * @returns {string}\n * Report.\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {path} from 'vfile/do-not-use-conditional-minpath'\nimport {proc} from 'vfile/do-not-use-conditional-minproc'\nimport {urlToPath, isUrl} from 'vfile/do-not-use-conditional-minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n this.cwd = proc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const prop = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n prop in options &&\n options[prop] !== undefined &&\n options[prop] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[prop] = prop === 'history' ? [...options[prop]] : options[prop]\n }\n }\n\n /** @type {string} */\n let prop\n\n // Set non-path related properties.\n for (prop in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(prop)) {\n // @ts-expect-error: fine to set other things.\n this[prop] = options[prop]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string' ? path.basename(this.path) : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = path.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = path.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string' ? path.extname(this.path) : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = path.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? path.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > .\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(path.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","export const CallableInstance =\n /**\n * @type {new , Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const func = proto[property]\n /** @type {(...parameters: Array) => unknown} */\n const apply = function () {\n return func.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n const names = Object.getOwnPropertyNames(func)\n\n for (const p of names) {\n const descriptor = Object.getOwnPropertyDescriptor(func, p)\n if (descriptor) Object.defineProperty(apply, p, descriptor)\n }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@link CompileResultMap `CompileResultMap`}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@link Node `Node`}\n * and {@link VFile `VFile`} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > 👉 **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@link CompileResultMap `CompileResultMap`}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@link VFile `VFile`} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@link Node `Node`}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin, any, any> |\n * PluginTuple, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// .\n/**\n * @template {Array} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@link Transformer `Transformer`}, this\n * should be the node it expects.\n * * If the plugin sets a {@link Parser `Parser`}, this should be\n * `string`.\n * * If the plugin sets a {@link Compiler `Compiler`}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@link Transformer `Transformer`}, this\n * should be the node that that yields.\n * * If the plugin sets a {@link Parser `Parser`}, this should be the\n * node that it yields.\n * * If the plugin sets a {@link Compiler `Compiler`}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > 👉 **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@link Transformer `Transformer`}, this\n * should be the node it expects.\n * * If the plugin sets a {@link Parser `Parser`}, this should be\n * `string`.\n * * If the plugin sets a {@link Compiler `Compiler`}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@link Transformer `Transformer`}, this\n * should be the node that that yields.\n * * If the plugin sets a {@link Parser `Parser`}, this should be the\n * node that it yields.\n * * If the plugin sets a {@link Compiler `Compiler`}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > 👉 **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback} next\n * Callback.\n * @returns {(\n * Promise |\n * Promise | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : // Unknown.\n * Processor\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@link VFile `VFile`} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@link VFile `VFile`}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor}\n * New *unfrozen* processor ({@link Processor `Processor`}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > 👉 **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > 👉 **Note**: to register custom data in TypeScript, augment the\n * > {@link Data `Data`} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > 👉 **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > 👉 **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > 👉 **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > 👉 **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback> | undefined} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > 👉 **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@link CompileResultMap `CompileResultMap`}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > 👉 **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > 👉 **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > 👉 **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@link CompileResultMap `CompileResultMap`}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > 👉 **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > 👉 **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > 👉 **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > 👉 **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > 👉 **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > 👉 **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > 👉 **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@link CompileResultMap `CompileResultMap`}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > 👉 **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor}\n *\n * @overload\n * @param {Plugin} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","// Register `Raw` in tree:\n/// \n\n/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Parents} Parents\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-to-jsx-runtime').Components} JsxRuntimeComponents\n * @typedef {import('remark-rehype').Options} RemarkRehypeOptions\n * @typedef {import('unist-util-visit').BuildVisitor} Visitor\n * @typedef {import('unified').PluggableList} PluggableList\n */\n\n/**\n * @callback AllowElement\n * Filter elements.\n * @param {Readonly} element\n * Element to check.\n * @param {number} index\n * Index of `element` in `parent`.\n * @param {Readonly | undefined} parent\n * Parent of `element`.\n * @returns {boolean | null | undefined}\n * Whether to allow `element` (default: `false`).\n *\n * @typedef {Partial} Components\n * Map tag names to components.\n *\n * @typedef Deprecation\n * Deprecation.\n * @property {string} from\n * Old field.\n * @property {string} id\n * ID in readme.\n * @property {keyof Options} [to]\n * New field.\n *\n * @typedef Options\n * Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n * Filter elements (optional);\n * `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray | null | undefined} [allowedElements]\n * Tag names to allow (default: all tag names);\n * cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n * Markdown.\n * @property {string | null | undefined} [className]\n * Wrap in a `div` with this class name.\n * @property {Components | null | undefined} [components]\n * Map tag names to components.\n * @property {ReadonlyArray | null | undefined} [disallowedElements]\n * Tag names to disallow (default: `[]`);\n * cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n * List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n * List of remark plugins to use.\n * @property {Readonly | null | undefined} [remarkRehypeOptions]\n * Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n * Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n * Extract (unwrap) what’s in disallowed elements (default: `false`);\n * normally when say `strong` is not allowed, it and it’s children are dropped,\n * with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n * Change URLs (default: `defaultUrlTransform`)\n *\n * @callback UrlTransform\n * Transform all URLs.\n * @param {string} url\n * URL.\n * @param {string} key\n * Property name (example: `'href'`).\n * @param {Readonly} node\n * Node.\n * @returns {string | null | undefined}\n * Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\n// @ts-expect-error: untyped.\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n 'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray>} */\nconst deprecations = [\n {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {\n from: 'allowNode',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowElement'\n },\n {\n from: 'allowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowedElements'\n },\n {\n from: 'disallowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'disallowedElements'\n },\n {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n {\n from: 'includeNodeIndex',\n id: 'change-includenodeindex-to-includeelementindex'\n },\n {from: 'linkTarget', id: 'remove-linktarget'},\n {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n {from: 'source', id: 'change-source-to-children', to: 'children'},\n {from: 'sourcePos', id: '#remove-sourcepos'},\n {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * @param {Readonly} options\n * Props.\n * @returns {JSX.Element}\n * React element.\n */\nexport function Markdown(options) {\n const allowedElements = options.allowedElements\n const allowElement = options.allowElement\n const children = options.children || ''\n const className = options.className\n const components = options.components\n const disallowedElements = options.disallowedElements\n const rehypePlugins = options.rehypePlugins || emptyPlugins\n const remarkPlugins = options.remarkPlugins || emptyPlugins\n const remarkRehypeOptions = options.remarkRehypeOptions\n ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n : emptyRemarkRehypeOptions\n const skipHtml = options.skipHtml\n const unwrapDisallowed = options.unwrapDisallowed\n const urlTransform = options.urlTransform || defaultUrlTransform\n\n const processor = unified()\n .use(remarkParse)\n .use(remarkPlugins)\n .use(remarkRehype, remarkRehypeOptions)\n .use(rehypePlugins)\n\n const file = new VFile()\n\n if (typeof children === 'string') {\n file.value = children\n } else {\n unreachable(\n 'Unexpected value `' +\n children +\n '` for `children` prop, expected `string`'\n )\n }\n\n if (allowedElements && disallowedElements) {\n unreachable(\n 'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n )\n }\n\n for (const deprecation of deprecations) {\n if (Object.hasOwn(options, deprecation.from)) {\n unreachable(\n 'Unexpected `' +\n deprecation.from +\n '` prop, ' +\n (deprecation.to\n ? 'use `' + deprecation.to + '` instead'\n : 'remove it') +\n ' (see <' +\n changelog +\n '#' +\n deprecation.id +\n '> for more info)'\n )\n }\n }\n\n const mdastTree = processor.parse(file)\n /** @type {Nodes} */\n let hastTree = processor.runSync(mdastTree, file)\n\n // Wrap in `div` if there’s a class name.\n if (className) {\n hastTree = {\n type: 'element',\n tagName: 'div',\n properties: {className},\n // Assume no doctypes.\n children: /** @type {Array} */ (\n hastTree.type === 'root' ? hastTree.children : [hastTree]\n )\n }\n }\n\n visit(hastTree, transform)\n\n return toJsxRuntime(hastTree, {\n Fragment,\n components,\n ignoreInvalidStyle: true,\n jsx,\n jsxs,\n passKeys: true,\n passNode: true\n })\n\n /** @type {Visitor} */\n function transform(node, index, parent) {\n if (node.type === 'raw' && parent && typeof index === 'number') {\n if (skipHtml) {\n parent.children.splice(index, 1)\n } else {\n parent.children[index] = {type: 'text', value: node.value}\n }\n\n return index\n }\n\n if (node.type === 'element') {\n /** @type {string} */\n let key\n\n for (key in urlAttributes) {\n if (\n Object.hasOwn(urlAttributes, key) &&\n Object.hasOwn(node.properties, key)\n ) {\n const value = node.properties[key]\n const test = urlAttributes[key]\n if (test === null || test.includes(node.tagName)) {\n node.properties[key] = urlTransform(String(value || ''), key, node)\n }\n }\n }\n }\n\n if (node.type === 'element') {\n let remove = allowedElements\n ? !allowedElements.includes(node.tagName)\n : disallowedElements\n ? disallowedElements.includes(node.tagName)\n : false\n\n if (!remove && allowElement && typeof index === 'number') {\n remove = !allowElement(node, index, parent)\n }\n\n if (remove && parent && typeof index === 'number') {\n if (unwrapDisallowed && node.children) {\n parent.children.splice(index, 1, ...node.children)\n } else {\n parent.children.splice(index, 1)\n }\n\n return index\n }\n }\n }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n * URL.\n * @returns {string}\n * Safe URL.\n */\nexport function defaultUrlTransform(value) {\n // Same as:\n // \n // But without the `encode` part.\n const colon = value.indexOf(':')\n const questionMark = value.indexOf('?')\n const numberSign = value.indexOf('#')\n const slash = value.indexOf('/')\n\n if (\n // If there is no protocol, it’s relative.\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash > -1 && colon > slash) ||\n (questionMark > -1 && colon > questionMark) ||\n (numberSign > -1 && colon > numberSign) ||\n // It is a protocol, it should be allowed.\n safeProtocol.test(value.slice(0, colon))\n ) {\n return value\n }\n\n return ''\n}\n"],"names":["hasOwn","Object","prototype","hasOwnProperty","toStr","toString","defineProperty","gOPD","getOwnPropertyDescriptor","isArray","arr","Array","call","isPlainObject","obj","key","hasOwnConstructor","hasIsPrototypeOf","constructor","setProperty","target","options","name","enumerable","configurable","value","newValue","writable","getProperty","module","exports","extend","src","copy","copyIsArray","clone","arguments","i","length","deep","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","trim","str","replace","style","TypeError","lineno","column","updatePosition","lines","match","lastIndexOf","position","start","line","node","Position","whitespace","this","end","source","content","errorsList","error","msg","err","Error","reason","filename","silent","push","re","m","exec","slice","comments","rules","c","comment","pos","charAt","type","declaration","prop","val","ret","property","decl","decls","declarations","HASH_UNDEFINED","MAX_SAFE_INTEGER","argsTag","boolTag","dateTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reFlags","reIsHostCtor","reIsUint","cloneableTags","freeGlobal","g","freeSelf","self","root","Function","freeExports","nodeType","freeModule","moduleExports","addMapEntry","map","pair","set","addSetEntry","add","arrayReduce","array","iteratee","accumulator","initAccum","index","isHostObject","result","e","mapToArray","size","forEach","overArg","func","transform","arg","setToArray","uid","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","keys","IE_PROTO","funcToString","objectToString","reIsNative","RegExp","Buffer","undefined","Symbol","Uint8Array","getPrototype","getPrototypeOf","objectCreate","create","propertyIsEnumerable","splice","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","Hash","entries","clear","entry","ListCache","MapCache","Stack","__data__","arrayLikeKeys","inherited","isObjectLike","isArrayLike","isArrayLikeObject","isArguments","n","baseTimes","String","skipIndexes","isIndex","assignValue","object","objValue","eq","assocIndexOf","baseClone","isDeep","isFull","customizer","stack","isObject","isArr","input","initCloneArray","copyArray","tag","getTag","isFunc","buffer","cloneBuffer","isPrototype","proto","initCloneObject","copyObject","getSymbols","copySymbols","baseAssign","cloneFunc","Ctor","cloneArrayBuffer","dataView","byteOffset","byteLength","cloneDataView","typedArray","cloneTypedArray","cloneMap","regexp","lastIndex","cloneRegExp","cloneSet","symbol","initCloneByTag","stacked","get","props","keysFunc","symbolsFunc","values","offset","arrayPush","baseGetAllKeys","getAllKeys","arrayEach","subValue","baseIsNative","isFunction","test","arrayBuffer","getMapData","data","getValue","has","pop","cache","pairs","LARGE_ARRAY_SIZE","other","ArrayBuffer","resolve","ctorString","isLength","baseKeys","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","nativeMax","Math","max","nativeMin","min","now","Date","toNumber","isSymbol","isBinary","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","remainingWait","debounced","isInvoking","leadingEdge","cancel","clearTimeout","flush","UNORDERED_COMPARE_FLAG","PARTIAL_COMPARE_FLAG","INFINITY","arrayTag","errorTag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reEscapeChar","typedArrayTags","freeProcess","process","nodeUtil","binding","nodeIsTypedArray","isTypedArray","arrayMap","arraySome","predicate","baseUnary","symbolToString","SetCache","eachFunc","fromRight","baseEach","baseFor","collection","iterable","createBaseFor","baseGet","path","isKey","castPath","toKey","baseHasIn","baseIsEqual","bitmask","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","message","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othProps","othLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","isMasked","baseIteratee","identity","srcValue","isStrictComparable","matchesStrictComparable","defaultValue","hasFunc","hasPath","hasIn","baseMatchesProperty","matchData","getMatchData","noCustomizer","baseIsMatch","baseMatches","basePropertyDeep","baseOrderBy","iteratees","orders","baseMap","comparer","sort","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","compareMultiple","stringToPath","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","arrLength","seen","arrValue","othIndex","memoize","string","baseToString","number","quote","resolver","memoized","Cache","guard","FUNC_ERROR_TEXT","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","MAX_ARRAY_LENGTH","wrapFlags","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEsTemplate","reLatin","reNoMatch","reUnescapedString","rsAstralRange","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsOptVar","rsSeq","join","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","stringEscapes","freeParseFloat","parseFloat","types","require","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","arrayAggregator","setter","arrayEachRight","arrayEvery","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayReduceRight","asciiSize","baseProperty","baseFindKey","baseFindIndex","fromIndex","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","current","baseTrim","trimmedEndIndex","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","replaceHolders","placeholder","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","split","asciiToArray","unescapeHtmlChar","_","runInContext","context","defaults","pick","idCounter","nativeObjectToString","objectCtorString","oldDash","allocUnsafe","spreadableSymbol","isConcatSpreadable","symIterator","iterator","symToStringTag","toStringTag","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","ceil","nativeFloor","floor","nativeIsFinite","isFinite","nativeJoin","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","metaMap","realNames","lodash","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","isArg","isBuff","isType","arraySample","baseRandom","arraySampleSize","shuffleSelf","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","baseAggregator","baseAt","paths","skip","lower","upper","isFlat","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getAllKeysIn","baseConformsTo","baseDelay","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseForRight","baseFunctions","baseGetTag","isOwn","unmasked","getRawTag","baseGt","baseHas","baseIntersection","arrays","caches","maxLength","Infinity","baseInvoke","parent","last","baseIsArguments","objStacked","othStacked","COMPARE_PARTIAL_FLAG","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMerge","srcIndex","mergeFunc","safeGet","isTyped","toPlainObject","baseMergeDeep","baseNth","getIteratee","basePickBy","baseSet","basePullAll","indexOf","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsUndefined","setLow","baseSortedUniq","baseToNumber","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","castRest","castSlice","id","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","isIterateeCall","createCaseFirst","methodName","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","fn","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrStacked","flatten","otherFunc","stubArray","isMaskable","stubFalse","otherArgs","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoizeCapped","charCodeAt","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","find","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bind","bindKey","WRAP_BIND_FLAG","debounce","timeWaiting","defer","delay","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","next","done","iteratorToArray","remainder","toLength","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","CLONE_DEEP_FLAG","basePick","pickBy","toPairs","toPairsIn","camelCase","word","toLowerCase","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","concat","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","filter","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escape","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduce","reduceRight","repeat","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","search","substring","global","newEnd","unescape","uniqueId","prefix","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","t","r","voidElement","attrs","children","s","a","o","l","parse","components","u","f","h","p","d","v","x","stringify","_excluded","_excluded2","ownKeys","enumerableOnly","symbols","sym","_objectSpread","getOwnPropertyDescriptors","defineProperties","hasChildren","checkLength","base","getChildren","getAsArray","nodesToString","i18nOptions","stringNode","childrenArray","keepArray","transSupportBasicHtmlNodes","transKeepBasicHtmlNodesFor","child","childIndex","isValidElement","childPropsCount","shouldKeepChild","childChildren","i18nIsDynamicList","format","renderNodes","targetString","i18n","combinedTOpts","shouldUnescape","emptyChildrenButNeedsHandling","childs","ast","opts","renderInner","rootReactNode","mappedChildren","mapAST","hasValidReactChildren","pushTranslatedJSX","inner","mem","isVoid","dummy","cloneElement","reactNode","astNode","reactNodes","newTarget","translationContent","services","interpolator","language","tmp","isValidTranslationWithChildren","isEmptyTransWithHTML","isKnownComponent","_inner","Number","createElement","_inner3","_inner4","wrapTextNodes","transWrapTextNodes","_content","Trans","_ref","i18nKey","_ref$tOptions","tOptions","ns","i18nFromProps","tFromProps","additionalProps","_ref2","useContext","i18nFromContext","defaultNSFromContext","defaultNS","k","reactI18nextOptions","react","namespaces","transEmptyNodeValue","hashTransKey","interpolationOverride","interpolation","suffix","useAsParent","defaultTransParent","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","_isNativeReflectConstruct","Super","NewTarget","SelectComponent","_class","_temp","compareOption","option","candidate","optionValue","optionLabel","label","defaultProps","allowCreateWhileLoading","createOptionPosition","formatCreateLabel","inputValue","isValidNewOption","selectValue","selectOptions","getNewOptionData","__isNew__","SelectCreatable","S","_Component","Creatable","_super","_this","select","onChange","actionMeta","_this$props","isMulti","onCreateOption","newOption","state","valueArray","newOptionData","newActionMeta","nextProps","isLoading","setState","focus","blur","_this2","ref","Component","for","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","__self","__source","q","b","$$typeof","_owner","Fragment","jsx","jsxs","__importDefault","mod","__esModule","inline_style_parser_1","styleObject","default","hasIterator","nameRe","nameReJsx","emptyOptions","empty","Schema","normal","space","definitions","normalize","Info","attribute","boolean","booleanish","overloadedBoolean","commaSeparated","spaceSeparated","commaOrSpaceSeparated","mustUseProperty","defined","powers","increment","checks","DefinedInfo","mask","super","mark","check","own","definition","info","attributes","xlink","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xml","xmlLang","xmlBase","xmlSpace","caseSensitiveTransform","caseInsensitiveTransform","xmlns","xmlnsxlink","xmlnsXLink","aria","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDescribedBy","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabel","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","role","html","acceptcharset","classname","htmlfor","httpequiv","abbr","accept","acceptCharset","accessKey","allow","allowFullScreen","allowPaymentRequest","allowUserMedia","alt","as","async","autoCapitalize","autoComplete","autoFocus","autoPlay","blocking","capture","charSet","checked","cite","className","cols","colSpan","contentEditable","controls","controlsList","coords","crossOrigin","dateTime","decoding","dirName","disabled","download","draggable","encType","enterKeyHint","fetchPriority","form","formAction","formEncType","formMethod","formNoValidate","formTarget","headers","height","hidden","href","hrefLang","htmlFor","httpEquiv","imageSizes","imageSrcSet","inert","inputMode","integrity","is","itemId","itemProp","itemRef","itemScope","itemType","kind","lang","list","loading","loop","manifest","media","minLength","multiple","muted","nonce","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforeMatch","onBeforePrint","onBeforeToggle","onBeforeUnload","onBlur","onCancel","onCanPlay","onCanPlayThrough","onClick","onClose","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onError","onFocus","onFormData","onHashChange","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLanguageChange","onLoad","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessage","onMessageError","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPlaying","onPopState","onProgress","onRateChange","onRejectionHandled","onReset","onResize","onScroll","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSubmit","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","open","optimum","ping","playsInline","popover","popoverTarget","popoverTargetAction","poster","preload","readOnly","referrerPolicy","rel","required","reversed","rows","rowSpan","sandbox","scope","scoped","seamless","selected","shadowRootDelegatesFocus","shadowRootMode","shape","sizes","slot","span","spellCheck","srcDoc","srcLang","srcSet","tabIndex","title","translate","typeMustMatch","useMap","width","align","aLink","archive","axis","background","bgColor","border","borderColor","bottomMargin","cellPadding","cellSpacing","char","charOff","classId","code","codeBase","codeType","color","declare","event","face","frame","frameBorder","hSpace","leftMargin","link","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","noWrap","profile","prompt","rev","rightMargin","scheme","scrolling","standby","summary","text","topMargin","valueType","version","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","results","security","unselectable","svg","accentHeight","alignmentBaseline","arabicForm","baselineShift","capHeight","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","fillOpacity","fillRule","floodColor","floodOpacity","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","imageRendering","letterSpacing","lightingColor","markerEnd","markerMid","markerStart","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onEnd","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","pointerEvents","renderingIntent","shapeRendering","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeOpacity","strokeWidth","textAnchor","textDecoration","textRendering","transformOrigin","typeOf","underlinePosition","underlineThickness","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","wordSpacing","writingMode","xHeight","playbackOrder","timelineBegin","about","accumulate","additive","alphabetic","amplitude","ascent","attributeName","attributeType","azimuth","bandwidth","baseFrequency","baseProfile","bbox","begin","bias","by","calcMode","clip","clipPathUnits","contentScriptType","contentStyleType","cursor","cx","cy","defaultAction","descent","diffuseConstant","direction","display","dur","dx","dy","edgeMode","editable","elevation","exponent","externalResourcesRequired","filterRes","filterUnits","focusable","focusHighlight","fr","from","fx","fy","g1","g2","glyphRef","gradientTransform","gradientUnits","handler","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in","in2","intercept","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","local","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","mode","numOctaves","observer","opacity","order","orient","orientation","origin","overflow","overlay","pathLength","patternContentUnits","patternTransform","patternUnits","phase","pitch","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","propagate","radius","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","resource","restart","rotate","rx","ry","scale","seed","side","slope","snapshotTime","specularConstant","specularExponent","spreadMethod","spacing","startOffset","stdDeviation","stemh","stemv","stitchTiles","stroke","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","targetX","targetY","textLength","transformBehavior","to","u1","u2","unicode","viewBox","viewTarget","visibility","widths","x1","x2","xChannelSelector","y","y1","y2","yChannelSelector","z","zoomAndPan","valid","dash","cap","kebab","$0","camelcase","hastToReact","pointEnd","point","pointStart","stringifyPosition","VFileMessage","causeOrReason","optionsOrParentOrPlace","legacyCause","place","ancestors","cause","ruleId","fatal","file","actual","expected","note","url","emptyMap","dashSomething","tableElements","tableCellElement","docs","toJsxRuntime","tree","filePath","development","jsxDEV","isStaticChildren","columnNumber","fileName","lineNumber","developmentCreate","productionCreate","elementAttributeNameCase","evaluater","createEvaluater","ignoreInvalidStyle","passKeys","passNode","schema","stylePropertyNameCase","tableCellAlignToStyle","one","parentSchema","tagName","findComponentFromName","alignValue","createProperty","createElementProps","createChildren","thing","addNode","addChildren","estree","expression","body","evaluateExpression","crashEstree","mdxExpression","objectExpression","argument","createJsxElementProps","mdxJsxElement","evaluateProgram","mdxEsm","countsByName","Type","dashes","padRight","padLeft","replacer","toCamel","parseStyle","domCasing","cssCasing","transformStyleToCssCasing","transformStylesToCssCasing","allowExpression","identifiers","Boolean","optional","toDash","$1","urlAttributes","icon","includeImageAlt","includeHtml","items","parameters","chunkStart","unshift","SpliceBuffer","left","right","RangeError","shift","setCursor","stop","POSITIVE_INFINITY","deleteCount","trunc","removed","chunkedPush","item","pushMany","unshiftMany","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","events","_tokenizer","_isInFirstContentOfListItem","contentType","subcontent","_container","eventIndex","token","startPosition","startPositions","tokenizer","parser","childEvents","gaps","stream","adjust","breaks","sliceStream","defineSkip","_gfmTasklistFirstContentOfListItem","write","syntaxExtension","all","extension","hook","constructs","existing","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","fromCharCode","factorySpace","effects","ok","enter","consume","exit","tokenize","contentStart","contentInitial","lineStart","childFlow","childToken","lineStartOffset","continued","containerState","continuation","documentContinue","checkNewContainers","_closeFlow","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","currentConstruct","concrete","flowStart","interrupt","_gfmTableDynamicInterruptHack","containerConstruct","thereIsANewContainer","thereIsNoNewContainer","lazy","containerContinue","flowContinue","writeToChild","eof","nok","document","disable","null","blankLine","chunkInside","contentEnd","continuationConstruct","contentContinue","prefixed","sliceSerialize","flowInitial","afterConstruct","resolveAll","createResolver","initializeFactory","field","notText","atBreak","resolveAllLineSuffixes","extraResolver","chunks","tabs","bufferIndex","_index","_bufferIndex","called","createTokenizer","initialize","columnStart","resolveAllConstructs","consumed","accountForPotentialSkip","fields","constructFactory","addResult","onsuccessfulcheck","expandTabs","atTab","serializeChunks","main","expectedCode","startIndex","startBufferIndex","endIndex","endBufferIndex","sliceChunks","chunkIndex","go","restore","onreturn","returnState","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","def","handleMapOfConstructs","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","store","resolveTo","thematicBreak","marker","sequence","initialSize","atMarker","inside","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","initialBlankLine","notBlank","furtherBlankLines","notInCurrentItem","indentConstruct","blockQuote","contBefore","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","factoryWhitespace","normalizeIdentifier","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","titleBefore","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","codeIndented","afterPrefix","furtherStart","headingAtx","sequenceOpen","sequenceFurther","setextUnderline","paragraph","heading","htmlBlockNames","htmlRawNames","htmlFlow","closingTag","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationStart","blankLineBefore","continuationAfter","nonLazyContinuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","nonLazyContinuation","codeFenced","closeStart","startBefore","beforeSequenceClose","sequenceClose","sizeOpen","sequenceCloseAfter","initialPrefix","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","decodeNamedCharacterReference","characterReference","innerHTML","textContent","numeric","characterEscape","lineEnding","labelEnd","labelStart","_balanced","_inactive","labelEndNok","resourceConstruct","labelEndOk","referenceFullConstruct","referenceNotFull","referenceCollapsedConstruct","close","insideSpan","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFullAfter","referenceFullMissing","referenceCollapsedOpen","labelStartImage","classifyCharacter","attention","attentionMarkers","_open","_close","openingSequence","closingSequence","use","nextEvents","movePoint","autolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","htmlText","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelStartLink","hardBreakEscape","codeText","between","tailExitIndex","headEnterIndex","extensions","combineExtensions","decodeNumericCharacterReference","fromCodePoint","characterEscapeOrReference","decode","$2","hex","fromMarkdown","encoding","config","canContainEols","opener","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreak","hardBreakTrailing","htmlFlowData","htmlTextData","image","listItem","listItemValue","onenterlistitemvalue","listOrdered","onenterlistordered","listUnordered","onenterreference","referenceString","resourceDestinationString","resourceTitleString","setextHeading","strong","closer","atxHeadingSequence","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","characterEscapeValue","onexitdata","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","onexitcharacterreferencevalue","onexitcodefenced","codeFencedFence","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","labelText","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","setextHeadingLineSequence","onexitsetextheadinglinesequence","setextHeadingText","onexitsetextheadingtext","configure","mdastExtensions","compile","tokenStack","resume","listStack","prepareList","defaultOnError","firstBlankLineIndex","containerBalance","listSpread","tailIndex","tailEvent","_spread","and","errorHandler","onExitError","expectingFirstListItemValue","flowCodeInside","setextHeadingSlurpLineEnding","codePointAt","siblings","atHardBreak","inReference","referenceType","ancestor","decodeString","fragment","characterReferenceType","ordered","compiler","postprocess","atCarriageReturn","endPosition","TextDecoder","preprocess","combined","remarkParse","doc","env","globalThis","deserialize","serialized","$","out","unpair","flags","BigInt","deserializer","EMPTY","asString","shouldSkip","TYPE","serialize","json","lossy","strict","toISOString","serializer","structuredClone","any","normalizeUri","encodeURIComponent","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","castFactory","tests","anyFactory","checkAsRecord","nodeAsRecord","propsFactory","typeFactory","testFunction","looksLikeANode","CONTINUE","EXIT","SKIP","visitParents","visitor","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","revert","subtype","contents","listItemLoose","tab","trimLines","trimLine","blockquote","patch","applyData","break","delete","footnoteReference","clobberPrefix","safeId","footnoteOrder","counter","reuseCounter","footnoteCounts","dataFootnoteRef","sup","allowDangerousHtml","imageReference","definitionById","inlineCode","linkReference","loose","listLoose","table","firstRow","tableContent","tableCell","tableRow","cellIndex","cells","cell","toml","ignore","yaml","footnoteDefinition","hName","hChildren","hProperties","defaultUnknownHandler","nodes","trimMarkdownSpaceStart","toHast","footnoteById","handlers","handle","passThrough","shallow","unknownHandler","createState","foot","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","dataFootnoteBackref","tailTail","dataFootnotes","footer","remarkRehype","destination","hastTree","run","bail","trough","fns","pipeline","middlewareIndex","output","middleware","fnExpectsCallback","then","middelware","basename","ext","assertPath","seenNonSlash","firstNonSlashEnd","extIndex","dirname","unmatchedSlash","extname","startPart","startDot","preDotState","segments","joined","absolute","allowAboveRoot","lastSlashIndex","lastSegmentLength","lastSlash","dots","normalizeString","sep","JSON","proc","cwd","isUrl","fileUrlOrPath","protocol","auth","urlToPath","URL","hostname","pathname","third","decodeURIComponent","getPathFromURLPosix","VFile","isUint8Array","history","messages","stored","assertNonEmpty","assertPart","stem","fail","part","CallableInstance","setPrototypeOf","names","getOwnPropertyNames","descriptor","Processor","Compiler","Parser","attachers","freezeIndex","frozen","namespace","transformers","attacher","assertUnfrozen","freeze","transformer","realFile","vfile","assertParser","assertCompiler","executor","parseTree","realDone","compileTree","compileResult","processSync","complete","assertDone","assertNode","outputTree","resultingTree","runSync","addPlugin","addList","addPreset","plugin","plugins","entryIndex","primary","currentPrimary","unified","asyncName","looksLikeAVFile","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","allowedElements","allowElement","disallowedElements","rehypePlugins","remarkPlugins","remarkRehypeOptions","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","processor","deprecation","mdastTree","colon","questionMark","numberSign"],"sourceRoot":""}