{"version":3,"file":"bundle.js","sources":["../../node_modules/svelte/internal.mjs","../../node_modules/d3-array/src/ascending.js","../../node_modules/d3-array/src/bisector.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/number.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-array/src/range.js","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-selection/src/namespaces.js","../../node_modules/d3-selection/src/namespace.js","../../node_modules/d3-selection/src/creator.js","../../node_modules/d3-selection/src/selector.js","../../node_modules/d3-selection/src/array.js","../../node_modules/d3-selection/src/selectorAll.js","../../node_modules/d3-selection/src/matcher.js","../../node_modules/d3-selection/src/selection/selectChild.js","../../node_modules/d3-selection/src/selection/selectChildren.js","../../node_modules/d3-selection/src/selection/sparse.js","../../node_modules/d3-selection/src/selection/enter.js","../../node_modules/d3-selection/src/constant.js","../../node_modules/d3-selection/src/selection/data.js","../../node_modules/d3-selection/src/selection/sort.js","../../node_modules/d3-selection/src/selection/attr.js","../../node_modules/d3-selection/src/window.js","../../node_modules/d3-selection/src/selection/style.js","../../node_modules/d3-selection/src/selection/property.js","../../node_modules/d3-selection/src/selection/classed.js","../../node_modules/d3-selection/src/selection/text.js","../../node_modules/d3-selection/src/selection/html.js","../../node_modules/d3-selection/src/selection/raise.js","../../node_modules/d3-selection/src/selection/lower.js","../../node_modules/d3-selection/src/selection/insert.js","../../node_modules/d3-selection/src/selection/remove.js","../../node_modules/d3-selection/src/selection/clone.js","../../node_modules/d3-selection/src/selection/on.js","../../node_modules/d3-selection/src/selection/dispatch.js","../../node_modules/d3-selection/src/selection/index.js","../../node_modules/d3-selection/src/select.js","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-selection/src/selection/select.js","../../node_modules/d3-selection/src/selection/selectAll.js","../../node_modules/d3-selection/src/selection/filter.js","../../node_modules/d3-selection/src/selection/exit.js","../../node_modules/d3-selection/src/selection/join.js","../../node_modules/d3-selection/src/selection/merge.js","../../node_modules/d3-selection/src/selection/order.js","../../node_modules/d3-selection/src/selection/call.js","../../node_modules/d3-selection/src/selection/nodes.js","../../node_modules/d3-selection/src/selection/node.js","../../node_modules/d3-selection/src/selection/size.js","../../node_modules/d3-selection/src/selection/empty.js","../../node_modules/d3-selection/src/selection/each.js","../../node_modules/d3-selection/src/selection/append.js","../../node_modules/d3-selection/src/selection/datum.js","../../node_modules/d3-selection/src/selection/iterator.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/numberArray.js","../../node_modules/d3-interpolate/src/array.js","../../node_modules/d3-interpolate/src/date.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/object.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-interpolate/src/transform/decompose.js","../../node_modules/d3-interpolate/src/transform/parse.js","../../node_modules/d3-interpolate/src/transform/index.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-timer/src/timeout.js","../../node_modules/d3-transition/src/transition/schedule.js","../../node_modules/d3-transition/src/transition/tween.js","../../node_modules/d3-transition/src/transition/interpolate.js","../../node_modules/d3-transition/src/transition/attr.js","../../node_modules/d3-transition/src/transition/attrTween.js","../../node_modules/d3-transition/src/transition/delay.js","../../node_modules/d3-transition/src/transition/duration.js","../../node_modules/d3-transition/src/transition/ease.js","../../node_modules/d3-transition/src/transition/on.js","../../node_modules/d3-transition/src/transition/selection.js","../../node_modules/d3-transition/src/transition/style.js","../../node_modules/d3-transition/src/transition/styleTween.js","../../node_modules/d3-transition/src/transition/textTween.js","../../node_modules/d3-transition/src/transition/index.js","../../node_modules/d3-transition/src/transition/select.js","../../node_modules/d3-transition/src/transition/selectAll.js","../../node_modules/d3-transition/src/transition/filter.js","../../node_modules/d3-transition/src/transition/merge.js","../../node_modules/d3-transition/src/transition/transition.js","../../node_modules/d3-transition/src/transition/text.js","../../node_modules/d3-transition/src/transition/remove.js","../../node_modules/d3-transition/src/transition/easeVarying.js","../../node_modules/d3-transition/src/transition/end.js","../../node_modules/d3-transition/src/selection/transition.js","../../node_modules/d3-ease/src/cubic.js","../../node_modules/d3-transition/src/selection/index.js","../../node_modules/d3-transition/src/selection/interrupt.js","../../node_modules/d3-transition/src/interrupt.js","../../node_modules/d3-dsv/src/dsv.js","../../node_modules/d3-dsv/src/csv.js","../../node_modules/d3-fetch/src/text.js","../../node_modules/d3-fetch/src/dsv.js","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-scale/src/init.js","../../node_modules/d3-scale/src/ordinal.js","../../node_modules/d3-scale/src/band.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-format/src/precisionRound.js","../../node_modules/d3-format/src/precisionFixed.js","../../node_modules/d3-scale/src/linear.js","../../src/components/TitleDropdown.svelte","../../src/components/GraphTitle.svelte","../../src/components/GraphMarker.svelte","../../src/components/GraphPointsGroup.svelte","../../src/components/HorizontalGraphPoints.svelte","../../src/components/Modal.svelte","../../node_modules/lodash/lodash.js","../../src/utils/constants.js","../../src/utils/utils.js","../../src/components/HorizontalGraph.svelte","../../src/components/VerticalGraph.svelte","../../src/components/Dropdown.svelte","../../src/components/HorizontalButtonSelection.svelte","../../src/components/HorizontalTextSelection.svelte","../../src/components/InfoIcon.svelte","../../src/components/SelectionTitle.svelte","../../src/components/IconSelect.svelte","../../src/components/ToggleSlider.svelte","../../src/components/VizTopControls.svelte","../../src/components/Visualization.svelte","../../src/utils/load_data.js","../../src/utils/load_meta_data.js","../../src/main.js"],"sourcesContent":["function noop() {}\n\nconst identity = x => x;\n\nfunction assign(tar, src) {\n\tfor (const k in src) tar[k] = src[k];\n\treturn tar;\n}\n\nfunction is_promise(value) {\n\treturn value && typeof value.then === 'function';\n}\n\nfunction add_location(element, file, line, column, char) {\n\telement.__svelte_meta = {\n\t\tloc: { file, line, column, char }\n\t};\n}\n\nfunction run(fn) {\n\treturn fn();\n}\n\nfunction blank_object() {\n\treturn Object.create(null);\n}\n\nfunction run_all(fns) {\n\tfns.forEach(run);\n}\n\nfunction is_function(thing) {\n\treturn typeof thing === 'function';\n}\n\nfunction safe_not_equal(a, b) {\n\treturn a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\n\nfunction not_equal(a, b) {\n\treturn a != a ? b == b : a !== b;\n}\n\nfunction validate_store(store, name) {\n\tif (!store || typeof store.subscribe !== 'function') {\n\t\tthrow new Error(`'${name}' is not a store with a 'subscribe' method`);\n\t}\n}\n\nfunction subscribe(component, store, callback) {\n\tcomponent.$$.on_destroy.push(store.subscribe(callback));\n}\n\nfunction create_slot(definition, ctx, fn) {\n\tif (definition) {\n\t\tconst slot_ctx = get_slot_context(definition, ctx, fn);\n\t\treturn definition[0](slot_ctx);\n\t}\n}\n\nfunction get_slot_context(definition, ctx, fn) {\n\treturn definition[1]\n\t\t? assign({}, assign(ctx.$$scope.ctx, definition[1](fn ? fn(ctx) : {})))\n\t\t: ctx.$$scope.ctx;\n}\n\nfunction get_slot_changes(definition, ctx, changed, fn) {\n\treturn definition[1]\n\t\t? assign({}, assign(ctx.$$scope.changed || {}, definition[1](fn ? fn(changed) : {})))\n\t\t: ctx.$$scope.changed || {};\n}\n\nfunction exclude_internal_props(props) {\n\tconst result = {};\n\tfor (const k in props) if (k[0] !== '$') result[k] = props[k];\n\treturn result;\n}\n\nconst tasks = new Set();\nlet running = false;\n\nfunction run_tasks() {\n\ttasks.forEach(task => {\n\t\tif (!task[0](window.performance.now())) {\n\t\t\ttasks.delete(task);\n\t\t\ttask[1]();\n\t\t}\n\t});\n\n\trunning = tasks.size > 0;\n\tif (running) requestAnimationFrame(run_tasks);\n}\n\nfunction clear_loops() {\n\t// for testing...\n\ttasks.forEach(task => tasks.delete(task));\n\trunning = false;\n}\n\nfunction loop(fn) {\n\tlet task;\n\n\tif (!running) {\n\t\trunning = true;\n\t\trequestAnimationFrame(run_tasks);\n\t}\n\n\treturn {\n\t\tpromise: new Promise(fulfil => {\n\t\t\ttasks.add(task = [fn, fulfil]);\n\t\t}),\n\t\tabort() {\n\t\t\ttasks.delete(task);\n\t\t}\n\t};\n}\n\nfunction append(target, node) {\n\ttarget.appendChild(node);\n}\n\nfunction insert(target, node, anchor) {\n\ttarget.insertBefore(node, anchor);\n}\n\nfunction detach(node) {\n\tnode.parentNode.removeChild(node);\n}\n\nfunction detach_between(before, after) {\n\twhile (before.nextSibling && before.nextSibling !== after) {\n\t\tbefore.parentNode.removeChild(before.nextSibling);\n\t}\n}\n\nfunction detach_before(after) {\n\twhile (after.previousSibling) {\n\t\tafter.parentNode.removeChild(after.previousSibling);\n\t}\n}\n\nfunction detach_after(before) {\n\twhile (before.nextSibling) {\n\t\tbefore.parentNode.removeChild(before.nextSibling);\n\t}\n}\n\nfunction destroy_each(iterations, detaching) {\n\tfor (let i = 0; i < iterations.length; i += 1) {\n\t\tif (iterations[i]) iterations[i].d(detaching);\n\t}\n}\n\nfunction element(name) {\n\treturn document.createElement(name);\n}\n\nfunction svg_element(name) {\n\treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\nfunction text(data) {\n\treturn document.createTextNode(data);\n}\n\nfunction space() {\n\treturn text(' ');\n}\n\nfunction empty() {\n\treturn text('');\n}\n\nfunction listen(node, event, handler, options) {\n\tnode.addEventListener(event, handler, options);\n\treturn () => node.removeEventListener(event, handler, options);\n}\n\nfunction prevent_default(fn) {\n\treturn function(event) {\n\t\tevent.preventDefault();\n\t\treturn fn.call(this, event);\n\t};\n}\n\nfunction stop_propagation(fn) {\n\treturn function(event) {\n\t\tevent.stopPropagation();\n\t\treturn fn.call(this, event);\n\t};\n}\n\nfunction attr(node, attribute, value) {\n\tif (value == null) node.removeAttribute(attribute);\n\telse node.setAttribute(attribute, value);\n}\n\nfunction set_attributes(node, attributes) {\n\tfor (const key in attributes) {\n\t\tif (key === 'style') {\n\t\t\tnode.style.cssText = attributes[key];\n\t\t} else if (key in node) {\n\t\t\tnode[key] = attributes[key];\n\t\t} else {\n\t\t\tattr(node, key, attributes[key]);\n\t\t}\n\t}\n}\n\nfunction set_custom_element_data(node, prop, value) {\n\tif (prop in node) {\n\t\tnode[prop] = value;\n\t} else {\n\t\tattr(node, prop, value);\n\t}\n}\n\nfunction xlink_attr(node, attribute, value) {\n\tnode.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\n\nfunction get_binding_group_value(group) {\n\tconst value = [];\n\tfor (let i = 0; i < group.length; i += 1) {\n\t\tif (group[i].checked) value.push(group[i].__value);\n\t}\n\treturn value;\n}\n\nfunction to_number(value) {\n\treturn value === '' ? undefined : +value;\n}\n\nfunction time_ranges_to_array(ranges) {\n\tconst array = [];\n\tfor (let i = 0; i < ranges.length; i += 1) {\n\t\tarray.push({ start: ranges.start(i), end: ranges.end(i) });\n\t}\n\treturn array;\n}\n\nfunction children(element) {\n\treturn Array.from(element.childNodes);\n}\n\nfunction claim_element(nodes, name, attributes, svg) {\n\tfor (let i = 0; i < nodes.length; i += 1) {\n\t\tconst node = nodes[i];\n\t\tif (node.nodeName === name) {\n\t\t\tfor (let j = 0; j < node.attributes.length; j += 1) {\n\t\t\t\tconst attribute = node.attributes[j];\n\t\t\t\tif (!attributes[attribute.name]) node.removeAttribute(attribute.name);\n\t\t\t}\n\t\t\treturn nodes.splice(i, 1)[0]; // TODO strip unwanted attributes\n\t\t}\n\t}\n\n\treturn svg ? svg_element(name) : element(name);\n}\n\nfunction claim_text(nodes, data) {\n\tfor (let i = 0; i < nodes.length; i += 1) {\n\t\tconst node = nodes[i];\n\t\tif (node.nodeType === 3) {\n\t\t\tnode.data = data;\n\t\t\treturn nodes.splice(i, 1)[0];\n\t\t}\n\t}\n\n\treturn text(data);\n}\n\nfunction set_data(text, data) {\n\tdata = '' + data;\n\tif (text.data !== data) text.data = data;\n}\n\nfunction set_input_type(input, type) {\n\ttry {\n\t\tinput.type = type;\n\t} catch (e) {\n\t\t// do nothing\n\t}\n}\n\nfunction set_style(node, key, value) {\n\tnode.style.setProperty(key, value);\n}\n\nfunction select_option(select, value) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\n\t\tif (option.__value === value) {\n\t\t\toption.selected = true;\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nfunction select_options(select, value) {\n\tfor (let i = 0; i < select.options.length; i += 1) {\n\t\tconst option = select.options[i];\n\t\toption.selected = ~value.indexOf(option.__value);\n\t}\n}\n\nfunction select_value(select) {\n\tconst selected_option = select.querySelector(':checked') || select.options[0];\n\treturn selected_option && selected_option.__value;\n}\n\nfunction select_multiple_value(select) {\n\treturn [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\n\nfunction add_resize_listener(element, fn) {\n\tif (getComputedStyle(element).position === 'static') {\n\t\telement.style.position = 'relative';\n\t}\n\n\tconst object = document.createElement('object');\n\tobject.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1;');\n\tobject.type = 'text/html';\n\n\tlet win;\n\n\tobject.onload = () => {\n\t\twin = object.contentDocument.defaultView;\n\t\twin.addEventListener('resize', fn);\n\t};\n\n\tif (/Trident/.test(navigator.userAgent)) {\n\t\telement.appendChild(object);\n\t\tobject.data = 'about:blank';\n\t} else {\n\t\tobject.data = 'about:blank';\n\t\telement.appendChild(object);\n\t}\n\n\treturn {\n\t\tcancel: () => {\n\t\t\twin && win.removeEventListener && win.removeEventListener('resize', fn);\n\t\t\telement.removeChild(object);\n\t\t}\n\t};\n}\n\nfunction toggle_class(element, name, toggle) {\n\telement.classList[toggle ? 'add' : 'remove'](name);\n}\n\nfunction custom_event(type, detail) {\n\tconst e = document.createEvent('CustomEvent');\n\te.initCustomEvent(type, false, false, detail);\n\treturn e;\n}\n\nlet stylesheet;\nlet active = 0;\nlet current_rules = {};\n\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n\tlet hash = 5381;\n\tlet i = str.length;\n\n\twhile (i--) hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n\treturn hash >>> 0;\n}\n\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n\tconst step = 16.666 / duration;\n\tlet keyframes = '{\\n';\n\n\tfor (let p = 0; p <= 1; p += step) {\n\t\tconst t = a + (b - a) * ease(p);\n\t\tkeyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n\t}\n\n\tconst rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n\tconst name = `__svelte_${hash(rule)}_${uid}`;\n\n\tif (!current_rules[name]) {\n\t\tif (!stylesheet) {\n\t\t\tconst style = element('style');\n\t\t\tdocument.head.appendChild(style);\n\t\t\tstylesheet = style.sheet;\n\t\t}\n\n\t\tcurrent_rules[name] = true;\n\t\tstylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n\t}\n\n\tconst animation = node.style.animation || '';\n\tnode.style.animation = `${animation ? `${animation}, ` : ``}${name} ${duration}ms linear ${delay}ms 1 both`;\n\n\tactive += 1;\n\treturn name;\n}\n\nfunction delete_rule(node, name) {\n\tnode.style.animation = (node.style.animation || '')\n\t\t.split(', ')\n\t\t.filter(name\n\t\t\t? anim => anim.indexOf(name) < 0 // remove specific animation\n\t\t\t: anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n\t\t)\n\t\t.join(', ');\n\n\tif (name && !--active) clear_rules();\n}\n\nfunction clear_rules() {\n\trequestAnimationFrame(() => {\n\t\tif (active) return;\n\t\tlet i = stylesheet.cssRules.length;\n\t\twhile (i--) stylesheet.deleteRule(i);\n\t\tcurrent_rules = {};\n\t});\n}\n\nfunction create_animation(node, from, fn, params) {\n\tif (!from) return noop;\n\n\tconst to = node.getBoundingClientRect();\n\tif (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom) return noop;\n\n\tconst {\n\t\tdelay = 0,\n\t\tduration = 300,\n\t\teasing = identity,\n\t\tstart: start_time = window.performance.now() + delay,\n\t\tend = start_time + duration,\n\t\ttick = noop,\n\t\tcss\n\t} = fn(node, { from, to }, params);\n\n\tlet running = true;\n\tlet started = false;\n\tlet name;\n\n\tconst css_text = node.style.cssText;\n\n\tfunction start() {\n\t\tif (css) {\n\t\t\tif (delay) node.style.cssText = css_text; // TODO create delayed animation instead?\n\t\t\tname = create_rule(node, 0, 1, duration, 0, easing, css);\n\t\t}\n\n\t\tstarted = true;\n\t}\n\n\tfunction stop() {\n\t\tif (css) delete_rule(node, name);\n\t\trunning = false;\n\t}\n\n\tloop(now => {\n\t\tif (!started && now >= start_time) {\n\t\t\tstart();\n\t\t}\n\n\t\tif (started && now >= end) {\n\t\t\ttick(1, 0);\n\t\t\tstop();\n\t\t}\n\n\t\tif (!running) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (started) {\n\t\t\tconst p = now - start_time;\n\t\t\tconst t = 0 + 1 * easing(p / duration);\n\t\t\ttick(t, 1 - t);\n\t\t}\n\n\t\treturn true;\n\t});\n\n\tif (delay) {\n\t\tif (css) node.style.cssText += css(0, 1);\n\t} else {\n\t\tstart();\n\t}\n\n\ttick(0, 1);\n\n\treturn stop;\n}\n\nfunction fix_position(node) {\n\tconst style = getComputedStyle(node);\n\n\tif (style.position !== 'absolute' && style.position !== 'fixed') {\n\t\tconst { width, height } = style;\n\t\tconst a = node.getBoundingClientRect();\n\t\tnode.style.position = 'absolute';\n\t\tnode.style.width = width;\n\t\tnode.style.height = height;\n\t\tconst b = node.getBoundingClientRect();\n\n\t\tif (a.left !== b.left || a.top !== b.top) {\n\t\t\tconst style = getComputedStyle(node);\n\t\t\tconst transform = style.transform === 'none' ? '' : style.transform;\n\n\t\t\tnode.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n\t\t}\n\t}\n}\n\nlet current_component;\n\nfunction set_current_component(component) {\n\tcurrent_component = component;\n}\n\nfunction get_current_component() {\n\tif (!current_component) throw new Error(`Function called outside component initialization`);\n\treturn current_component;\n}\n\nfunction beforeUpdate(fn) {\n\tget_current_component().$$.before_render.push(fn);\n}\n\nfunction onMount(fn) {\n\tget_current_component().$$.on_mount.push(fn);\n}\n\nfunction afterUpdate(fn) {\n\tget_current_component().$$.after_render.push(fn);\n}\n\nfunction onDestroy(fn) {\n\tget_current_component().$$.on_destroy.push(fn);\n}\n\nfunction createEventDispatcher() {\n\tconst component = current_component;\n\n\treturn (type, detail) => {\n\t\tconst callbacks = component.$$.callbacks[type];\n\n\t\tif (callbacks) {\n\t\t\t// TODO are there situations where events could be dispatched\n\t\t\t// in a server (non-DOM) environment?\n\t\t\tconst event = custom_event(type, detail);\n\t\t\tcallbacks.slice().forEach(fn => {\n\t\t\t\tfn.call(component, event);\n\t\t\t});\n\t\t}\n\t};\n}\n\nfunction setContext(key, context) {\n\tget_current_component().$$.context.set(key, context);\n}\n\nfunction getContext(key) {\n\treturn get_current_component().$$.context.get(key);\n}\n\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n\tconst callbacks = component.$$.callbacks[event.type];\n\n\tif (callbacks) {\n\t\tcallbacks.slice().forEach(fn => fn(event));\n\t}\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\n\nlet update_promise;\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\n\nfunction schedule_update() {\n\tif (!update_promise) {\n\t\tupdate_promise = Promise.resolve();\n\t\tupdate_promise.then(flush);\n\t}\n}\n\nfunction tick() {\n\tschedule_update();\n\treturn update_promise;\n}\n\nfunction add_binding_callback(fn) {\n\tbinding_callbacks.push(fn);\n}\n\nfunction add_render_callback(fn) {\n\trender_callbacks.push(fn);\n}\n\nfunction add_flush_callback(fn) {\n\tflush_callbacks.push(fn);\n}\n\nfunction flush() {\n\tconst seen_callbacks = new Set();\n\n\tdo {\n\t\t// first, call beforeUpdate functions\n\t\t// and update components\n\t\twhile (dirty_components.length) {\n\t\t\tconst component = dirty_components.shift();\n\t\t\tset_current_component(component);\n\t\t\tupdate(component.$$);\n\t\t}\n\n\t\twhile (binding_callbacks.length) binding_callbacks.shift()();\n\n\t\t// then, once components are updated, call\n\t\t// afterUpdate functions. This may cause\n\t\t// subsequent updates...\n\t\twhile (render_callbacks.length) {\n\t\t\tconst callback = render_callbacks.pop();\n\t\t\tif (!seen_callbacks.has(callback)) {\n\t\t\t\tcallback();\n\n\t\t\t\t// ...so guard against infinite loops\n\t\t\t\tseen_callbacks.add(callback);\n\t\t\t}\n\t\t}\n\t} while (dirty_components.length);\n\n\twhile (flush_callbacks.length) {\n\t\tflush_callbacks.pop()();\n\t}\n\n\tupdate_promise = null;\n}\n\nfunction update($$) {\n\tif ($$.fragment) {\n\t\t$$.update($$.dirty);\n\t\trun_all($$.before_render);\n\t\t$$.fragment.p($$.dirty, $$.ctx);\n\t\t$$.dirty = null;\n\n\t\t$$.after_render.forEach(add_render_callback);\n\t}\n}\n\nlet promise;\n\nfunction wait() {\n\tif (!promise) {\n\t\tpromise = Promise.resolve();\n\t\tpromise.then(() => {\n\t\t\tpromise = null;\n\t\t});\n\t}\n\n\treturn promise;\n}\n\nfunction dispatch(node, direction, kind) {\n\tnode.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\n\nlet outros;\n\nfunction group_outros() {\n\toutros = {\n\t\tremaining: 0,\n\t\tcallbacks: []\n\t};\n}\n\nfunction check_outros() {\n\tif (!outros.remaining) {\n\t\trun_all(outros.callbacks);\n\t}\n}\n\nfunction on_outro(callback) {\n\toutros.callbacks.push(callback);\n}\n\nfunction create_in_transition(node, fn, params) {\n\tlet config = fn(node, params);\n\tlet running = false;\n\tlet animation_name;\n\tlet task;\n\tlet uid = 0;\n\n\tfunction cleanup() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = identity,\n\t\t\ttick: tick$$1 = noop,\n\t\t\tcss\n\t\t} = config;\n\n\t\tif (css) animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n\t\ttick$$1(0, 1);\n\n\t\tconst start_time = window.performance.now() + delay;\n\t\tconst end_time = start_time + duration;\n\n\t\tif (task) task.abort();\n\t\trunning = true;\n\n\t\ttask = loop(now => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick$$1(1, 0);\n\t\t\t\t\tcleanup();\n\t\t\t\t\treturn running = false;\n\t\t\t\t}\n\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick$$1(t, 1 - t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn running;\n\t\t});\n\t}\n\n\tlet started = false;\n\n\treturn {\n\t\tstart() {\n\t\t\tif (started) return;\n\n\t\t\tdelete_rule(node);\n\n\t\t\tif (typeof config === 'function') {\n\t\t\t\tconfig = config();\n\t\t\t\twait().then(go);\n\t\t\t} else {\n\t\t\t\tgo();\n\t\t\t}\n\t\t},\n\n\t\tinvalidate() {\n\t\t\tstarted = false;\n\t\t},\n\n\t\tend() {\n\t\t\tif (running) {\n\t\t\t\tcleanup();\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction create_out_transition(node, fn, params) {\n\tlet config = fn(node, params);\n\tlet running = true;\n\tlet animation_name;\n\n\tconst group = outros;\n\n\tgroup.remaining += 1;\n\n\tfunction go() {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = identity,\n\t\t\ttick: tick$$1 = noop,\n\t\t\tcss\n\t\t} = config;\n\n\t\tif (css) animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n\n\t\tconst start_time = window.performance.now() + delay;\n\t\tconst end_time = start_time + duration;\n\n\t\tloop(now => {\n\t\t\tif (running) {\n\t\t\t\tif (now >= end_time) {\n\t\t\t\t\ttick$$1(0, 1);\n\n\t\t\t\t\tif (!--group.remaining) {\n\t\t\t\t\t\t// this will result in `end()` being called,\n\t\t\t\t\t\t// so we don't need to clean up here\n\t\t\t\t\t\trun_all(group.callbacks);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tif (now >= start_time) {\n\t\t\t\t\tconst t = easing((now - start_time) / duration);\n\t\t\t\t\ttick$$1(1 - t, t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn running;\n\t\t});\n\t}\n\n\tif (typeof config === 'function') {\n\t\twait().then(() => {\n\t\t\tconfig = config();\n\t\t\tgo();\n\t\t});\n\t} else {\n\t\tgo();\n\t}\n\n\treturn {\n\t\tend(reset) {\n\t\t\tif (reset && config.tick) {\n\t\t\t\tconfig.tick(1, 0);\n\t\t\t}\n\n\t\t\tif (running) {\n\t\t\t\tif (animation_name) delete_rule(node, animation_name);\n\t\t\t\trunning = false;\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction create_bidirectional_transition(node, fn, params, intro) {\n\tlet config = fn(node, params);\n\n\tlet t = intro ? 0 : 1;\n\n\tlet running_program = null;\n\tlet pending_program = null;\n\tlet animation_name = null;\n\n\tfunction clear_animation() {\n\t\tif (animation_name) delete_rule(node, animation_name);\n\t}\n\n\tfunction init(program, duration) {\n\t\tconst d = program.b - t;\n\t\tduration *= Math.abs(d);\n\n\t\treturn {\n\t\t\ta: t,\n\t\t\tb: program.b,\n\t\t\td,\n\t\t\tduration,\n\t\t\tstart: program.start,\n\t\t\tend: program.start + duration,\n\t\t\tgroup: program.group\n\t\t};\n\t}\n\n\tfunction go(b) {\n\t\tconst {\n\t\t\tdelay = 0,\n\t\t\tduration = 300,\n\t\t\teasing = identity,\n\t\t\ttick: tick$$1 = noop,\n\t\t\tcss\n\t\t} = config;\n\n\t\tconst program = {\n\t\t\tstart: window.performance.now() + delay,\n\t\t\tb\n\t\t};\n\n\t\tif (!b) {\n\t\t\tprogram.group = outros;\n\t\t\toutros.remaining += 1;\n\t\t}\n\n\t\tif (running_program) {\n\t\t\tpending_program = program;\n\t\t} else {\n\t\t\t// if this is an intro, and there's a delay, we need to do\n\t\t\t// an initial tick and/or apply CSS animation immediately\n\t\t\tif (css) {\n\t\t\t\tclear_animation();\n\t\t\t\tanimation_name = create_rule(node, t, b, duration, delay, easing, css);\n\t\t\t}\n\n\t\t\tif (b) tick$$1(0, 1);\n\n\t\t\trunning_program = init(program, duration);\n\t\t\tadd_render_callback(() => dispatch(node, b, 'start'));\n\n\t\t\tloop(now => {\n\t\t\t\tif (pending_program && now > pending_program.start) {\n\t\t\t\t\trunning_program = init(pending_program, duration);\n\t\t\t\t\tpending_program = null;\n\n\t\t\t\t\tdispatch(node, running_program.b, 'start');\n\n\t\t\t\t\tif (css) {\n\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\tanimation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (running_program) {\n\t\t\t\t\tif (now >= running_program.end) {\n\t\t\t\t\t\ttick$$1(t = running_program.b, 1 - t);\n\t\t\t\t\t\tdispatch(node, running_program.b, 'end');\n\n\t\t\t\t\t\tif (!pending_program) {\n\t\t\t\t\t\t\t// we're done\n\t\t\t\t\t\t\tif (running_program.b) {\n\t\t\t\t\t\t\t\t// intro — we can tidy up immediately\n\t\t\t\t\t\t\t\tclear_animation();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// outro — needs to be coordinated\n\t\t\t\t\t\t\t\tif (!--running_program.group.remaining) run_all(running_program.group.callbacks);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\trunning_program = null;\n\t\t\t\t\t}\n\n\t\t\t\t\telse if (now >= running_program.start) {\n\t\t\t\t\t\tconst p = now - running_program.start;\n\t\t\t\t\t\tt = running_program.a + running_program.d * easing(p / running_program.duration);\n\t\t\t\t\t\ttick$$1(t, 1 - t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn !!(running_program || pending_program);\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\trun(b) {\n\t\t\tif (typeof config === 'function') {\n\t\t\t\twait().then(() => {\n\t\t\t\t\tconfig = config();\n\t\t\t\t\tgo(b);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tgo(b);\n\t\t\t}\n\t\t},\n\n\t\tend() {\n\t\t\tclear_animation();\n\t\t\trunning_program = pending_program = null;\n\t\t}\n\t};\n}\n\nfunction handle_promise(promise, info) {\n\tconst token = info.token = {};\n\n\tfunction update(type, index, key, value) {\n\t\tif (info.token !== token) return;\n\n\t\tinfo.resolved = key && { [key]: value };\n\n\t\tconst child_ctx = assign(assign({}, info.ctx), info.resolved);\n\t\tconst block = type && (info.current = type)(child_ctx);\n\n\t\tif (info.block) {\n\t\t\tif (info.blocks) {\n\t\t\t\tinfo.blocks.forEach((block, i) => {\n\t\t\t\t\tif (i !== index && block) {\n\t\t\t\t\t\tgroup_outros();\n\t\t\t\t\t\ton_outro(() => {\n\t\t\t\t\t\t\tblock.d(1);\n\t\t\t\t\t\t\tinfo.blocks[i] = null;\n\t\t\t\t\t\t});\n\t\t\t\t\t\tblock.o(1);\n\t\t\t\t\t\tcheck_outros();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tinfo.block.d(1);\n\t\t\t}\n\n\t\t\tblock.c();\n\t\t\tif (block.i) block.i(1);\n\t\t\tblock.m(info.mount(), info.anchor);\n\n\t\t\tflush();\n\t\t}\n\n\t\tinfo.block = block;\n\t\tif (info.blocks) info.blocks[index] = block;\n\t}\n\n\tif (is_promise(promise)) {\n\t\tpromise.then(value => {\n\t\t\tupdate(info.then, 1, info.value, value);\n\t\t}, error => {\n\t\t\tupdate(info.catch, 2, info.error, error);\n\t\t});\n\n\t\t// if we previously had a then/catch block, destroy it\n\t\tif (info.current !== info.pending) {\n\t\t\tupdate(info.pending, 0);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\tif (info.current !== info.then) {\n\t\t\tupdate(info.then, 1, info.value, promise);\n\t\t\treturn true;\n\t\t}\n\n\t\tinfo.resolved = { [info.value]: promise };\n\t}\n}\n\nfunction destroy_block(block, lookup) {\n\tblock.d(1);\n\tlookup.delete(block.key);\n}\n\nfunction outro_and_destroy_block(block, lookup) {\n\ton_outro(() => {\n\t\tdestroy_block(block, lookup);\n\t});\n\n\tblock.o(1);\n}\n\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n\tblock.f();\n\toutro_and_destroy_block(block, lookup);\n}\n\nfunction update_keyed_each(old_blocks, changed, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n\tlet o = old_blocks.length;\n\tlet n = list.length;\n\n\tlet i = o;\n\tconst old_indexes = {};\n\twhile (i--) old_indexes[old_blocks[i].key] = i;\n\n\tconst new_blocks = [];\n\tconst new_lookup = new Map();\n\tconst deltas = new Map();\n\n\ti = n;\n\twhile (i--) {\n\t\tconst child_ctx = get_context(ctx, list, i);\n\t\tconst key = get_key(child_ctx);\n\t\tlet block = lookup.get(key);\n\n\t\tif (!block) {\n\t\t\tblock = create_each_block(key, child_ctx);\n\t\t\tblock.c();\n\t\t} else if (dynamic) {\n\t\t\tblock.p(changed, child_ctx);\n\t\t}\n\n\t\tnew_lookup.set(key, new_blocks[i] = block);\n\n\t\tif (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key]));\n\t}\n\n\tconst will_move = new Set();\n\tconst did_move = new Set();\n\n\tfunction insert(block) {\n\t\tif (block.i) block.i(1);\n\t\tblock.m(node, next);\n\t\tlookup.set(block.key, block);\n\t\tnext = block.first;\n\t\tn--;\n\t}\n\n\twhile (o && n) {\n\t\tconst new_block = new_blocks[n - 1];\n\t\tconst old_block = old_blocks[o - 1];\n\t\tconst new_key = new_block.key;\n\t\tconst old_key = old_block.key;\n\n\t\tif (new_block === old_block) {\n\t\t\t// do nothing\n\t\t\tnext = new_block.first;\n\t\t\to--;\n\t\t\tn--;\n\t\t}\n\n\t\telse if (!new_lookup.has(old_key)) {\n\t\t\t// remove old block\n\t\t\tdestroy(old_block, lookup);\n\t\t\to--;\n\t\t}\n\n\t\telse if (!lookup.has(new_key) || will_move.has(new_key)) {\n\t\t\tinsert(new_block);\n\t\t}\n\n\t\telse if (did_move.has(old_key)) {\n\t\t\to--;\n\n\t\t} else if (deltas.get(new_key) > deltas.get(old_key)) {\n\t\t\tdid_move.add(new_key);\n\t\t\tinsert(new_block);\n\n\t\t} else {\n\t\t\twill_move.add(old_key);\n\t\t\to--;\n\t\t}\n\t}\n\n\twhile (o--) {\n\t\tconst old_block = old_blocks[o];\n\t\tif (!new_lookup.has(old_block.key)) destroy(old_block, lookup);\n\t}\n\n\twhile (n) insert(new_blocks[n - 1]);\n\n\treturn new_blocks;\n}\n\nfunction measure(blocks) {\n\tconst rects = {};\n\tlet i = blocks.length;\n\twhile (i--) rects[blocks[i].key] = blocks[i].node.getBoundingClientRect();\n\treturn rects;\n}\n\nfunction get_spread_update(levels, updates) {\n\tconst update = {};\n\n\tconst to_null_out = {};\n\tconst accounted_for = {};\n\n\tlet i = levels.length;\n\twhile (i--) {\n\t\tconst o = levels[i];\n\t\tconst n = updates[i];\n\n\t\tif (n) {\n\t\t\tfor (const key in o) {\n\t\t\t\tif (!(key in n)) to_null_out[key] = 1;\n\t\t\t}\n\n\t\t\tfor (const key in n) {\n\t\t\t\tif (!accounted_for[key]) {\n\t\t\t\t\tupdate[key] = n[key];\n\t\t\t\t\taccounted_for[key] = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlevels[i] = n;\n\t\t} else {\n\t\t\tfor (const key in o) {\n\t\t\t\taccounted_for[key] = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const key in to_null_out) {\n\t\tif (!(key in update)) update[key] = undefined;\n\t}\n\n\treturn update;\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\n\nfunction spread(args) {\n\tconst attributes = Object.assign({}, ...args);\n\tlet str = '';\n\n\tObject.keys(attributes).forEach(name => {\n\t\tif (invalid_attribute_name_character.test(name)) return;\n\n\t\tconst value = attributes[name];\n\t\tif (value === undefined) return;\n\t\tif (value === true) str += \" \" + name;\n\n\t\tconst escaped = String(value)\n\t\t\t.replace(/\"/g, '"')\n\t\t\t.replace(/'/g, ''');\n\n\t\tstr += \" \" + name + \"=\" + JSON.stringify(escaped);\n\t});\n\n\treturn str;\n}\n\nconst escaped = {\n\t'\"': '"',\n\t\"'\": ''',\n\t'&': '&',\n\t'<': '<',\n\t'>': '>'\n};\n\nfunction escape(html) {\n\treturn String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\n\nfunction each(items, fn) {\n\tlet str = '';\n\tfor (let i = 0; i < items.length; i += 1) {\n\t\tstr += fn(items[i], i);\n\t}\n\treturn str;\n}\n\nconst missing_component = {\n\t$$render: () => ''\n};\n\nfunction validate_component(component, name) {\n\tif (!component || !component.$$render) {\n\t\tif (name === 'svelte:component') name += ' this={...}';\n\t\tthrow new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n\t}\n\n\treturn component;\n}\n\nfunction debug(file, line, column, values) {\n\tconsole.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n\tconsole.log(values); // eslint-disable-line no-console\n\treturn '';\n}\n\nlet on_destroy;\n\nfunction create_ssr_component(fn) {\n\tfunction $$render(result, props, bindings, slots) {\n\t\tconst parent_component = current_component;\n\n\t\tconst $$ = {\n\t\t\ton_destroy,\n\t\t\tcontext: new Map(parent_component ? parent_component.$$.context : []),\n\n\t\t\t// these will be immediately discarded\n\t\t\ton_mount: [],\n\t\t\tbefore_render: [],\n\t\t\tafter_render: [],\n\t\t\tcallbacks: blank_object()\n\t\t};\n\n\t\tset_current_component({ $$ });\n\n\t\tconst html = fn(result, props, bindings, slots);\n\n\t\tset_current_component(parent_component);\n\t\treturn html;\n\t}\n\n\treturn {\n\t\trender: (props = {}, options = {}) => {\n\t\t\ton_destroy = [];\n\n\t\t\tconst result = { head: '', css: new Set() };\n\t\t\tconst html = $$render(result, props, {}, options);\n\n\t\t\trun_all(on_destroy);\n\n\t\t\treturn {\n\t\t\t\thtml,\n\t\t\t\tcss: {\n\t\t\t\t\tcode: Array.from(result.css).map(css => css.code).join('\\n'),\n\t\t\t\t\tmap: null // TODO\n\t\t\t\t},\n\t\t\t\thead: result.head\n\t\t\t};\n\t\t},\n\n\t\t$$render\n\t};\n}\n\nfunction get_store_value(store) {\n\tlet value;\n\tstore.subscribe(_ => value = _)();\n\treturn value;\n}\n\nfunction bind(component, name, callback) {\n\tif (component.$$.props.indexOf(name) === -1) return;\n\tcomponent.$$.bound[name] = callback;\n\tcallback(component.$$.ctx[name]);\n}\n\nfunction mount_component(component, target, anchor) {\n\tconst { fragment, on_mount, on_destroy, after_render } = component.$$;\n\n\tfragment.m(target, anchor);\n\n\t// onMount happens after the initial afterUpdate. Because\n\t// afterUpdate callbacks happen in reverse order (inner first)\n\t// we schedule onMount callbacks before afterUpdate callbacks\n\tadd_render_callback(() => {\n\t\tconst new_on_destroy = on_mount.map(run).filter(is_function);\n\t\tif (on_destroy) {\n\t\t\ton_destroy.push(...new_on_destroy);\n\t\t} else {\n\t\t\t// Edge case - component was destroyed immediately,\n\t\t\t// most likely as a result of a binding initialising\n\t\t\trun_all(new_on_destroy);\n\t\t}\n\t\tcomponent.$$.on_mount = [];\n\t});\n\n\tafter_render.forEach(add_render_callback);\n}\n\nfunction destroy(component, detaching) {\n\tif (component.$$) {\n\t\trun_all(component.$$.on_destroy);\n\t\tcomponent.$$.fragment.d(detaching);\n\n\t\t// TODO null out other refs, including component.$$ (but need to\n\t\t// preserve final state?)\n\t\tcomponent.$$.on_destroy = component.$$.fragment = null;\n\t\tcomponent.$$.ctx = {};\n\t}\n}\n\nfunction make_dirty(component, key) {\n\tif (!component.$$.dirty) {\n\t\tdirty_components.push(component);\n\t\tschedule_update();\n\t\tcomponent.$$.dirty = {};\n\t}\n\tcomponent.$$.dirty[key] = true;\n}\n\nfunction init(component, options, instance, create_fragment, not_equal$$1, prop_names) {\n\tconst parent_component = current_component;\n\tset_current_component(component);\n\n\tconst props = options.props || {};\n\n\tconst $$ = component.$$ = {\n\t\tfragment: null,\n\t\tctx: null,\n\n\t\t// state\n\t\tprops: prop_names,\n\t\tupdate: noop,\n\t\tnot_equal: not_equal$$1,\n\t\tbound: blank_object(),\n\n\t\t// lifecycle\n\t\ton_mount: [],\n\t\ton_destroy: [],\n\t\tbefore_render: [],\n\t\tafter_render: [],\n\t\tcontext: new Map(parent_component ? parent_component.$$.context : []),\n\n\t\t// everything else\n\t\tcallbacks: blank_object(),\n\t\tdirty: null\n\t};\n\n\tlet ready = false;\n\n\t$$.ctx = instance\n\t\t? instance(component, props, (key, value) => {\n\t\t\tif ($$.ctx && not_equal$$1($$.ctx[key], $$.ctx[key] = value)) {\n\t\t\t\tif ($$.bound[key]) $$.bound[key](value);\n\t\t\t\tif (ready) make_dirty(component, key);\n\t\t\t}\n\t\t})\n\t\t: props;\n\n\t$$.update();\n\tready = true;\n\trun_all($$.before_render);\n\t$$.fragment = create_fragment($$.ctx);\n\n\tif (options.target) {\n\t\tif (options.hydrate) {\n\t\t\t$$.fragment.l(children(options.target));\n\t\t} else {\n\t\t\t$$.fragment.c();\n\t\t}\n\n\t\tif (options.intro && component.$$.fragment.i) component.$$.fragment.i();\n\t\tmount_component(component, options.target, options.anchor);\n\t\tflush();\n\t}\n\n\tset_current_component(parent_component);\n}\n\nlet SvelteElement;\nif (typeof HTMLElement !== 'undefined') {\n\tSvelteElement = class extends HTMLElement {\n\t\tconstructor() {\n\t\t\tsuper();\n\t\t\tthis.attachShadow({ mode: 'open' });\n\t\t}\n\n\t\tconnectedCallback() {\n\t\t\tfor (const key in this.$$.slotted) {\n\t\t\t\tthis.appendChild(this.$$.slotted[key]);\n\t\t\t}\n\t\t}\n\n\t\tattributeChangedCallback(attr$$1, oldValue, newValue) {\n\t\t\tthis[attr$$1] = newValue;\n\t\t}\n\n\t\t$destroy() {\n\t\t\tdestroy(this, true);\n\t\t\tthis.$destroy = noop;\n\t\t}\n\n\t\t$on(type, callback) {\n\t\t\t// TODO should this delegate to addEventListener?\n\t\t\tconst callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n\t\t\tcallbacks.push(callback);\n\n\t\t\treturn () => {\n\t\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t\t};\n\t\t}\n\n\t\t$set() {\n\t\t\t// overridden by instance, if it has props\n\t\t}\n\t};\n}\n\nclass SvelteComponent {\n\t$destroy() {\n\t\tdestroy(this, true);\n\t\tthis.$destroy = noop;\n\t}\n\n\t$on(type, callback) {\n\t\tconst callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n\t\tcallbacks.push(callback);\n\n\t\treturn () => {\n\t\t\tconst index = callbacks.indexOf(callback);\n\t\t\tif (index !== -1) callbacks.splice(index, 1);\n\t\t};\n\t}\n\n\t$set() {\n\t\t// overridden by instance, if it has props\n\t}\n}\n\nclass SvelteComponentDev extends SvelteComponent {\n\tconstructor(options) {\n\t\tif (!options || (!options.target && !options.$$inline)) {\n\t\t\tthrow new Error(`'target' is a required option`);\n\t\t}\n\n\t\tsuper();\n\t}\n\n\t$destroy() {\n\t\tsuper.$destroy();\n\t\tthis.$destroy = () => {\n\t\t\tconsole.warn(`Component was already destroyed`); // eslint-disable-line no-console\n\t\t};\n\t}\n}\n\nexport { create_animation, fix_position, handle_promise, append, insert, detach, detach_between, detach_before, detach_after, destroy_each, element, svg_element, text, space, empty, listen, prevent_default, stop_propagation, attr, set_attributes, set_custom_element_data, xlink_attr, get_binding_group_value, to_number, time_ranges_to_array, children, claim_element, claim_text, set_data, set_input_type, set_style, select_option, select_options, select_value, select_multiple_value, add_resize_listener, toggle_class, custom_event, destroy_block, outro_and_destroy_block, fix_and_outro_and_destroy_block, update_keyed_each, measure, current_component, set_current_component, beforeUpdate, onMount, afterUpdate, onDestroy, createEventDispatcher, setContext, getContext, bubble, clear_loops, loop, dirty_components, intros, schedule_update, tick, add_binding_callback, add_render_callback, add_flush_callback, flush, get_spread_update, invalid_attribute_name_character, spread, escaped, escape, each, missing_component, validate_component, debug, create_ssr_component, get_store_value, group_outros, check_outros, on_outro, create_in_transition, create_out_transition, create_bidirectional_transition, noop, identity, assign, is_promise, add_location, run, blank_object, run_all, is_function, safe_not_equal, not_equal, validate_store, subscribe, create_slot, get_slot_context, get_slot_changes, exclude_internal_props, bind, mount_component, init, SvelteElement, SvelteComponent, SvelteComponentDev };\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n step = -step;\n start = Math.ceil(start * step);\n stop = Math.floor(stop * step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","export default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return this.children;\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport array from \"../array.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = array(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n var group = select.apply(this, arguments);\n return group == null ? [] : array(group);\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(selection) {\n if (!(selection instanceof Selection)) throw new Error(\"invalid merge\");\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new Map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new Map();\n for (const value of _) {\n const key = value + \"\";\n if (index.has(key)) continue;\n index.set(key, domain.push(value));\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","\n\n\n\n\n","\n\n
\n {title}\n \n
\n\n","\n\n\n\n{#if min && max}\n \n {#if show_text}\n \n {min_label}\n \n \n {max_label}\n \n {/if}\n{/if}\n{#if center}\n \n {#if show_text}\n \n {center_label}\n \n {/if}\n{/if}\n\n\n\n","\n\n\n {#each data as item}\n \n {/each}\n\n\n","\n\n\n\n","\n\n\n\n\n { if (e.keyCode == 27) hide(); }} \n/>\n{#if shown}\n\t
\n\t\t
\n\t\t\t
×
\n\t\t\t\n\t\t
\n\t
\n{/if}\n\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.20';\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\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 and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\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 /** 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 `_.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 `_.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 = 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\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
{unit}
\n {#if rec_limit}\n
\n The biomonitoring guidance value for {chemical_substance} concentrations is \n {rec_limit} {unit}\n
\n {/if}\n
\n
\n {`chevron`}\n\n \n {#each x_scale.ticks(constants.num_axis_ticks) as tick}\n \n {tick}\n \n \n {/each}\n {#if min_age_label}\n Age\n {/if}\n {#each y_domain as static_val}\n \n {static_val}\n {#if data_errors[static_val].missing_data_strings.length > 0 || data_errors[static_val].unreliable_data_strings.length > 0}\n 0 ? 'grey' : 'yellow'}-caution-icon.svg`}\n on:click={() => {horizontalGraphShowError(data_errors[static_val])}}\n >\n {/if}\n \n {/each}\n {#if lod_path}\n \n {/if}\n {#if rec_limit_path}\n \n {/if}\n {#if !_.isNull(prairie_data)}\n \n \n \n {/if}\n {#if !_.isNull(canada_data)}\n \n \n \n {/if}\n {#if lod_path}\n {`limit of detection${show_lod_num ? ` ${lod}${unit}` : ''}`}\n {/if}\n {#if rec_limit_path}\n {`biomonitoring guidance value: ${rec_limit}${unit}`}\n {/if}\n {#if source}\n {`(${source})`}\n {/if}\n \n \n
\n {#if _.get(info_errors_to_show, 'missing_data_strings.length', 0) > 0}\n
\n Missing Data\n
\n {#each info_errors_to_show.missing_data_strings as error_string}\n
\n {error_string}\n
\n {/each}\n {/if}\n {#if _.get(info_errors_to_show, 'unreliable_data_strings.length', 0) > 0}\n
\n Unreliable Data\n
\n {#each info_errors_to_show.unreliable_data_strings as error_string}\n
\n {error_string}\n
\n {/each}\n {/if}\n
\n \n
\n\n","\n\n
{unit}
\n
\n {`chevron`}\n\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {#each x_domain as static_val}\n \n {static_val}\n {#if data_errors[static_val].missing_data_strings.length > 0 || data_errors[static_val].unreliable_data_strings.length > 0}\n 0 ? 'grey' : 'yellow'}-caution-icon.svg`}\n on:click={() => {verticalGraphShowError(data_errors[static_val])}}\n >\n {/if}\n \n {/each}\n \n Cycle\n \n {#each y_scale.ticks(constants.num_axis_ticks) as tick}\n \n {tick}\n \n \n {/each}\n {#if lod_path}\n \n {/if}\n {#if rec_limit_path}\n \n {/if}\n {#if !_.isEmpty(prairie_data)}\n \n \n \n {/if}\n {#if !_.isEmpty(canada_data)}\n \n \n \n {/if}\n {#if lod_path}\n {`limit of detection`}\n {/if}\n {#if rec_limit_path}\n {`biomonitoring guidance value: ${rec_limit}${unit}`}\n {/if}\n {#if source}\n {`(${source})`}\n {/if}\n \n \n
\n {#if _.get(info_errors_to_show, 'missing_data_strings.length', 0) > 0}\n
\n Missing Data\n
\n {#each info_errors_to_show.missing_data_strings as error_string}\n
\n {error_string}\n
\n {/each}\n {/if}\n {#if _.get(info_errors_to_show, 'unreliable_data_strings.length', 0) > 0}\n
\n Unreliable Data\n
\n {#each info_errors_to_show.unreliable_data_strings as error_string}\n
\n {error_string}\n
\n {/each}\n {/if}\n
\n \n
\n\n","\n\n\n\n","\n\n
\n {#each all_options as option}\n
{if (available_options.includes(option)) selectionClick(option);}}\n >\n {option}\n {#if option === selected}\n
\n {current_year}\n
\n {/if}\n
\n {/each}\n
\n\n","\n\n
\n
{desc}:
\n {#each options as option}\n {#if option !== _.get(options, 0)}\n
|
\n {/if}\n
selectionClick(option.key)}\n >\n {option.title}\n
\n {/each}\n
\n\n","\n\n\n  \"Information\n\n\n\n","\n\n
\n {title}\n {#if click_action}\n \n {/if}\n
\n\n","\n\n
\n {#each icons as icon}\n selectionClick(icon)}\n >\n \n \n
\n {/each}\n\n\n","\n\n\n\n","\n\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n How to read the charts\n
\n
\n
\n {#if prairie_only_fields}\n Chemical group and substance options are currently limited to substances where prairies data is available.\n \n {/if}\n
\n
\n\n","\n\n
\n \n {#if loaded}\n help_modal.show()}\n show_prairie_filter_modal={() => prairie_filter_modal.show()}\n bind:selected_chemical_group={selected_chemical_group}\n bind:selected_chemical_substance={selected_chemical_substance}\n bind:selected_survey_cycle={selected_survey_cycle}\n bind:selected_matrix={selected_matrix}\n bind:prairie_only_fields={prairie_only_fields}\n bind:midpoint={midpoint}\n bind:scale={scale}\n />\n
\n
\n
\n {selected_chemical_substance}\n
\n
\n
\n
\n {\n return { title: option.dropdown, value: option.title }\n })}\n dropdown_available_options={_.map(age_options, 'title')}\n bind:dropdown_selected={selected_age.title}\n />\n \n
\n
\n \n \n
\n
\n
\n \n \n
\n
Prairies data filter
\n
The prairies data filter shows the average concentration of a substance across survey cycles 1-5 in Alberta, Saskatchewan, and Manitoba, for substances where data is available.
\n
\n \n \n
\n
How to read the charts
\n \n
\n \n \n
\n
\n
Overview
\n
\n {@html info_overview}\n
\n
\n
\n
Health considerations
\n
\n {@html info_health}\n
\n
\n {#if info_rec_limit}\n
\n
Biomonitoring guidance value information
\n
\n {@html info_rec_limit}\n
\n
\n {/if}\n
\n
For more information
\n
\n {@html info_more}\n
\n
\n
\n \n {:else}\n
Loading...
\n {/if}\n
\n\n","import { csv } from 'd3';\nimport _ from 'lodash';\nimport { data_folder } from '../inputs/data_paths';\nimport { getAgeKey } from './utils.js';\n\nconst data_points_path = `${data_folder}data/combined.csv`;\n\nconst loadData = async () => {\n const data = {\n Prairies: {},\n Canada: {}\n };\n\n await csv(data_points_path, (d, i) => {\n // set _id attribute\n d._id = i;\n\n _.forEach([\"n\", \"GeometricMean\", \"Median\", \"LowerPercentile\", \"UpperPercentile\", \"LowerPercentileType\", \"UpperPercentileType\", \"LOD\", \"RecLimit\"], (prop) => {\n d[prop] = parseFloat(d[prop]);\n });\n\n // if LowerPercentile or UpperPercentile is invalid, nullify the other\n if(_.isNaN(d.LowerPercentile) || _.isNaN(d.UpperPercentile)) {\n d.LowerPercentile = null;\n d.UpperPercentile = null;\n }\n\n // add data point to group\n if(d.Cycle === \"1-5\") {\n // if cycle === \"1-5\", set it to active which means it gets shown for all cycles\n _.setWith(data, [d.Region, d.ChemicalGroup, d.ChemicalSubstances, d.Matrix, 'active', getAgeKey(d)], {\n ...d,\n Cycle: 'active'\n }, Object);\n } else {\n _.setWith(data, [d.Region, d.ChemicalGroup, d.ChemicalSubstances, d.Matrix, d.Cycle, getAgeKey(d)], d, Object);\n }\n });\n\n return data;\n};\n\nexport default loadData;","import { csv } from 'd3';\nimport _ from 'lodash';\nimport { data_folder } from '../inputs/data_paths';\nimport { getDataPointKey } from './utils.js'\n\nconst data_points_path = `${data_folder}data/RecLimitsAndDescriptions.csv`;\n\nconst loadMetaData = async () => {\n const meta_data = {};\n\n await csv(data_points_path, (d, i) => {\n\n _.forEach([\"RecLimit\"], (prop) => {\n d[prop] = parseFloat(d[prop]);\n });\n\n // add data point to group\n meta_data[getDataPointKey(d)] = d; \n });\n\n return meta_data;\n};\n\nexport default loadMetaData;","import App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.body,\n\tprops: {\n\t\tname: 'world'\n\t}\n});\n\nexport default app;"],"names":["noop","assign","tar","src","k","run","fn","blank_object","Object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","get_slot_context","definition","ctx","$$scope","append","target","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","destroy_each","iterations","detaching","i","length","d","element","name","document","createElement","svg_element","createElementNS","text","data","createTextNode","space","empty","listen","event","handler","options","addEventListener","removeEventListener","attr","attribute","value","removeAttribute","setAttribute","set_data","set_style","key","style","setProperty","select_option","select","option","__value","selected","select_value","selected_option","querySelector","add_resize_listener","getComputedStyle","position","object","win","type","onload","contentDocument","defaultView","test","navigator","userAgent","cancel","current_component","set_current_component","component","get_current_component","Error","onMount","$$","on_mount","push","dirty_components","update_promise","binding_callbacks","render_callbacks","flush_callbacks","add_binding_callback","add_render_callback","add_flush_callback","flush","seen_callbacks","Set","shift","update","callback","pop","has","add","fragment","dirty","before_render","p","after_render","outros","group_outros","remaining","callbacks","check_outros","on_outro","bind","props","indexOf","bound","mount_component","on_destroy","m","new_on_destroy","map","filter","make_dirty","Promise","resolve","then","init","instance","create_fragment","not_equal$$1","prop_names","parent_component","not_equal","context","Map","ready","hydrate","l","Array","from","childNodes","children","c","intro","SvelteComponent","[object Object]","this","$destroy","index","splice","NaN","f","delta","compare","left","x","lo","hi","mid","ascending","ascendingComparator","center","right","bisectRight","bisector","e10","Math","sqrt","e5","e2","tickIncrement","start","stop","count","step","max","power","floor","log","LN10","error","pow","n","arguments","ceil","range","dispatch","t","_","Dispatch","parseTypenames","typenames","types","trim","split","slice","hasOwnProperty","get","set","concat","prototype","constructor","on","typename","T","copy","call","that","args","apply","xhtml","svg","xlink","xml","xmlns","prefix","namespaces","local","creatorInherit","ownerDocument","uri","namespaceURI","documentElement","creatorFixed","fullname","namespace","none","selector","querySelectorAll","matches","childMatcher","find","childFirst","firstElementChild","EnterNode","parent","datum","_next","_parent","__data__","bindIndex","group","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","delete","attrRemove","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","setAttributeNS","attrFunction","v","attrFunctionNS","styleRemove","removeProperty","styleConstant","priority","styleFunction","styleValue","getPropertyValue","propertyRemove","propertyConstant","propertyFunction","classArray","string","classList","ClassList","_node","_names","getAttribute","classedAdd","names","list","classedRemove","remove","classedTrue","classedFalse","classedFunction","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","firstChild","constantNull","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","onRemove","__on","o","j","listener","onAdd","contextListener","dispatchEvent","params","window","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","child","next","join","contains","root","Selection","groups","parents","_groups","_parents","selection","factory","extend","Color","subgroups","subnode","subgroup","selectAll","array","arrayAll","selectorAll","selectChild","match","childFind","selectChildren","childrenFilter","matcher","constant","enterGroup","updateGroup","exitGroup","previous","i0","i1","_enter","_exit","sparse","onenter","onupdate","onexit","merge","order","groups0","groups1","m0","m1","min","merges","group0","group1","compareDocumentPosition","sort","compareNode","sortgroups","sortgroup","nodes","size","each","getAttributeNS","property","classed","html","creator","before","deep","Symbol","iterator","darker","brighter","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","format","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","round","toString","h","s","Hsl","hslConvert","hsl2rgb","m2","define","channels","displayable","formatHsl","gamma","y","nogamma","exponential","linear","rgbGamma","end","colorRgb","genericArray","nb","na","Date","setTime","reA","reB","source","am","bm","bs","bi","lastIndex","q","number","one","zero","date","ArrayBuffer","isView","DataView","isArray","valueOf","numberArray","svgNode","degrees","PI","identity","translateX","translateY","rotate","skewX","scaleX","scaleY","e","atan2","atan","interpolateTransform","parse","pxComma","pxParen","degParen","xa","ya","xb","yb","translate","scale","taskHead","taskTail","interpolateTransformCss","DOMMatrix","WebKitCSSMatrix","isIdentity","decompose","interpolateTransformSvg","transform","baseVal","consolidate","matrix","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","setTimeout","clearNow","Timer","_call","_time","timer","delay","time","restart","wake","timerFlush","t0","t2","t1","Infinity","sleep","nap","poke","clearTimeout","clearInterval","setInterval","elapsed","TypeError","emptyOn","emptyTween","id","timing","schedules","__transition","self","tween","schedule","state","tick","duration","ease","tweenRemove","tween0","tween1","tweenFunction","tweenValue","transition","_id","interpolateNumber","interpolateRgb","interpolateString","interpolate","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","every","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","inherit","id0","id1","styleNull","listener0","undefined","styleMaybeRemove","removeFunction","easeVarying","reject","interrupt","defaultTiming","active","EOL","EOF","objectConverter","columns","Function","JSON","stringify","inferColumns","rows","columnSet","row","column","pad","width","formatDate","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","csvParse","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","N","I","eof","eol","token","replace","preformatBody","formatValue","formatRow","convert","customConverter","formatBody","formatRows","dsv","responseText","response","ok","status","statusText","input","fetch","csv","formatDecimalParts","toExponential","coefficient","abs","prefixExponent","re","formatSpecifier","specifier","FormatSpecifier","fill","align","sign","symbol","comma","precision","exponent","%","toFixed","toLocaleString","toPrecision","formatRounded","X","toUpperCase","locale","formatPrefix","prefixes","grouping","thousands","Number","substring","reverse","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","padding","initRange","domain","formatLocale","implicit","ordinal","unknown","band","bandwidth","ordinalRange","r0","r1","paddingInner","paddingOuter","rescale","values","sequence","rangeRound","unit","normalize","bimap","d0","d1","polymap","bisect","clamp","transformer","untransform","piecewise","output","interpolateValue","invert","interpolateRound","u","continuous","tickFormat","step0","step1","tickStep","precisionPrefix","precisionRound","precisionFixed","linearish","ticks","isFinite","nice","prestep","maxIter","title","available_options","includes","setDropdownWidth","innerText","getBoundingClientRect","dropdown_options","dropdown_available_options","dropdown_selected","line_props","x1","x2","y1","y2","striped","region","hashType","handleMouseOver","handleMouseOut","show_text","min_label","max_label","lower_text_props","alignmentBaseline","dx","dy","textAnchor","upper_text_props","circle_props","cx","cy","center_label","center_text_props","text_shift","circle_static_axis","circle_dynamic_axis","line_static_axis","line_dynamic_axis","static_pos","horizontal","is_canada","item","dynamic_scale","lod","upper","static_scale","static","all_data","gender_data","age_data","slot_ctx","whole_screen","background_dark","hide","modalClick","changed","shown","stopPropagation","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","INFINITY","MAX_SAFE_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsDingbatRange","rsLowerRange","rsUpperRange","rsVarRange","rsBreakRange","rsMathOpRange","rsApos","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","rsOptContrLower","rsOptContrUpper","reOptMod","rsModifier","rsOptVar","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","\\","'","\n","\r","
","
","freeParseFloat","parseFloat","freeParseInt","freeGlobal","global","freeSelf","freeExports","exports","nodeType","freeModule","module","moduleExports","freeProcess","process","nodeUtil","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","func","thisArg","arrayAggregator","setter","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","result","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","current","baseTimes","baseUnary","baseValues","cacheHas","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","escapeHtmlChar","&","<",">","\"","escapeStringChar","chr","hasUnicode","mapToArray","overArg","arg","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","&","<",">",""","'","runInContext","uid","defaults","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","keys","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","toStringTag","defineProperty","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","configurable","enumerable","writable","baseAt","paths","skip","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","escape","evaluate","variable","imports","hash","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","baseInvoke","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","message","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","criteria","objCriteria","othCriteria","ordersLength","compareAscending","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","charAt","trailing","createCompounder","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","newHolders","createRecurry","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","flatten","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","defer","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","done","iteratorToArray","remainder","toLength","isBinary","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","invoke","omit","CLONE_DEEP_FLAG","basePick","pickBy","prop","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","subtract","minuend","subtrahend","after","castArray","chunk","compact","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extendWith","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","strLength","padEnd","padStart","radix","floating","temp","reduce","reduceRight","repeat","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","sourceURL","escapeValue","esTemplateValue","evaluateValue","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","search","newEnd","unescape","uniqueId","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","getAgeKey","Section","Group","getAgeDropdownKey","getDataPointKey","ChemicalSubstances","Matrix","Units","mapPointsToErrorStrings","data_points","selected_chemical_substance","selected_survey_cycle","selected_matrix","selected_age","midpoint","data_point","data_point_errors","getErrorStrings","missing_data_strings","unreliable_data_strings","center_flag","percentile_error_string","lower_flag","upper_flag","lower_type","upper_type","percentile_unreliable_string","getMaxFromDataPoints","max_data_vals","UpperPercentile","getMinFromDataPoints","min_data_vals","LowerPercentile","data_order","All","Males","Females","Age","sortAgesBySection","age_property","section","chemical_substance","rec_limit","x_scale","axis_font_size","height","margin","top","bottom","y_scale","min_age_label","data_errors","static_val","click_handler","lod_path","rec_limit_path","prairie_data","canada_data","show_lod_num","lod_left","rec_limit_right","info_errors_to_show","error_string","constants","y_domain","chevron_height","chevronClick","scales","x_domain","groupRegionData","all_data_point","info_error_modal","horizontalGraphShowError","errors","show","total_data","scaleLinear","y_scale_band","scaleBand","y_val","min_width","lod_width","rec_limit_width","scale_option","graph_center","lod_top","rec_limit_bottom","verticalGraphShowError","lods","min_height","lod_height","rec_limit_height","current_year","all_options","selectionClick","desc","click_action","icon","selected_img","unselected_img","alt","icons","show_prairie_filter_modal","chemical_group_options","selected_chemical_group","chemical_substance_options","survey_cycle_options","matrix_options","prairie_only_fields","midpoints","show_help_modal","age_options","func_2","vertical_selected_data","vertical_selected_errors","vertical_graph_margin","info_website_source","horizontal_selected_data","horizontal_selected_errors","horizontal_graph_margin","info_rec_limit","info_overview","info_health","info_more","loaded","meta_data","help_modal","info_modal","prairie_filter_modal","domain_data","visualization_width","innerWidth","async","Prairies","Canada","Cycle","Region","ChemicalGroup","loadData","loadMetaData","resetSubstances","chemical_group","prairie_only","try_no_change","resetMatrices","matrix_keys","matrix_option","replaceAll","resetCycles","resetAges","age_option_titles","ages_dict","age_title","dropdown","resetGroups","region_data","cycle","flattened_data","first_data_point","Year","point_meta_data","data_max","data_min","min_tick","max_tick","tick_diff","getNiceDomain","selected_cycle","LowerPercentileFlag","LowerPercentileType","UpperPercentileFlag","UpperPercentileType","LOD","parseRegionDataHorizontal","age_group","parseRegionDataVertical","body"],"mappings":"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"}