{"version":3,"file":"layout-w-BfCQ-b.chunk.mjs","sources":["../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_baseCreate.js","../node_modules/lodash-es/_copyArray.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/_assignValue.js","../node_modules/lodash-es/_copyObject.js","../node_modules/lodash-es/_isIterateeCall.js","../node_modules/lodash-es/_createAssigner.js","../node_modules/lodash-es/_nativeKeysIn.js","../node_modules/lodash-es/_baseKeysIn.js","../node_modules/lodash-es/keysIn.js","../node_modules/lodash-es/flatten.js","../node_modules/lodash-es/_flatRest.js","../node_modules/lodash-es/_getPrototype.js","../node_modules/lodash-es/isPlainObject.js","../node_modules/lodash-es/_baseAssign.js","../node_modules/lodash-es/_baseAssignIn.js","../node_modules/lodash-es/_cloneBuffer.js","../node_modules/lodash-es/_copySymbols.js","../node_modules/lodash-es/_getSymbolsIn.js","../node_modules/lodash-es/_copySymbolsIn.js","../node_modules/lodash-es/_getAllKeysIn.js","../node_modules/lodash-es/_initCloneArray.js","../node_modules/lodash-es/_cloneArrayBuffer.js","../node_modules/lodash-es/_cloneDataView.js","../node_modules/lodash-es/_cloneRegExp.js","../node_modules/lodash-es/_cloneSymbol.js","../node_modules/lodash-es/_cloneTypedArray.js","../node_modules/lodash-es/_initCloneByTag.js","../node_modules/lodash-es/_initCloneObject.js","../node_modules/lodash-es/_baseIsMap.js","../node_modules/lodash-es/isMap.js","../node_modules/lodash-es/_baseIsSet.js","../node_modules/lodash-es/isSet.js","../node_modules/lodash-es/_baseClone.js","../node_modules/lodash-es/cloneDeep.js","../node_modules/lodash-es/defaults.js","../node_modules/lodash-es/_assignMergeValue.js","../node_modules/lodash-es/_safeGet.js","../node_modules/lodash-es/toPlainObject.js","../node_modules/lodash-es/_baseMergeDeep.js","../node_modules/lodash-es/_baseMerge.js","../node_modules/lodash-es/last.js","../node_modules/lodash-es/_createFind.js","../node_modules/lodash-es/findIndex.js","../node_modules/lodash-es/find.js","../node_modules/lodash-es/_baseMap.js","../node_modules/lodash-es/map.js","../node_modules/lodash-es/forIn.js","../node_modules/lodash-es/forOwn.js","../node_modules/lodash-es/_baseGt.js","../node_modules/lodash-es/_baseHas.js","../node_modules/lodash-es/has.js","../node_modules/lodash-es/_baseLt.js","../node_modules/lodash-es/mapValues.js","../node_modules/lodash-es/_baseExtremum.js","../node_modules/lodash-es/max.js","../node_modules/lodash-es/merge.js","../node_modules/lodash-es/min.js","../node_modules/lodash-es/minBy.js","../node_modules/lodash-es/_baseSet.js","../node_modules/lodash-es/_basePickBy.js","../node_modules/lodash-es/_baseSortBy.js","../node_modules/lodash-es/_compareAscending.js","../node_modules/lodash-es/_compareMultiple.js","../node_modules/lodash-es/_baseOrderBy.js","../node_modules/lodash-es/_basePick.js","../node_modules/lodash-es/pick.js","../node_modules/lodash-es/_baseRange.js","../node_modules/lodash-es/_createRange.js","../node_modules/lodash-es/range.js","../node_modules/lodash-es/sortBy.js","../node_modules/lodash-es/uniqueId.js","../node_modules/lodash-es/_baseZipObject.js","../node_modules/lodash-es/zipObject.js","../node_modules/dagre-d3-es/src/dagre/data/list.js","../node_modules/dagre-d3-es/src/dagre/greedy-fas.js","../node_modules/dagre-d3-es/src/dagre/acyclic.js","../node_modules/dagre-d3-es/src/dagre/util.js","../node_modules/dagre-d3-es/src/dagre/add-border-segments.js","../node_modules/dagre-d3-es/src/dagre/coordinate-system.js","../node_modules/dagre-d3-es/src/dagre/normalize.js","../node_modules/dagre-d3-es/src/dagre/rank/util.js","../node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js","../node_modules/dagre-d3-es/src/graphlib/alg/topsort.js","../node_modules/dagre-d3-es/src/graphlib/alg/dfs.js","../node_modules/dagre-d3-es/src/graphlib/alg/postorder.js","../node_modules/dagre-d3-es/src/graphlib/alg/preorder.js","../node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js","../node_modules/dagre-d3-es/src/dagre/rank/index.js","../node_modules/dagre-d3-es/src/dagre/nesting-graph.js","../node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js","../node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js","../node_modules/dagre-d3-es/src/dagre/order/cross-count.js","../node_modules/dagre-d3-es/src/dagre/order/init-order.js","../node_modules/dagre-d3-es/src/dagre/order/barycenter.js","../node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js","../node_modules/dagre-d3-es/src/dagre/order/sort.js","../node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js","../node_modules/dagre-d3-es/src/dagre/order/index.js","../node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js","../node_modules/dagre-d3-es/src/dagre/position/bk.js","../node_modules/dagre-d3-es/src/dagre/position/index.js","../node_modules/dagre-d3-es/src/dagre/layout.js"],"sourcesContent":["/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = baseTrim(value);\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_INTEGER = 1.7976931348623157e+308;\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 */\nfunction 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\nexport default toFinite;\n","import toFinite from './toFinite.js';\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 */\nfunction toInteger(value) {\n  var result = toFinite(value),\n      remainder = result % 1;\n\n  return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\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 */\nvar 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\nexport default baseCreate;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nexport default copyArray;\n","import defineProperty from './_defineProperty.js';\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 */\nfunction 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\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  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\nexport default copyObject;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\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 */\nfunction 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\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\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 */\nfunction 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\nexport default createAssigner;\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 */\nfunction 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\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction 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\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\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 */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import baseFlatten from './_baseFlatten.js';\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 */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\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 */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\n","import overArg from './_overArg.js';\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nexport default getPrototype;\n","import baseGetTag from './_baseGetTag.js';\nimport getPrototype from './_getPrototype.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\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 */\nfunction 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\nexport default isPlainObject;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\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 */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nexport default cloneBuffer;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\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 */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\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 */\nvar 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\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\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 */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\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 */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = 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\nexport default initCloneArray;\n","import Uint8Array from './_Uint8Array.js';\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * 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 */\nfunction 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\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\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 */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\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 */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\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 */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\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 */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\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 */\nfunction 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\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_SYMBOLS_FLAG = 4;\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 */\nfunction cloneDeep(value) {\n  return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nvar 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\nexport default defaults;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\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 */\nfunction 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\nexport default assignMergeValue;\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 */\nfunction 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\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\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 */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\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 */\nfunction 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\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\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 */\nfunction 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\nexport default baseMerge;\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 */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\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 */\nfunction createFind(findIndexFunc) {\n  return function(collection, predicate, fromIndex) {\n    var iterable = Object(collection);\n    if (!isArrayLike(collection)) {\n      var iteratee = baseIteratee(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\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\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 */\nfunction 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, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\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 */\nvar find = createFind(findIndex);\n\nexport default find;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\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 */\nfunction map(collection, iteratee) {\n  var func = isArray(collection) ? arrayMap : baseMap;\n  return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","import baseFor from './_baseFor.js';\nimport castFunction from './_castFunction.js';\nimport keysIn from './keysIn.js';\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 */\nfunction forIn(object, iteratee) {\n  return object == null\n    ? object\n    : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nexport default forIn;\n","import baseForOwn from './_baseForOwn.js';\nimport castFunction from './_castFunction.js';\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 */\nfunction forOwn(object, iteratee) {\n  return object && baseForOwn(object, castFunction(iteratee));\n}\n\nexport default forOwn;\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 */\nfunction baseGt(value, other) {\n  return value > other;\n}\n\nexport default baseGt;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction baseHas(object, key) {\n  return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\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 */\nfunction has(object, path) {\n  return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\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 */\nfunction baseLt(value, other) {\n  return value < other;\n}\n\nexport default baseLt;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\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 */\nfunction mapValues(object, iteratee) {\n  var result = {};\n  iteratee = baseIteratee(iteratee, 3);\n\n  baseForOwn(object, function(value, key, object) {\n    baseAssignValue(result, key, iteratee(value, key, object));\n  });\n  return result;\n}\n\nexport default mapValues;\n","import isSymbol from './isSymbol.js';\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 */\nfunction 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\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\nfunction max(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseGt)\n    : undefined;\n}\n\nexport default max;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\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 */\nvar merge = createAssigner(function(object, source, srcIndex) {\n  baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\n\n/**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\nfunction min(array) {\n  return (array && array.length)\n    ? baseExtremum(array, identity, baseLt)\n    : undefined;\n}\n\nexport default min;\n","import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n  return (array && array.length)\n    ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n    : undefined;\n}\n\nexport default minBy;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\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 */\nfunction 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\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\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 */\nfunction 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\nexport default basePickBy;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\nexport default baseSortBy;\n","import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\nexport default compareMultiple;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  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(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\nexport default baseOrderBy;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\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 */\nfunction basePick(object, paths) {\n  return basePickBy(object, paths, function(value, path) {\n    return hasIn(object, path);\n  });\n}\n\nexport default basePick;\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\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 */\nvar pick = flatRest(function(object, paths) {\n  return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n    nativeMax = Math.max;\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 */\nfunction 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\nexport default baseRange;\n","import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\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 */\nfunction 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\nexport default createRange;\n","import createRange from './_createRange.js';\n\n/**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\nvar range = createRange();\n\nexport default range;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\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 */\nvar 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\nexport default sortBy;\n","import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\n\n/**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\nfunction uniqueId(prefix) {\n  var id = ++idCounter;\n  return toString(prefix) + id;\n}\n\nexport default uniqueId;\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 */\nfunction 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\nexport default baseZipObject;\n","import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\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 */\nfunction zipObject(props, values) {\n  return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n","/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nexport { List };\n\nclass List {\n  constructor() {\n    var sentinel = {};\n    sentinel._next = sentinel._prev = sentinel;\n    this._sentinel = sentinel;\n  }\n  dequeue() {\n    var sentinel = this._sentinel;\n    var entry = sentinel._prev;\n    if (entry !== sentinel) {\n      unlink(entry);\n      return entry;\n    }\n  }\n  enqueue(entry) {\n    var sentinel = this._sentinel;\n    if (entry._prev && entry._next) {\n      unlink(entry);\n    }\n    entry._next = sentinel._next;\n    sentinel._next._prev = entry;\n    sentinel._next = entry;\n    entry._prev = sentinel;\n  }\n  toString() {\n    var strs = [];\n    var sentinel = this._sentinel;\n    var curr = sentinel._prev;\n    while (curr !== sentinel) {\n      strs.push(JSON.stringify(curr, filterOutLinks));\n      curr = curr._prev;\n    }\n    return '[' + strs.join(', ') + ']';\n  }\n}\n\nfunction unlink(entry) {\n  entry._prev._next = entry._next;\n  entry._next._prev = entry._prev;\n  delete entry._next;\n  delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n  if (k !== '_next' && k !== '_prev') {\n    return v;\n  }\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { List } from './data/list.js';\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nexport { greedyFAS };\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n  if (g.nodeCount() <= 1) {\n    return [];\n  }\n  var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n  var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n  // Expand multi-edges\n  return _.flatten(\n    _.map(results, function (e) {\n      return g.outEdges(e.v, e.w);\n    }),\n  );\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n  var results = [];\n  var sources = buckets[buckets.length - 1];\n  var sinks = buckets[0];\n\n  var entry;\n  while (g.nodeCount()) {\n    while ((entry = sinks.dequeue())) {\n      removeNode(g, buckets, zeroIdx, entry);\n    }\n    while ((entry = sources.dequeue())) {\n      removeNode(g, buckets, zeroIdx, entry);\n    }\n    if (g.nodeCount()) {\n      for (var i = buckets.length - 2; i > 0; --i) {\n        entry = buckets[i].dequeue();\n        if (entry) {\n          results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n          break;\n        }\n      }\n    }\n  }\n\n  return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n  var results = collectPredecessors ? [] : undefined;\n\n  _.forEach(g.inEdges(entry.v), function (edge) {\n    var weight = g.edge(edge);\n    var uEntry = g.node(edge.v);\n\n    if (collectPredecessors) {\n      results.push({ v: edge.v, w: edge.w });\n    }\n\n    uEntry.out -= weight;\n    assignBucket(buckets, zeroIdx, uEntry);\n  });\n\n  _.forEach(g.outEdges(entry.v), function (edge) {\n    var weight = g.edge(edge);\n    var w = edge.w;\n    var wEntry = g.node(w);\n    wEntry['in'] -= weight;\n    assignBucket(buckets, zeroIdx, wEntry);\n  });\n\n  g.removeNode(entry.v);\n\n  return results;\n}\n\nfunction buildState(g, weightFn) {\n  var fasGraph = new Graph();\n  var maxIn = 0;\n  var maxOut = 0;\n\n  _.forEach(g.nodes(), function (v) {\n    fasGraph.setNode(v, { v: v, in: 0, out: 0 });\n  });\n\n  // Aggregate weights on nodes, but also sum the weights across multi-edges\n  // into a single edge for the fasGraph.\n  _.forEach(g.edges(), function (e) {\n    var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n    var weight = weightFn(e);\n    var edgeWeight = prevWeight + weight;\n    fasGraph.setEdge(e.v, e.w, edgeWeight);\n    maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));\n    maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight));\n  });\n\n  var buckets = _.range(maxOut + maxIn + 3).map(function () {\n    return new List();\n  });\n  var zeroIdx = maxIn + 1;\n\n  _.forEach(fasGraph.nodes(), function (v) {\n    assignBucket(buckets, zeroIdx, fasGraph.node(v));\n  });\n\n  return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n  if (!entry.out) {\n    buckets[0].enqueue(entry);\n  } else if (!entry['in']) {\n    buckets[buckets.length - 1].enqueue(entry);\n  } else {\n    buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry);\n  }\n}\n","import * as _ from 'lodash-es';\nimport { greedyFAS } from './greedy-fas.js';\n\nexport { run, undo };\n\nfunction run(g) {\n  var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g);\n  _.forEach(fas, function (e) {\n    var label = g.edge(e);\n    g.removeEdge(e);\n    label.forwardName = e.name;\n    label.reversed = true;\n    g.setEdge(e.w, e.v, label, _.uniqueId('rev'));\n  });\n\n  function weightFn(g) {\n    return function (e) {\n      return g.edge(e).weight;\n    };\n  }\n}\n\nfunction dfsFAS(g) {\n  var fas = [];\n  var stack = {};\n  var visited = {};\n\n  function dfs(v) {\n    if (Object.prototype.hasOwnProperty.call(visited, v)) {\n      return;\n    }\n    visited[v] = true;\n    stack[v] = true;\n    _.forEach(g.outEdges(v), function (e) {\n      if (Object.prototype.hasOwnProperty.call(stack, e.w)) {\n        fas.push(e);\n      } else {\n        dfs(e.w);\n      }\n    });\n    delete stack[v];\n  }\n\n  _.forEach(g.nodes(), dfs);\n  return fas;\n}\n\nfunction undo(g) {\n  _.forEach(g.edges(), function (e) {\n    var label = g.edge(e);\n    if (label.reversed) {\n      g.removeEdge(e);\n\n      var forwardName = label.forwardName;\n      delete label.reversed;\n      delete label.forwardName;\n      g.setEdge(e.w, e.v, label, forwardName);\n    }\n  });\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\n\nexport {\n  addDummyNode,\n  simplify,\n  asNonCompoundGraph,\n  successorWeights,\n  predecessorWeights,\n  intersectRect,\n  buildLayerMatrix,\n  normalizeRanks,\n  removeEmptyRanks,\n  addBorderNode,\n  maxRank,\n  partition,\n  time,\n  notime,\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n  var v;\n  do {\n    v = _.uniqueId(name);\n  } while (g.hasNode(v));\n\n  attrs.dummy = type;\n  g.setNode(v, attrs);\n  return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n  var simplified = new Graph().setGraph(g.graph());\n  _.forEach(g.nodes(), function (v) {\n    simplified.setNode(v, g.node(v));\n  });\n  _.forEach(g.edges(), function (e) {\n    var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n    var label = g.edge(e);\n    simplified.setEdge(e.v, e.w, {\n      weight: simpleLabel.weight + label.weight,\n      minlen: Math.max(simpleLabel.minlen, label.minlen),\n    });\n  });\n  return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n  var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n  _.forEach(g.nodes(), function (v) {\n    if (!g.children(v).length) {\n      simplified.setNode(v, g.node(v));\n    }\n  });\n  _.forEach(g.edges(), function (e) {\n    simplified.setEdge(e, g.edge(e));\n  });\n  return simplified;\n}\n\nfunction successorWeights(g) {\n  var weightMap = _.map(g.nodes(), function (v) {\n    var sucs = {};\n    _.forEach(g.outEdges(v), function (e) {\n      sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n    });\n    return sucs;\n  });\n  return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n  var weightMap = _.map(g.nodes(), function (v) {\n    var preds = {};\n    _.forEach(g.inEdges(v), function (e) {\n      preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n    });\n    return preds;\n  });\n  return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n  var x = rect.x;\n  var y = rect.y;\n\n  // Rectangle intersection algorithm from:\n  // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n  var dx = point.x - x;\n  var dy = point.y - y;\n  var w = rect.width / 2;\n  var h = rect.height / 2;\n\n  if (!dx && !dy) {\n    throw new Error('Not possible to find intersection inside of the rectangle');\n  }\n\n  var sx, sy;\n  if (Math.abs(dy) * w > Math.abs(dx) * h) {\n    // Intersection is top or bottom of rect.\n    if (dy < 0) {\n      h = -h;\n    }\n    sx = (h * dx) / dy;\n    sy = h;\n  } else {\n    // Intersection is left or right of rect.\n    if (dx < 0) {\n      w = -w;\n    }\n    sx = w;\n    sy = (w * dy) / dx;\n  }\n\n  return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n  var layering = _.map(_.range(maxRank(g) + 1), function () {\n    return [];\n  });\n  _.forEach(g.nodes(), function (v) {\n    var node = g.node(v);\n    var rank = node.rank;\n    if (!_.isUndefined(rank)) {\n      layering[rank][node.order] = v;\n    }\n  });\n  return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n  var min = _.min(\n    _.map(g.nodes(), function (v) {\n      return g.node(v).rank;\n    }),\n  );\n  _.forEach(g.nodes(), function (v) {\n    var node = g.node(v);\n    if (_.has(node, 'rank')) {\n      node.rank -= min;\n    }\n  });\n}\n\nfunction removeEmptyRanks(g) {\n  // Ranks may not start at 0, so we need to offset them\n  var offset = _.min(\n    _.map(g.nodes(), function (v) {\n      return g.node(v).rank;\n    }),\n  );\n\n  var layers = [];\n  _.forEach(g.nodes(), function (v) {\n    var rank = g.node(v).rank - offset;\n    if (!layers[rank]) {\n      layers[rank] = [];\n    }\n    layers[rank].push(v);\n  });\n\n  var delta = 0;\n  var nodeRankFactor = g.graph().nodeRankFactor;\n  _.forEach(layers, function (vs, i) {\n    if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n      --delta;\n    } else if (delta) {\n      _.forEach(vs, function (v) {\n        g.node(v).rank += delta;\n      });\n    }\n  });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n  var node = {\n    width: 0,\n    height: 0,\n  };\n  if (arguments.length >= 4) {\n    node.rank = rank;\n    node.order = order;\n  }\n  return addDummyNode(g, 'border', node, prefix);\n}\n\nfunction maxRank(g) {\n  return _.max(\n    _.map(g.nodes(), function (v) {\n      var rank = g.node(v).rank;\n      if (!_.isUndefined(rank)) {\n        return rank;\n      }\n    }),\n  );\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n  var result = { lhs: [], rhs: [] };\n  _.forEach(collection, function (value) {\n    if (fn(value)) {\n      result.lhs.push(value);\n    } else {\n      result.rhs.push(value);\n    }\n  });\n  return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n  var start = _.now();\n  try {\n    return fn();\n  } finally {\n    console.log(name + ' time: ' + (_.now() - start) + 'ms');\n  }\n}\n\nfunction notime(name, fn) {\n  return fn();\n}\n","import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { addBorderSegments };\n\nfunction addBorderSegments(g) {\n  function dfs(v) {\n    var children = g.children(v);\n    var node = g.node(v);\n    if (children.length) {\n      _.forEach(children, dfs);\n    }\n\n    if (Object.prototype.hasOwnProperty.call(node, 'minRank')) {\n      node.borderLeft = [];\n      node.borderRight = [];\n      for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {\n        addBorderNode(g, 'borderLeft', '_bl', v, node, rank);\n        addBorderNode(g, 'borderRight', '_br', v, node, rank);\n      }\n    }\n  }\n\n  _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n  var label = { width: 0, height: 0, rank: rank, borderType: prop };\n  var prev = sgNode[prop][rank - 1];\n  var curr = util.addDummyNode(g, 'border', label, prefix);\n  sgNode[prop][rank] = curr;\n  g.setParent(curr, sg);\n  if (prev) {\n    g.setEdge(prev, curr, { weight: 1 });\n  }\n}\n","import * as _ from 'lodash-es';\n\nexport { adjust, undo };\n\nfunction adjust(g) {\n  var rankDir = g.graph().rankdir.toLowerCase();\n  if (rankDir === 'lr' || rankDir === 'rl') {\n    swapWidthHeight(g);\n  }\n}\n\nfunction undo(g) {\n  var rankDir = g.graph().rankdir.toLowerCase();\n  if (rankDir === 'bt' || rankDir === 'rl') {\n    reverseY(g);\n  }\n\n  if (rankDir === 'lr' || rankDir === 'rl') {\n    swapXY(g);\n    swapWidthHeight(g);\n  }\n}\n\nfunction swapWidthHeight(g) {\n  _.forEach(g.nodes(), function (v) {\n    swapWidthHeightOne(g.node(v));\n  });\n  _.forEach(g.edges(), function (e) {\n    swapWidthHeightOne(g.edge(e));\n  });\n}\n\nfunction swapWidthHeightOne(attrs) {\n  var w = attrs.width;\n  attrs.width = attrs.height;\n  attrs.height = w;\n}\n\nfunction reverseY(g) {\n  _.forEach(g.nodes(), function (v) {\n    reverseYOne(g.node(v));\n  });\n\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, reverseYOne);\n    if (Object.prototype.hasOwnProperty.call(edge, 'y')) {\n      reverseYOne(edge);\n    }\n  });\n}\n\nfunction reverseYOne(attrs) {\n  attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n  _.forEach(g.nodes(), function (v) {\n    swapXYOne(g.node(v));\n  });\n\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, swapXYOne);\n    if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n      swapXYOne(edge);\n    }\n  });\n}\n\nfunction swapXYOne(attrs) {\n  var x = attrs.x;\n  attrs.x = attrs.y;\n  attrs.y = x;\n}\n","/**\n * TypeScript type imports:\n *\n * @import { Graph } from '../graphlib/graph.js';\n */\nimport * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, undo };\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n *    1. The input graph is a DAG.\n *    2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n *    1. All edges in the graph have a length of 1.\n *    2. Dummy nodes are added where edges have been split into segments.\n *    3. The graph is augmented with a \"dummyChains\" attribute which contains\n *       the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n  g.graph().dummyChains = [];\n  _.forEach(g.edges(), function (edge) {\n    normalizeEdge(g, edge);\n  });\n}\n\n/**\n * @param {Graph} g\n */\nfunction normalizeEdge(g, e) {\n  var v = e.v;\n  var vRank = g.node(v).rank;\n  var w = e.w;\n  var wRank = g.node(w).rank;\n  var name = e.name;\n  var edgeLabel = g.edge(e);\n  var labelRank = edgeLabel.labelRank;\n\n  if (wRank === vRank + 1) return;\n\n  g.removeEdge(e);\n\n  /**\n   * @typedef {Object} Attrs\n   * @property {number} width\n   * @property {number} height\n   * @property {ReturnType<Graph[\"node\"]>} edgeLabel\n   * @property {any} edgeObj\n   * @property {ReturnType<Graph[\"node\"]>[\"rank\"]} rank\n   * @property {string} [dummy]\n   * @property {ReturnType<Graph[\"node\"]>[\"labelpos\"]} [labelpos]\n   */\n\n  /** @type {Attrs | undefined} */\n  var attrs = undefined;\n  var dummy, i;\n  for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n    edgeLabel.points = [];\n    attrs = {\n      width: 0,\n      height: 0,\n      edgeLabel: edgeLabel,\n      edgeObj: e,\n      rank: vRank,\n    };\n    dummy = util.addDummyNode(g, 'edge', attrs, '_d');\n    if (vRank === labelRank) {\n      attrs.width = edgeLabel.width;\n      attrs.height = edgeLabel.height;\n      attrs.dummy = 'edge-label';\n      attrs.labelpos = edgeLabel.labelpos;\n    }\n    g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n    if (i === 0) {\n      g.graph().dummyChains.push(dummy);\n    }\n    v = dummy;\n  }\n\n  g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n  _.forEach(g.graph().dummyChains, function (v) {\n    var node = g.node(v);\n    var origLabel = node.edgeLabel;\n    var w;\n    g.setEdge(node.edgeObj, origLabel);\n    while (node.dummy) {\n      w = g.successors(v)[0];\n      g.removeNode(v);\n      origLabel.points.push({ x: node.x, y: node.y });\n      if (node.dummy === 'edge-label') {\n        origLabel.x = node.x;\n        origLabel.y = node.y;\n        origLabel.width = node.width;\n        origLabel.height = node.height;\n      }\n      v = w;\n      node = g.node(v);\n    }\n  });\n}\n","import * as _ from 'lodash-es';\n\nexport { longestPath, slack };\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n *    1. Input graph is a DAG.\n *    2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n *    1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n  var visited = {};\n\n  function dfs(v) {\n    var label = g.node(v);\n    if (Object.prototype.hasOwnProperty.call(visited, v)) {\n      return label.rank;\n    }\n    visited[v] = true;\n\n    var rank = _.min(\n      _.map(g.outEdges(v), function (e) {\n        return dfs(e.w) - g.edge(e).minlen;\n      }),\n    );\n\n    if (\n      rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n      rank === undefined || // return value of _.map([]) for Lodash 4\n      rank === null\n    ) {\n      // return value of _.map([null])\n      rank = 0;\n    }\n\n    return (label.rank = rank);\n  }\n\n  _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n  return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport { slack } from './util.js';\n\nexport { feasibleTree };\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n *    1. Graph must be a DAG.\n *    2. Graph must be connected.\n *    3. Graph must have at least one node.\n *    5. Graph nodes must have been previously assigned a \"rank\" property that\n *       respects the \"minlen\" property of incident edges.\n *    6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n *    - Graph nodes will have their rank adjusted to ensure that all edges are\n *      tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n  var t = new Graph({ directed: false });\n\n  // Choose arbitrary node from which to start our tree\n  var start = g.nodes()[0];\n  var size = g.nodeCount();\n  t.setNode(start, {});\n\n  var edge, delta;\n  while (tightTree(t, g) < size) {\n    edge = findMinSlackEdge(t, g);\n    delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n    shiftRanks(t, g, delta);\n  }\n\n  return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n  function dfs(v) {\n    _.forEach(g.nodeEdges(v), function (e) {\n      var edgeV = e.v,\n        w = v === edgeV ? e.w : edgeV;\n      if (!t.hasNode(w) && !slack(g, e)) {\n        t.setNode(w, {});\n        t.setEdge(v, w, {});\n        dfs(w);\n      }\n    });\n  }\n\n  _.forEach(t.nodes(), dfs);\n  return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n  return _.minBy(g.edges(), function (e) {\n    if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n      return slack(g, e);\n    }\n  });\n}\n\nfunction shiftRanks(t, g, delta) {\n  _.forEach(t.nodes(), function (v) {\n    g.node(v).rank += delta;\n  });\n}\n","import * as _ from 'lodash-es';\n\n/**\n * @import { Graph, NodeID } from '../graph.js';\n */\n\nexport { topsort, CycleException };\n\ntopsort.CycleException = CycleException;\n\n/**\n * An implementation of [topological sorting](https://en.wikipedia.org/wiki/Topological_sorting).\n *\n * @remarks Takes `O(|V| + |E|)` time.\n *\n * @example\n *\n * ![](https://github.com/dagrejs/graphlib/wiki/images/topsort.png)\n *\n * ```js\n * graphlib.alg.topsort(g)\n * // [ '1', '2', '3', '4' ] or [ '1', '3', '2', '4' ]\n * ```\n *\n * @param {Graph} g - The graph to sort.\n * @returns {NodeID[]} an array of nodes\n * such that for each edge `u -> v`, `u` appears before `v` in the array.\n * @throws {CycleException} If the graph has a cycle so that it is impossible\n * to generate a topological sort.\n */\nfunction topsort(g) {\n  /** @type {Record<NodeID, true>} */\n  var visited = {};\n  /** @type {Record<NodeID, true>} */\n  var stack = {};\n  /** @type {NodeID[]} */\n  var results = [];\n\n  /**\n   * @param {NodeID} node - Node to recursively visit.\n   */\n  function visit(node) {\n    if (Object.prototype.hasOwnProperty.call(stack, node)) {\n      throw new CycleException();\n    }\n\n    if (!Object.prototype.hasOwnProperty.call(visited, node)) {\n      stack[node] = true;\n      visited[node] = true;\n      _.each(g.predecessors(node), visit);\n      delete stack[node];\n      results.push(node);\n    }\n  }\n\n  _.each(g.sinks(), visit);\n\n  if (_.size(visited) !== g.nodeCount()) {\n    throw new CycleException();\n  }\n\n  return results;\n}\n\n/**\n * @class\n */\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing\n","import * as _ from 'lodash-es';\n\n/**\n * @import { Graph, NodeID } from '../graph.js';\n */\n\nexport { dfs };\n\n/**\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * @param {Graph} g - Input graph.\n * @param {NodeID[] | NodeID} vs - Starting node or array of nodes.\n * @param {'post' | 'pre'} order - The order to use. Must be one of \"pre\" or \"post\".\n * @returns {NodeID[]} The nodes in the order they were visited.\n */\nfunction dfs(g, vs, order) {\n  if (!_.isArray(vs)) {\n    vs = [vs];\n  }\n\n  /** @type {Parameters<typeof doDfs>[4]} */\n  var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n  /** @type {Parameters<typeof doDfs>[5]} */\n  var acc = [];\n  /** @type {Parameters<typeof doDfs>[3]} */\n  var visited = {};\n  _.each(vs, function (v) {\n    if (!g.hasNode(v)) {\n      throw new Error('Graph does not have node: ' + v);\n    }\n\n    doDfs(g, v, order === 'post', visited, navigation, acc);\n  });\n  return acc;\n}\n\n/**\n * @param {Graph} g - Input graph.\n * @param {NodeID} v - The node to visit.\n * @param {boolean} postorder - Whether to do postorder traversal.\n * @param {Record<NodeID, true>} visited - Visited nodes.\n * @param {(node: NodeID) => (NodeID[] | undefined)} navigation - Function to get\n * neighbors/successors.\n * @param {NodeID[]} acc - Accumulator for visited nodes.\n */\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n  if (!Object.prototype.hasOwnProperty.call(visited, v)) {\n    visited[v] = true;\n\n    if (!postorder) {\n      acc.push(v);\n    }\n    _.each(navigation(v), function (w) {\n      doDfs(g, w, postorder, visited, navigation, acc);\n    });\n    if (postorder) {\n      acc.push(v);\n    }\n  }\n}\n","import { dfs } from './dfs.js';\n\nexport { postorder };\n\n/**\n * This function performs a [postorder traversal][] of the graph `g` starting\n * at the nodes `vs`. For each node visited, `v`,  the function `callback(v)`\n * is called.\n *\n * [postorder traversal]: https://en.wikipedia.org/wiki/Tree_traversal#Depth-first\n *\n * @example\n *\n * ![](https://github.com/dagrejs/graphlib/wiki/images/preorder.png)\n *\n * ```js\n * graphlib.alg.postorder(g, \"A\");\n * // => One of:\n * // [ \"B\", \"D\", \"E\", C\", \"A\" ]\n * // [ \"B\", \"E\", \"D\", C\", \"A\" ]\n * // [ \"D\", \"E\", \"C\", B\", \"A\" ]\n * // [ \"E\", \"D\", \"C\", B\", \"A\" ]\n * ```\n *\n * @param {Parameters<typeof dfs>[0]} g - The graph to traverse.\n * @param {Parameters<typeof dfs>[1]} vs - Nodes to start the traversal from.\n * @returns {ReturnType<typeof dfs>} The nodes in the order they were visited.\n */\nfunction postorder(g, vs) {\n  return dfs(g, vs, 'post');\n}\n","import { dfs } from './dfs.js';\n\nexport { preorder };\n\n/**\n * This function performs a [preorder traversal][] of the graph `g` starting\n * at the nodes `vs`. For each node visited, `v`,  the function `callback(v)`\n * is called.\n *\n * [preorder traversal]: https://en.wikipedia.org/wiki/Tree_traversal#Depth-first\n *\n * @example\n *\n * ![](https://github.com/dagrejs/graphlib/wiki/images/preorder.png)\n * <!-- SOURCE:\n * http://dagrejs.github.io/project/dagre-d3/latest/demo/interactive-demo.html?graph=digraph%20%7B%0Anode%20%5Bshape%3Dcircle%2C%20style%3D%22fill%3Awhite%3Bstroke%3A%23333%3Bstroke-width%3A1.5px%22%5D%0Aedge%20%5Blabeloffset%3D2%20labelpos%3Dr%5D%0Arankdir%3Dlr%0A%20%20A%20-%3E%20B%0A%20%20A%20-%3E%20C%0A%20%20C%20-%3E%20D%0A%20%20C%20-%3E%20E%0A%7D\n * -->\n *\n * ```js\n * graphlib.alg.preorder(g, \"A\");\n * // => One of:\n * // [ \"A\", \"B\", \"C\", \"D\", \"E\" ]\n * // [ \"A\", \"B\", \"C\", \"E\", \"D\" ]\n * // [ \"A\", \"C\", \"D\", \"E\", \"B\" ]\n * // [ \"A\", \"C\", \"E\", \"D\", \"B\" ]\n * ```\n *\n * @param {Parameters<typeof dfs>[0]} g - The graph to traverse.\n * @param {Parameters<typeof dfs>[1]} vs - Nodes to start the traversal from.\n * @returns {ReturnType<typeof dfs>} The nodes in the order they were visited.\n */\nfunction preorder(g, vs) {\n  return dfs(g, vs, 'pre');\n}\n","import * as _ from 'lodash-es';\nimport * as alg from '../../graphlib/alg/index.js';\nimport { simplify } from '../util.js';\nimport { feasibleTree } from './feasible-tree.js';\nimport { longestPath, slack } from './util.js';\n\nexport { networkSimplex };\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n *    1. The input graph must be a DAG.\n *    2. All nodes in the graph must have an object value.\n *    3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n *    1. All nodes in the graph will have an assigned \"rank\" attribute that has\n *       been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n *    1. Assign initial ranks to each node. We use the longest path algorithm,\n *       which assigns ranks to the lowest position possible. In general this\n *       leads to very wide bottom ranks and unnecessarily long edges.\n *    2. Construct a feasible tight tree. A tight tree is one such that all\n *       edges in the tree have no slack (difference between length of edge\n *       and minlen for the edge). This by itself greatly improves the assigned\n *       rankings by shorting edges.\n *    3. Iteratively find edges that have negative cut values. Generally a\n *       negative cut value indicates that the edge could be removed and a new\n *       tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n  g = simplify(g);\n  longestPath(g);\n  var t = feasibleTree(g);\n  initLowLimValues(t);\n  initCutValues(t, g);\n\n  var e, f;\n  while ((e = leaveEdge(t))) {\n    f = enterEdge(t, g, e);\n    exchangeEdges(t, g, e, f);\n  }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n  var vs = alg.postorder(t, t.nodes());\n  vs = vs.slice(0, vs.length - 1);\n  _.forEach(vs, function (v) {\n    assignCutValue(t, g, v);\n  });\n}\n\nfunction assignCutValue(t, g, child) {\n  var childLab = t.node(child);\n  var parent = childLab.parent;\n  t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n  var childLab = t.node(child);\n  var parent = childLab.parent;\n  // True if the child is on the tail end of the edge in the directed graph\n  var childIsTail = true;\n  // The graph's view of the tree edge we're inspecting\n  var graphEdge = g.edge(child, parent);\n  // The accumulated cut value for the edge between this node and its parent\n  var cutValue = 0;\n\n  if (!graphEdge) {\n    childIsTail = false;\n    graphEdge = g.edge(parent, child);\n  }\n\n  cutValue = graphEdge.weight;\n\n  _.forEach(g.nodeEdges(child), function (e) {\n    var isOutEdge = e.v === child,\n      other = isOutEdge ? e.w : e.v;\n\n    if (other !== parent) {\n      var pointsToHead = isOutEdge === childIsTail,\n        otherWeight = g.edge(e).weight;\n\n      cutValue += pointsToHead ? otherWeight : -otherWeight;\n      if (isTreeEdge(t, child, other)) {\n        var otherCutValue = t.edge(child, other).cutvalue;\n        cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n      }\n    }\n  });\n\n  return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n  if (arguments.length < 2) {\n    root = tree.nodes()[0];\n  }\n  dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n  var low = nextLim;\n  var label = tree.node(v);\n\n  visited[v] = true;\n  _.forEach(tree.neighbors(v), function (w) {\n    if (!Object.prototype.hasOwnProperty.call(visited, w)) {\n      nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n    }\n  });\n\n  label.low = low;\n  label.lim = nextLim++;\n  if (parent) {\n    label.parent = parent;\n  } else {\n    // TODO should be able to remove this when we incrementally update low lim\n    delete label.parent;\n  }\n\n  return nextLim;\n}\n\nfunction leaveEdge(tree) {\n  return _.find(tree.edges(), function (e) {\n    return tree.edge(e).cutvalue < 0;\n  });\n}\n\nfunction enterEdge(t, g, edge) {\n  var v = edge.v;\n  var w = edge.w;\n\n  // For the rest of this function we assume that v is the tail and w is the\n  // head, so if we don't have this edge in the graph we should flip it to\n  // match the correct orientation.\n  if (!g.hasEdge(v, w)) {\n    v = edge.w;\n    w = edge.v;\n  }\n\n  var vLabel = t.node(v);\n  var wLabel = t.node(w);\n  var tailLabel = vLabel;\n  var flip = false;\n\n  // If the root is in the tail of the edge then we need to flip the logic that\n  // checks for the head and tail nodes in the candidates function below.\n  if (vLabel.lim > wLabel.lim) {\n    tailLabel = wLabel;\n    flip = true;\n  }\n\n  var candidates = _.filter(g.edges(), function (edge) {\n    return (\n      flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n      flip !== isDescendant(t, t.node(edge.w), tailLabel)\n    );\n  });\n\n  return _.minBy(candidates, function (edge) {\n    return slack(g, edge);\n  });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n  var v = e.v;\n  var w = e.w;\n  t.removeEdge(v, w);\n  t.setEdge(f.v, f.w, {});\n  initLowLimValues(t);\n  initCutValues(t, g);\n  updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n  var root = _.find(t.nodes(), function (v) {\n    return !g.node(v).parent;\n  });\n  var vs = alg.preorder(t, root);\n  vs = vs.slice(1);\n  _.forEach(vs, function (v) {\n    var parent = t.node(v).parent,\n      edge = g.edge(v, parent),\n      flipped = false;\n\n    if (!edge) {\n      edge = g.edge(parent, v);\n      flipped = true;\n    }\n\n    g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n  });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n  return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n  return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n","import { feasibleTree } from './feasible-tree.js';\nimport { networkSimplex } from './network-simplex.js';\nimport { longestPath } from './util.js';\n\nexport { rank };\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n *    1. Graph must be a connected DAG\n *    2. Graph nodes must be objects\n *    3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n *    1. Graph nodes will have a \"rank\" attribute based on the results of the\n *       algorithm. Ranks can start at any index (including negative), we'll\n *       fix them up later.\n */\nfunction rank(g) {\n  switch (g.graph().ranker) {\n    case 'network-simplex':\n      networkSimplexRanker(g);\n      break;\n    case 'tight-tree':\n      tightTreeRanker(g);\n      break;\n    case 'longest-path':\n      longestPathRanker(g);\n      break;\n    default:\n      networkSimplexRanker(g);\n  }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n  longestPath(g);\n  feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n  networkSimplex(g);\n}\n","import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, cleanup };\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n *    1. Input graph is a DAG\n *    2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n *    1. Input graph is connected.\n *    2. Dummy nodes are added for the tops and bottoms of subgraphs.\n *    3. The minlen attribute for nodes is adjusted to ensure nodes do not\n *       get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n  var root = util.addDummyNode(g, 'root', {}, '_root');\n  var depths = treeDepths(g);\n  var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n  var nodeSep = 2 * height + 1;\n\n  g.graph().nestingRoot = root;\n\n  // Multiply minlen by nodeSep to align nodes on non-border ranks.\n  _.forEach(g.edges(), function (e) {\n    g.edge(e).minlen *= nodeSep;\n  });\n\n  // Calculate a weight that is sufficient to keep subgraphs vertically compact\n  var weight = sumWeights(g) + 1;\n\n  // Create border nodes and link them up\n  _.forEach(g.children(), function (child) {\n    dfs(g, root, nodeSep, weight, height, depths, child);\n  });\n\n  // Save the multiplier for node layers for later removal of empty border\n  // layers.\n  g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n  var children = g.children(v);\n  if (!children.length) {\n    if (v !== root) {\n      g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n    }\n    return;\n  }\n\n  var top = util.addBorderNode(g, '_bt');\n  var bottom = util.addBorderNode(g, '_bb');\n  var label = g.node(v);\n\n  g.setParent(top, v);\n  label.borderTop = top;\n  g.setParent(bottom, v);\n  label.borderBottom = bottom;\n\n  _.forEach(children, function (child) {\n    dfs(g, root, nodeSep, weight, height, depths, child);\n\n    var childNode = g.node(child);\n    var childTop = childNode.borderTop ? childNode.borderTop : child;\n    var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n    var thisWeight = childNode.borderTop ? weight : 2 * weight;\n    var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n    g.setEdge(top, childTop, {\n      weight: thisWeight,\n      minlen: minlen,\n      nestingEdge: true,\n    });\n\n    g.setEdge(childBottom, bottom, {\n      weight: thisWeight,\n      minlen: minlen,\n      nestingEdge: true,\n    });\n  });\n\n  if (!g.parent(v)) {\n    g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n  }\n}\n\nfunction treeDepths(g) {\n  var depths = {};\n  function dfs(v, depth) {\n    var children = g.children(v);\n    if (children && children.length) {\n      _.forEach(children, function (child) {\n        dfs(child, depth + 1);\n      });\n    }\n    depths[v] = depth;\n  }\n  _.forEach(g.children(), function (v) {\n    dfs(v, 1);\n  });\n  return depths;\n}\n\nfunction sumWeights(g) {\n  return _.reduce(\n    g.edges(),\n    function (acc, e) {\n      return acc + g.edge(e).weight;\n    },\n    0,\n  );\n}\n\nfunction cleanup(g) {\n  var graphLabel = g.graph();\n  g.removeNode(graphLabel.nestingRoot);\n  delete graphLabel.nestingRoot;\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    if (edge.nestingEdge) {\n      g.removeEdge(e);\n    }\n  });\n}\n","import * as _ from 'lodash-es';\n\nexport { addSubgraphConstraints };\n\nfunction addSubgraphConstraints(g, cg, vs) {\n  var prev = {},\n    rootPrev;\n\n  _.forEach(vs, function (v) {\n    var child = g.parent(v),\n      parent,\n      prevChild;\n    while (child) {\n      parent = g.parent(child);\n      if (parent) {\n        prevChild = prev[parent];\n        prev[parent] = child;\n      } else {\n        prevChild = rootPrev;\n        rootPrev = child;\n      }\n      if (prevChild && prevChild !== child) {\n        cg.setEdge(prevChild, child);\n        return;\n      }\n      child = parent;\n    }\n  });\n\n  /*\n  function dfs(v) {\n    var children = v ? g.children(v) : g.children();\n    if (children.length) {\n      var min = Number.POSITIVE_INFINITY,\n          subgraphs = [];\n      _.each(children, function(child) {\n        var childMin = dfs(child);\n        if (g.children(child).length) {\n          subgraphs.push({ v: child, order: childMin });\n        }\n        min = Math.min(min, childMin);\n      });\n      _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n        cg.setEdge(prev.v, curr.v);\n        return curr;\n      });\n      return min;\n    }\n    return g.node(v).order;\n  }\n  dfs(undefined);\n  */\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\n\nexport { buildLayerGraph };\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n *    1. Input graph is a DAG\n *    2. Base nodes in the input graph have a rank attribute\n *    3. Subgraph nodes in the input graph has minRank and maxRank attributes\n *    4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n *    1. Output graph has all nodes in the movable rank with preserved\n *       hierarchy.\n *    2. Root nodes in the movable layer are made children of the node\n *       indicated by the root attribute of the graph.\n *    3. Non-movable nodes incident on movable nodes, selected by the\n *       relationship parameter, are included in the graph (without hierarchy).\n *    4. Edges incident on movable nodes, selected by the relationship\n *       parameter, are added to the output graph.\n *    5. The weights for copied edges are aggregated as need, since the output\n *       graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n  var root = createRootNode(g),\n    result = new Graph({ compound: true })\n      .setGraph({ root: root })\n      .setDefaultNodeLabel(function (v) {\n        return g.node(v);\n      });\n\n  _.forEach(g.nodes(), function (v) {\n    var node = g.node(v),\n      parent = g.parent(v);\n\n    if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) {\n      result.setNode(v);\n      result.setParent(v, parent || root);\n\n      // This assumes we have only short edges!\n      _.forEach(g[relationship](v), function (e) {\n        var u = e.v === v ? e.w : e.v,\n          edge = result.edge(u, v),\n          weight = !_.isUndefined(edge) ? edge.weight : 0;\n        result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n      });\n\n      if (Object.prototype.hasOwnProperty.call(node, 'minRank')) {\n        result.setNode(v, {\n          borderLeft: node.borderLeft[rank],\n          borderRight: node.borderRight[rank],\n        });\n      }\n    }\n  });\n\n  return result;\n}\n\nfunction createRootNode(g) {\n  var v;\n  while (g.hasNode((v = _.uniqueId('_root'))));\n  return v;\n}\n","import * as _ from 'lodash-es';\n\nexport { crossCount };\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n *    1. Input graph must be simple (not a multigraph), directed, and include\n *       only simple edges.\n *    2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n *    1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n  var cc = 0;\n  for (var i = 1; i < layering.length; ++i) {\n    cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);\n  }\n  return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n  // Sort all of the edges between the north and south layers by their position\n  // in the north layer and then the south. Map these edges to the position of\n  // their head in the south layer.\n  var southPos = _.zipObject(\n    southLayer,\n    _.map(southLayer, function (v, i) {\n      return i;\n    }),\n  );\n  var southEntries = _.flatten(\n    _.map(northLayer, function (v) {\n      return _.sortBy(\n        _.map(g.outEdges(v), function (e) {\n          return { pos: southPos[e.w], weight: g.edge(e).weight };\n        }),\n        'pos',\n      );\n    }),\n  );\n\n  // Build the accumulator tree\n  var firstIndex = 1;\n  while (firstIndex < southLayer.length) firstIndex <<= 1;\n  var treeSize = 2 * firstIndex - 1;\n  firstIndex -= 1;\n  var tree = _.map(new Array(treeSize), function () {\n    return 0;\n  });\n\n  // Calculate the weighted crossings\n  var cc = 0;\n  _.forEach(\n    // @ts-expect-error\n    southEntries.forEach(function (entry) {\n      var index = entry.pos + firstIndex;\n      tree[index] += entry.weight;\n      var weightSum = 0;\n      while (index > 0) {\n        if (index % 2) {\n          weightSum += tree[index + 1];\n        }\n        index = (index - 1) >> 1;\n        tree[index] += entry.weight;\n      }\n      cc += entry.weight * weightSum;\n    }),\n  );\n\n  return cc;\n}\n","import * as _ from 'lodash-es';\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nexport function initOrder(g) {\n  var visited = {};\n  var simpleNodes = _.filter(g.nodes(), function (v) {\n    return !g.children(v).length;\n  });\n  var maxRank = _.max(\n    _.map(simpleNodes, function (v) {\n      return g.node(v).rank;\n    }),\n  );\n  var layers = _.map(_.range(maxRank + 1), function () {\n    return [];\n  });\n\n  function dfs(v) {\n    if (_.has(visited, v)) return;\n    visited[v] = true;\n    var node = g.node(v);\n    layers[node.rank].push(v);\n    _.forEach(g.successors(v), dfs);\n  }\n\n  var orderedVs = _.sortBy(simpleNodes, function (v) {\n    return g.node(v).rank;\n  });\n  _.forEach(orderedVs, dfs);\n\n  return layers;\n}\n","import * as _ from 'lodash-es';\n\nexport { barycenter };\n\nfunction barycenter(g, movable) {\n  return _.map(movable, function (v) {\n    var inV = g.inEdges(v);\n    if (!inV.length) {\n      return { v: v };\n    } else {\n      var result = _.reduce(\n        inV,\n        function (acc, e) {\n          var edge = g.edge(e),\n            nodeU = g.node(e.v);\n          return {\n            sum: acc.sum + edge.weight * nodeU.order,\n            weight: acc.weight + edge.weight,\n          };\n        },\n        { sum: 0, weight: 0 },\n      );\n\n      return {\n        v: v,\n        barycenter: result.sum / result.weight,\n        weight: result.weight,\n      };\n    }\n  });\n}\n","import * as _ from 'lodash-es';\n\nexport { resolveConflicts };\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n *    1. Each entry has the form {v, barycenter, weight}, or if the node has\n *       no barycenter, then {v}.\n *\n * Returns:\n *\n *    A new list of entries of the form {vs, i, barycenter, weight}. The list\n *    `vs` may either be a singleton or it may be an aggregation of nodes\n *    ordered such that they do not violate constraints from the constraint\n *    graph. The property `i` is the lowest original index of any of the\n *    elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n  var mappedEntries = {};\n  _.forEach(entries, function (entry, i) {\n    var tmp = (mappedEntries[entry.v] = {\n      indegree: 0,\n      in: [],\n      out: [],\n      vs: [entry.v],\n      i: i,\n    });\n    if (!_.isUndefined(entry.barycenter)) {\n      // @ts-expect-error\n      tmp.barycenter = entry.barycenter;\n      // @ts-expect-error\n      tmp.weight = entry.weight;\n    }\n  });\n\n  _.forEach(cg.edges(), function (e) {\n    var entryV = mappedEntries[e.v];\n    var entryW = mappedEntries[e.w];\n    if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n      entryW.indegree++;\n      entryV.out.push(mappedEntries[e.w]);\n    }\n  });\n\n  var sourceSet = _.filter(mappedEntries, function (entry) {\n    // @ts-expect-error\n    return !entry.indegree;\n  });\n\n  return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n  var entries = [];\n\n  function handleIn(vEntry) {\n    return function (uEntry) {\n      if (uEntry.merged) {\n        return;\n      }\n      if (\n        _.isUndefined(uEntry.barycenter) ||\n        _.isUndefined(vEntry.barycenter) ||\n        uEntry.barycenter >= vEntry.barycenter\n      ) {\n        mergeEntries(vEntry, uEntry);\n      }\n    };\n  }\n\n  function handleOut(vEntry) {\n    return function (wEntry) {\n      wEntry['in'].push(vEntry);\n      if (--wEntry.indegree === 0) {\n        sourceSet.push(wEntry);\n      }\n    };\n  }\n\n  while (sourceSet.length) {\n    var entry = sourceSet.pop();\n    entries.push(entry);\n    _.forEach(entry['in'].reverse(), handleIn(entry));\n    _.forEach(entry.out, handleOut(entry));\n  }\n\n  return _.map(\n    _.filter(entries, function (entry) {\n      return !entry.merged;\n    }),\n    function (entry) {\n      return _.pick(entry, ['vs', 'i', 'barycenter', 'weight']);\n    },\n  );\n}\n\nfunction mergeEntries(target, source) {\n  var sum = 0;\n  var weight = 0;\n\n  if (target.weight) {\n    sum += target.barycenter * target.weight;\n    weight += target.weight;\n  }\n\n  if (source.weight) {\n    sum += source.barycenter * source.weight;\n    weight += source.weight;\n  }\n\n  target.vs = source.vs.concat(target.vs);\n  target.barycenter = sum / weight;\n  target.weight = weight;\n  target.i = Math.min(source.i, target.i);\n  source.merged = true;\n}\n","import * as _ from 'lodash-es';\nimport * as util from '../util.js';\n\nexport { sort };\n\nfunction sort(entries, biasRight) {\n  var parts = util.partition(entries, function (entry) {\n    return Object.prototype.hasOwnProperty.call(entry, 'barycenter');\n  });\n  var sortable = parts.lhs,\n    unsortable = _.sortBy(parts.rhs, function (entry) {\n      return -entry.i;\n    }),\n    vs = [],\n    sum = 0,\n    weight = 0,\n    vsIndex = 0;\n\n  sortable.sort(compareWithBias(!!biasRight));\n\n  vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n  _.forEach(sortable, function (entry) {\n    vsIndex += entry.vs.length;\n    vs.push(entry.vs);\n    sum += entry.barycenter * entry.weight;\n    weight += entry.weight;\n    vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n  });\n\n  var result = { vs: _.flatten(vs) };\n  if (weight) {\n    result.barycenter = sum / weight;\n    result.weight = weight;\n  }\n  return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n  var last;\n  while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n    unsortable.pop();\n    vs.push(last.vs);\n    index++;\n  }\n  return index;\n}\n\nfunction compareWithBias(bias) {\n  return function (entryV, entryW) {\n    if (entryV.barycenter < entryW.barycenter) {\n      return -1;\n    } else if (entryV.barycenter > entryW.barycenter) {\n      return 1;\n    }\n\n    return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n  };\n}\n","import * as _ from 'lodash-es';\nimport { barycenter } from './barycenter.js';\nimport { resolveConflicts } from './resolve-conflicts.js';\nimport { sort } from './sort.js';\n\nexport { sortSubgraph };\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n  var movable = g.children(v);\n  var node = g.node(v);\n  var bl = node ? node.borderLeft : undefined;\n  var br = node ? node.borderRight : undefined;\n  var subgraphs = {};\n\n  if (bl) {\n    movable = _.filter(movable, function (w) {\n      return w !== bl && w !== br;\n    });\n  }\n\n  var barycenters = barycenter(g, movable);\n  _.forEach(barycenters, function (entry) {\n    if (g.children(entry.v).length) {\n      var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n      subgraphs[entry.v] = subgraphResult;\n      if (Object.prototype.hasOwnProperty.call(subgraphResult, 'barycenter')) {\n        mergeBarycenters(entry, subgraphResult);\n      }\n    }\n  });\n\n  var entries = resolveConflicts(barycenters, cg);\n  expandSubgraphs(entries, subgraphs);\n\n  var result = sort(entries, biasRight);\n\n  if (bl) {\n    result.vs = _.flatten([bl, result.vs, br]);\n    if (g.predecessors(bl).length) {\n      var blPred = g.node(g.predecessors(bl)[0]),\n        brPred = g.node(g.predecessors(br)[0]);\n      if (!Object.prototype.hasOwnProperty.call(result, 'barycenter')) {\n        result.barycenter = 0;\n        result.weight = 0;\n      }\n      result.barycenter =\n        (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);\n      result.weight += 2;\n    }\n  }\n\n  return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n  _.forEach(entries, function (entry) {\n    entry.vs = _.flatten(\n      entry.vs.map(function (v) {\n        if (subgraphs[v]) {\n          return subgraphs[v].vs;\n        }\n        return v;\n      }),\n    );\n  });\n}\n\nfunction mergeBarycenters(target, other) {\n  if (!_.isUndefined(target.barycenter)) {\n    target.barycenter =\n      (target.barycenter * target.weight + other.barycenter * other.weight) /\n      (target.weight + other.weight);\n    target.weight += other.weight;\n  } else {\n    target.barycenter = other.barycenter;\n    target.weight = other.weight;\n  }\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\nimport { addSubgraphConstraints } from './add-subgraph-constraints.js';\nimport { buildLayerGraph } from './build-layer-graph.js';\nimport { crossCount } from './cross-count.js';\nimport { initOrder } from './init-order.js';\nimport { sortSubgraph } from './sort-subgraph.js';\n\nexport { order };\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n *    1. Graph must be DAG\n *    2. Graph nodes must be objects with a \"rank\" attribute\n *    3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n *    1. Graph nodes will have an \"order\" attribute based on the results of the\n *       algorithm.\n */\nfunction order(g) {\n  var maxRank = util.maxRank(g),\n    downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), 'inEdges'),\n    upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), 'outEdges');\n\n  var layering = initOrder(g);\n  assignOrder(g, layering);\n\n  var bestCC = Number.POSITIVE_INFINITY,\n    best;\n\n  for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n    sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n    layering = util.buildLayerMatrix(g);\n    var cc = crossCount(g, layering);\n    if (cc < bestCC) {\n      lastBest = 0;\n      best = _.cloneDeep(layering);\n      bestCC = cc;\n    }\n  }\n\n  assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n  return _.map(ranks, function (rank) {\n    return buildLayerGraph(g, rank, relationship);\n  });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n  var cg = new Graph();\n  _.forEach(layerGraphs, function (lg) {\n    var root = lg.graph().root;\n    var sorted = sortSubgraph(lg, root, cg, biasRight);\n    _.forEach(sorted.vs, function (v, i) {\n      lg.node(v).order = i;\n    });\n    addSubgraphConstraints(lg, cg, sorted.vs);\n  });\n}\n\nfunction assignOrder(g, layering) {\n  _.forEach(layering, function (layer) {\n    _.forEach(layer, function (v, i) {\n      g.node(v).order = i;\n    });\n  });\n}\n","import * as _ from 'lodash-es';\n\nexport { parentDummyChains };\n\nfunction parentDummyChains(g) {\n  var postorderNums = postorder(g);\n\n  _.forEach(g.graph().dummyChains, function (v) {\n    var node = g.node(v);\n    var edgeObj = node.edgeObj;\n    var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n    var path = pathData.path;\n    var lca = pathData.lca;\n    var pathIdx = 0;\n    var pathV = path[pathIdx];\n    var ascending = true;\n\n    while (v !== edgeObj.w) {\n      node = g.node(v);\n\n      if (ascending) {\n        while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) {\n          pathIdx++;\n        }\n\n        if (pathV === lca) {\n          ascending = false;\n        }\n      }\n\n      if (!ascending) {\n        while (\n          pathIdx < path.length - 1 &&\n          g.node((pathV = path[pathIdx + 1])).minRank <= node.rank\n        ) {\n          pathIdx++;\n        }\n        pathV = path[pathIdx];\n      }\n\n      g.setParent(v, pathV);\n      v = g.successors(v)[0];\n    }\n  });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n  var vPath = [];\n  var wPath = [];\n  var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n  var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n  var parent;\n  var lca;\n\n  // Traverse up from v to find the LCA\n  parent = v;\n  do {\n    parent = g.parent(parent);\n    vPath.push(parent);\n  } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n  lca = parent;\n\n  // Traverse from w to LCA\n  parent = w;\n  while ((parent = g.parent(parent)) !== lca) {\n    wPath.push(parent);\n  }\n\n  return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n  var result = {};\n  var lim = 0;\n\n  function dfs(v) {\n    var low = lim;\n    _.forEach(g.children(v), dfs);\n    result[v] = { low: low, lim: lim++ };\n  }\n  _.forEach(g.children(), dfs);\n\n  return result;\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nexport {\n  positionX,\n  findType1Conflicts,\n  findType2Conflicts,\n  addConflict,\n  hasConflict,\n  verticalAlignment,\n  horizontalCompaction,\n  alignCoordinates,\n  findSmallestWidthAlignment,\n  balance,\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n  /** @type {{[nodeId: string | number]: {[nodeId: string | number]: true}}} */\n  var conflicts = {};\n\n  function visitLayer(prevLayer, layer) {\n    var // last visited node in the previous layer that is incident on an inner\n      // segment.\n      k0 = 0,\n      // Tracks the last node in this layer scanned for crossings with a type-1\n      // segment.\n      scanPos = 0,\n      prevLayerLength = prevLayer.length,\n      lastNode = _.last(layer);\n\n    _.forEach(layer, function (v, i) {\n      var w = findOtherInnerSegmentNode(g, v),\n        k1 = w ? g.node(w).order : prevLayerLength;\n\n      if (w || v === lastNode) {\n        _.forEach(layer.slice(scanPos, i + 1), function (scanNode) {\n          _.forEach(g.predecessors(scanNode), function (u) {\n            var uLabel = g.node(u),\n              uPos = uLabel.order;\n            if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) {\n              addConflict(conflicts, u, scanNode);\n            }\n          });\n        });\n        // @ts-expect-error\n        scanPos = i + 1;\n        k0 = k1;\n      }\n    });\n\n    return layer;\n  }\n\n  _.reduce(layering, visitLayer);\n  return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n  /** @type {{[nodeId: string | number]: {[nodeId: string | number]: true}}} */\n  var conflicts = {};\n\n  function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n    var v;\n    _.forEach(_.range(southPos, southEnd), function (i) {\n      v = south[i];\n      if (g.node(v).dummy) {\n        _.forEach(g.predecessors(v), function (u) {\n          var uNode = g.node(u);\n          if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n            addConflict(conflicts, u, v);\n          }\n        });\n      }\n    });\n  }\n\n  function visitLayer(north, south) {\n    var prevNorthPos = -1,\n      nextNorthPos,\n      southPos = 0;\n\n    _.forEach(south, function (v, southLookahead) {\n      if (g.node(v).dummy === 'border') {\n        var predecessors = g.predecessors(v);\n        if (predecessors.length) {\n          nextNorthPos = g.node(predecessors[0]).order;\n          scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n          // @ts-expect-error\n          southPos = southLookahead;\n          prevNorthPos = nextNorthPos;\n        }\n      }\n      scan(south, southPos, south.length, nextNorthPos, north.length);\n    });\n\n    return south;\n  }\n\n  _.reduce(layering, visitLayer);\n  return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n  if (g.node(v).dummy) {\n    return _.find(g.predecessors(v), function (u) {\n      return g.node(u).dummy;\n    });\n  }\n}\n\n/**\n * Sets `conflicts[v][w] = true`, creating objects if needed.\n *\n * @param {{[nodeId: string | number]: {[nodeId: string | number]: true}}} conflicts - Object to set.\n * @param {string | number} v - First Node ID\n * @param {string | number} w - Second Node ID\n */\nfunction addConflict(conflicts, v, w) {\n  if (v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n\n  if (!Object.prototype.hasOwnProperty.call(conflicts, v)) {\n    // can't use conflicts[v] = {} since it's unsafe if v = `__proto__`\n    Object.defineProperty(conflicts, v, {\n      enumerable: true,\n      configurable: true,\n      value: {},\n      writable: true,\n    });\n  }\n  var conflictsV = conflicts[v];\n  Object.defineProperty(conflictsV, w, {\n    enumerable: true,\n    configurable: true,\n    value: true,\n    writable: true,\n  });\n}\n\nfunction hasConflict(conflicts, v, w) {\n  if (v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  return !!conflicts[v] && Object.prototype.hasOwnProperty.call(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n  var root = {},\n    align = {},\n    pos = {};\n\n  // We cache the position here based on the layering because the graph and\n  // layering may be out of sync. The layering matrix is manipulated to\n  // generate different extreme alignments.\n  _.forEach(layering, function (layer) {\n    _.forEach(layer, function (v, order) {\n      root[v] = v;\n      align[v] = v;\n      pos[v] = order;\n    });\n  });\n\n  _.forEach(layering, function (layer) {\n    var prevIdx = -1;\n    _.forEach(layer, function (v) {\n      var ws = neighborFn(v);\n      if (ws.length) {\n        ws = _.sortBy(ws, function (w) {\n          return pos[w];\n        });\n        var mp = (ws.length - 1) / 2;\n        for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n          var w = ws[i];\n          if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {\n            align[w] = v;\n            align[v] = root[v] = root[w];\n            prevIdx = pos[w];\n          }\n        }\n      }\n    });\n  });\n\n  return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n  // This portion of the algorithm differs from BK due to a number of problems.\n  // Instead of their algorithm we construct a new block graph and do two\n  // sweeps. The first sweep places blocks with the smallest possible\n  // coordinates. The second sweep removes unused space by moving blocks to the\n  // greatest coordinates without violating separation.\n  /** @type {Record<import('../../graphlib/graph.js').NodeID, number>} */\n  var xs = {},\n    blockG = buildBlockGraph(g, layering, root, reverseSep),\n    borderType = reverseSep ? 'borderLeft' : 'borderRight';\n\n  function iterate(setXsFunc, nextNodesFunc) {\n    var stack = blockG.nodes();\n    var elem = stack.pop();\n    var visited = {};\n    while (elem) {\n      if (visited[elem]) {\n        setXsFunc(elem);\n      } else {\n        visited[elem] = true;\n        stack.push(elem);\n        stack = stack.concat(nextNodesFunc(elem));\n      }\n\n      elem = stack.pop();\n    }\n  }\n\n  // First pass, assign smallest coordinates\n  function pass1(elem) {\n    xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) {\n      return Math.max(acc, xs[e.v] + blockG.edge(e));\n    }, 0);\n  }\n\n  // Second pass, assign greatest coordinates\n  function pass2(elem) {\n    var min = blockG.outEdges(elem).reduce(function (acc, e) {\n      return Math.min(acc, xs[e.w] - blockG.edge(e));\n    }, Number.POSITIVE_INFINITY);\n\n    var node = g.node(elem);\n    if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n      xs[elem] = Math.max(xs[elem], min);\n    }\n  }\n\n  iterate(pass1, blockG.predecessors.bind(blockG));\n  iterate(pass2, blockG.successors.bind(blockG));\n\n  // Assign x coordinates to all nodes\n  _.forEach(align, function (v) {\n    xs[v] = xs[root[v]];\n  });\n\n  return xs;\n}\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n  var blockGraph = new Graph(),\n    graphLabel = g.graph(),\n    sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n  _.forEach(layering, function (layer) {\n    var u;\n    _.forEach(layer, function (v) {\n      var vRoot = root[v];\n      blockGraph.setNode(vRoot);\n      if (u) {\n        var uRoot = root[u],\n          prevMax = blockGraph.edge(uRoot, vRoot);\n        blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n      }\n      u = v;\n    });\n  });\n\n  return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n  return _.minBy(_.values(xss), function (xs) {\n    var max = Number.NEGATIVE_INFINITY;\n    var min = Number.POSITIVE_INFINITY;\n\n    _.forIn(xs, function (x, v) {\n      var halfWidth = width(g, v) / 2;\n\n      max = Math.max(x + halfWidth, max);\n      min = Math.min(x - halfWidth, min);\n    });\n\n    return max - min;\n  });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n  var alignToVals = _.values(alignTo),\n    alignToMin = _.min(alignToVals),\n    alignToMax = _.max(alignToVals);\n\n  _.forEach(['u', 'd'], function (vert) {\n    _.forEach(['l', 'r'], function (horiz) {\n      var alignment = vert + horiz,\n        xs = xss[alignment],\n        delta;\n      if (xs === alignTo) return;\n\n      var xsVals = _.values(xs);\n      delta = horiz === 'l' ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n      if (delta) {\n        xss[alignment] = _.mapValues(xs, function (x) {\n          return x + delta;\n        });\n      }\n    });\n  });\n}\n\nfunction balance(xss, align) {\n  return _.mapValues(xss.ul, function (ignore, v) {\n    if (align) {\n      return xss[align.toLowerCase()][v];\n    } else {\n      var xs = _.sortBy(_.map(xss, v));\n      return (xs[1] + xs[2]) / 2;\n    }\n  });\n}\n\nfunction positionX(g) {\n  var layering = util.buildLayerMatrix(g);\n  var conflicts = _.merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering));\n\n  var xss = {};\n  var adjustedLayering;\n  _.forEach(['u', 'd'], function (vert) {\n    adjustedLayering = vert === 'u' ? layering : _.values(layering).reverse();\n    _.forEach(['l', 'r'], function (horiz) {\n      if (horiz === 'r') {\n        adjustedLayering = _.map(adjustedLayering, function (inner) {\n          return _.values(inner).reverse();\n        });\n      }\n\n      var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g);\n      var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n      var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r');\n      if (horiz === 'r') {\n        xs = _.mapValues(xs, function (x) {\n          return -x;\n        });\n      }\n      xss[vert + horiz] = xs;\n    });\n  });\n\n  var smallestWidth = findSmallestWidthAlignment(g, xss);\n  alignCoordinates(xss, smallestWidth);\n  return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n  return function (g, v, w) {\n    var vLabel = g.node(v);\n    var wLabel = g.node(w);\n    var sum = 0;\n    var delta;\n\n    sum += vLabel.width / 2;\n    if (Object.prototype.hasOwnProperty.call(vLabel, 'labelpos')) {\n      switch (vLabel.labelpos.toLowerCase()) {\n        case 'l':\n          delta = -vLabel.width / 2;\n          break;\n        case 'r':\n          delta = vLabel.width / 2;\n          break;\n      }\n    }\n    if (delta) {\n      sum += reverseSep ? delta : -delta;\n    }\n    delta = 0;\n\n    sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n    sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n    sum += wLabel.width / 2;\n    if (Object.prototype.hasOwnProperty.call(wLabel, 'labelpos')) {\n      switch (wLabel.labelpos.toLowerCase()) {\n        case 'l':\n          delta = wLabel.width / 2;\n          break;\n        case 'r':\n          delta = -wLabel.width / 2;\n          break;\n      }\n    }\n    if (delta) {\n      sum += reverseSep ? delta : -delta;\n    }\n    delta = 0;\n\n    return sum;\n  };\n}\n\nfunction width(g, v) {\n  return g.node(v).width;\n}\n","import * as _ from 'lodash-es';\nimport * as util from '../util.js';\nimport { positionX } from './bk.js';\n\nexport { position };\n\nfunction position(g) {\n  g = util.asNonCompoundGraph(g);\n\n  positionY(g);\n  _.forOwn(positionX(g), function (x, v) {\n    g.node(v).x = x;\n  });\n}\n\nfunction positionY(g) {\n  var layering = util.buildLayerMatrix(g);\n  var rankSep = g.graph().ranksep;\n  var prevY = 0;\n  _.forEach(layering, function (layer) {\n    var maxHeight = _.max(\n      _.map(layer, function (v) {\n        return g.node(v).height;\n      }),\n    );\n    _.forEach(layer, function (v) {\n      g.node(v).y = prevY + maxHeight / 2;\n    });\n    prevY += maxHeight + rankSep;\n  });\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { addBorderSegments } from './add-border-segments.js';\nimport * as coordinateSystem from './coordinate-system.js';\nimport * as acyclic from './acyclic.js';\nimport * as normalize from './normalize.js';\nimport { rank } from './rank/index.js';\nimport * as nestingGraph from './nesting-graph.js';\nimport { order } from './order/index.js';\nimport { parentDummyChains } from './parent-dummy-chains.js';\nimport { position } from './position/index.js';\nimport * as util from './util.js';\n\nexport { layout };\n\nfunction layout(g, opts) {\n  var time = opts && opts.debugTiming ? util.time : util.notime;\n  time('layout', () => {\n    var layoutGraph = time('  buildLayoutGraph', () => buildLayoutGraph(g));\n    time('  runLayout', () => runLayout(layoutGraph, time));\n    time('  updateInputGraph', () => updateInputGraph(g, layoutGraph));\n  });\n}\n\nfunction runLayout(g, time) {\n  time('    makeSpaceForEdgeLabels', () => makeSpaceForEdgeLabels(g));\n  time('    removeSelfEdges', () => removeSelfEdges(g));\n  time('    acyclic', () => acyclic.run(g));\n  time('    nestingGraph.run', () => nestingGraph.run(g));\n  time('    rank', () => rank(util.asNonCompoundGraph(g)));\n  time('    injectEdgeLabelProxies', () => injectEdgeLabelProxies(g));\n  time('    removeEmptyRanks', () => util.removeEmptyRanks(g));\n  time('    nestingGraph.cleanup', () => nestingGraph.cleanup(g));\n  time('    normalizeRanks', () => util.normalizeRanks(g));\n  time('    assignRankMinMax', () => assignRankMinMax(g));\n  time('    removeEdgeLabelProxies', () => removeEdgeLabelProxies(g));\n  time('    normalize.run', () => normalize.run(g));\n  time('    parentDummyChains', () => parentDummyChains(g));\n  time('    addBorderSegments', () => addBorderSegments(g));\n  time('    order', () => order(g));\n  time('    insertSelfEdges', () => insertSelfEdges(g));\n  time('    adjustCoordinateSystem', () => coordinateSystem.adjust(g));\n  time('    position', () => position(g));\n  time('    positionSelfEdges', () => positionSelfEdges(g));\n  time('    removeBorderNodes', () => removeBorderNodes(g));\n  time('    normalize.undo', () => normalize.undo(g));\n  time('    fixupEdgeLabelCoords', () => fixupEdgeLabelCoords(g));\n  time('    undoCoordinateSystem', () => coordinateSystem.undo(g));\n  time('    translateGraph', () => translateGraph(g));\n  time('    assignNodeIntersects', () => assignNodeIntersects(g));\n  time('    reversePoints', () => reversePointsForReversedEdges(g));\n  time('    acyclic.undo', () => acyclic.undo(g));\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n  _.forEach(inputGraph.nodes(), function (v) {\n    var inputLabel = inputGraph.node(v);\n    var layoutLabel = layoutGraph.node(v);\n\n    if (inputLabel) {\n      inputLabel.x = layoutLabel.x;\n      inputLabel.y = layoutLabel.y;\n\n      if (layoutGraph.children(v).length) {\n        inputLabel.width = layoutLabel.width;\n        inputLabel.height = layoutLabel.height;\n      }\n    }\n  });\n\n  _.forEach(inputGraph.edges(), function (e) {\n    var inputLabel = inputGraph.edge(e);\n    var layoutLabel = layoutGraph.edge(e);\n\n    inputLabel.points = layoutLabel.points;\n    if (Object.prototype.hasOwnProperty.call(layoutLabel, 'x')) {\n      inputLabel.x = layoutLabel.x;\n      inputLabel.y = layoutLabel.y;\n    }\n  });\n\n  inputGraph.graph().width = layoutGraph.graph().width;\n  inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' };\nvar graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'];\nvar nodeNumAttrs = ['width', 'height'];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'];\nvar edgeDefaults = {\n  minlen: 1,\n  weight: 1,\n  width: 0,\n  height: 0,\n  labeloffset: 10,\n  labelpos: 'r',\n};\nvar edgeAttrs = ['labelpos'];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n  var g = new Graph({ multigraph: true, compound: true });\n  var graph = canonicalize(inputGraph.graph());\n\n  g.setGraph(\n    _.merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), _.pick(graph, graphAttrs)),\n  );\n\n  _.forEach(inputGraph.nodes(), function (v) {\n    var node = canonicalize(inputGraph.node(v));\n    g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n    g.setParent(v, inputGraph.parent(v));\n  });\n\n  _.forEach(inputGraph.edges(), function (e) {\n    var edge = canonicalize(inputGraph.edge(e));\n    g.setEdge(\n      e,\n      _.merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), _.pick(edge, edgeAttrs)),\n    );\n  });\n\n  return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n  var graph = g.graph();\n  graph.ranksep /= 2;\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    edge.minlen *= 2;\n    if (edge.labelpos.toLowerCase() !== 'c') {\n      if (graph.rankdir === 'TB' || graph.rankdir === 'BT') {\n        edge.width += edge.labeloffset;\n      } else {\n        edge.height += edge.labeloffset;\n      }\n    }\n  });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    if (edge.width && edge.height) {\n      var v = g.node(e.v);\n      var w = g.node(e.w);\n      var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n      util.addDummyNode(g, 'edge-proxy', label, '_ep');\n    }\n  });\n}\n\nfunction assignRankMinMax(g) {\n  var maxRank = 0;\n  _.forEach(g.nodes(), function (v) {\n    var node = g.node(v);\n    if (node.borderTop) {\n      node.minRank = g.node(node.borderTop).rank;\n      node.maxRank = g.node(node.borderBottom).rank;\n      // @ts-expect-error\n      maxRank = _.max(maxRank, node.maxRank);\n    }\n  });\n  g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n  _.forEach(g.nodes(), function (v) {\n    var node = g.node(v);\n    if (node.dummy === 'edge-proxy') {\n      g.edge(node.e).labelRank = node.rank;\n      g.removeNode(v);\n    }\n  });\n}\n\nfunction translateGraph(g) {\n  var minX = Number.POSITIVE_INFINITY;\n  var maxX = 0;\n  var minY = Number.POSITIVE_INFINITY;\n  var maxY = 0;\n  var graphLabel = g.graph();\n  var marginX = graphLabel.marginx || 0;\n  var marginY = graphLabel.marginy || 0;\n\n  function getExtremes(attrs) {\n    var x = attrs.x;\n    var y = attrs.y;\n    var w = attrs.width;\n    var h = attrs.height;\n    minX = Math.min(minX, x - w / 2);\n    maxX = Math.max(maxX, x + w / 2);\n    minY = Math.min(minY, y - h / 2);\n    maxY = Math.max(maxY, y + h / 2);\n  }\n\n  _.forEach(g.nodes(), function (v) {\n    getExtremes(g.node(v));\n  });\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n      getExtremes(edge);\n    }\n  });\n\n  minX -= marginX;\n  minY -= marginY;\n\n  _.forEach(g.nodes(), function (v) {\n    var node = g.node(v);\n    node.x -= minX;\n    node.y -= minY;\n  });\n\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    _.forEach(edge.points, function (p) {\n      p.x -= minX;\n      p.y -= minY;\n    });\n    if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n      edge.x -= minX;\n    }\n    if (Object.prototype.hasOwnProperty.call(edge, 'y')) {\n      edge.y -= minY;\n    }\n  });\n\n  graphLabel.width = maxX - minX + marginX;\n  graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    var nodeV = g.node(e.v);\n    var nodeW = g.node(e.w);\n    var p1, p2;\n    if (!edge.points) {\n      edge.points = [];\n      p1 = nodeW;\n      p2 = nodeV;\n    } else {\n      p1 = edge.points[0];\n      p2 = edge.points[edge.points.length - 1];\n    }\n    edge.points.unshift(util.intersectRect(nodeV, p1));\n    edge.points.push(util.intersectRect(nodeW, p2));\n  });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    if (Object.prototype.hasOwnProperty.call(edge, 'x')) {\n      if (edge.labelpos === 'l' || edge.labelpos === 'r') {\n        edge.width -= edge.labeloffset;\n      }\n      switch (edge.labelpos) {\n        case 'l':\n          edge.x -= edge.width / 2 + edge.labeloffset;\n          break;\n        case 'r':\n          edge.x += edge.width / 2 + edge.labeloffset;\n          break;\n      }\n    }\n  });\n}\n\nfunction reversePointsForReversedEdges(g) {\n  _.forEach(g.edges(), function (e) {\n    var edge = g.edge(e);\n    if (edge.reversed) {\n      edge.points.reverse();\n    }\n  });\n}\n\nfunction removeBorderNodes(g) {\n  _.forEach(g.nodes(), function (v) {\n    if (g.children(v).length) {\n      var node = g.node(v);\n      var t = g.node(node.borderTop);\n      var b = g.node(node.borderBottom);\n      var l = g.node(_.last(node.borderLeft));\n      var r = g.node(_.last(node.borderRight));\n\n      node.width = Math.abs(r.x - l.x);\n      node.height = Math.abs(b.y - t.y);\n      node.x = l.x + node.width / 2;\n      node.y = t.y + node.height / 2;\n    }\n  });\n\n  _.forEach(g.nodes(), function (v) {\n    if (g.node(v).dummy === 'border') {\n      g.removeNode(v);\n    }\n  });\n}\n\nfunction removeSelfEdges(g) {\n  _.forEach(g.edges(), function (e) {\n    if (e.v === e.w) {\n      var node = g.node(e.v);\n      if (!node.selfEdges) {\n        node.selfEdges = [];\n      }\n      node.selfEdges.push({ e: e, label: g.edge(e) });\n      g.removeEdge(e);\n    }\n  });\n}\n\nfunction insertSelfEdges(g) {\n  var layers = util.buildLayerMatrix(g);\n  _.forEach(layers, function (layer) {\n    var orderShift = 0;\n    _.forEach(layer, function (v, i) {\n      var node = g.node(v);\n      node.order = i + orderShift;\n      _.forEach(node.selfEdges, function (selfEdge) {\n        util.addDummyNode(\n          g,\n          'selfedge',\n          {\n            width: selfEdge.label.width,\n            height: selfEdge.label.height,\n            rank: node.rank,\n            order: i + ++orderShift,\n            e: selfEdge.e,\n            label: selfEdge.label,\n          },\n          '_se',\n        );\n      });\n      delete node.selfEdges;\n    });\n  });\n}\n\nfunction positionSelfEdges(g) {\n  _.forEach(g.nodes(), function (v) {\n    var node = g.node(v);\n    if (node.dummy === 'selfedge') {\n      var selfNode = g.node(node.e.v);\n      var x = selfNode.x + selfNode.width / 2;\n      var y = selfNode.y;\n      var dx = node.x - x;\n      var dy = selfNode.height / 2;\n      g.setEdge(node.e, node.label);\n      g.removeNode(v);\n      node.label.points = [\n        { x: x + (2 * dx) / 3, y: y - dy },\n        { x: x + (5 * dx) / 6, y: y - dy },\n        { x: x + dx, y: y },\n        { x: x + (5 * dx) / 6, y: y + dy },\n        { x: x + (2 * dx) / 3, y: y + dy },\n      ];\n      node.label.x = node.x;\n      node.label.y = node.y;\n    }\n  });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n  return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n  var newAttrs = {};\n  _.forEach(attrs, function (v, k) {\n    newAttrs[k.toLowerCase()] = v;\n  });\n  return newAttrs;\n}\n"],"names":["reWhitespace","trimmedEndIndex","string","index","reTrimStart","baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","value","isSymbol","isObject","other","isBinary","INFINITY","MAX_INTEGER","toFinite","sign","toInteger","result","remainder","objectCreate","baseCreate","object","proto","copyArray","source","array","length","baseAssignValue","key","defineProperty","objectProto","hasOwnProperty","assignValue","objValue","eq","copyObject","props","customizer","isNew","newValue","isIterateeCall","type","isArrayLike","isIndex","createAssigner","assigner","baseRest","sources","guard","nativeKeysIn","baseKeysIn","isProto","isPrototype","keysIn","arrayLikeKeys","flatten","baseFlatten","flatRest","func","setToString","overRest","getPrototype","overArg","objectTag","funcProto","funcToString","objectCtorString","isPlainObject","isObjectLike","baseGetTag","Ctor","baseAssign","keys","baseAssignIn","freeExports","freeModule","moduleExports","Buffer","root","allocUnsafe","cloneBuffer","buffer","isDeep","copySymbols","getSymbols","nativeGetSymbols","getSymbolsIn","arrayPush","stubArray","copySymbolsIn","getAllKeysIn","baseGetAllKeys","initCloneArray","cloneArrayBuffer","arrayBuffer","Uint8Array","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolProto","Symbol","symbolValueOf","cloneSymbol","symbol","cloneTypedArray","typedArray","boolTag","dateTag","mapTag","numberTag","regexpTag","setTag","stringTag","symbolTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","initCloneByTag","tag","initCloneObject","baseIsMap","getTag","nodeIsMap","nodeUtil","isMap","baseUnary","baseIsSet","nodeIsSet","isSet","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","argsTag","arrayTag","errorTag","funcTag","genTag","weakMapTag","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","isArr","isArray","isFunc","isBuffer","Stack","stacked","subValue","keysFunc","getAllKeys","arrayEach","cloneDeep","defaults","propsIndex","propsLength","assignMergeValue","safeGet","toPlainObject","baseMergeDeep","srcIndex","mergeFunc","srcValue","isCommon","isBuff","isTyped","isTypedArray","isArrayLikeObject","isArguments","isFunction","baseMerge","baseFor","last","createFind","findIndexFunc","collection","predicate","fromIndex","iterable","iteratee","baseIteratee","nativeMax","findIndex","baseFindIndex","find","baseMap","baseEach","map","arrayMap","forIn","castFunction","forOwn","baseForOwn","baseGt","baseHas","has","path","hasPath","baseLt","mapValues","baseExtremum","comparator","current","computed","max","identity","merge","min","minBy","baseSet","castPath","lastIndex","nested","toKey","basePickBy","paths","baseGet","baseSortBy","comparer","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","baseOrderBy","iteratees","criteria","basePick","hasIn","pick","nativeCeil","baseRange","start","end","step","fromRight","createRange","range","sortBy","idCounter","uniqueId","prefix","id","toString","baseZipObject","values","assignFunc","valsLength","zipObject","List","sentinel","entry","unlink","strs","curr","filterOutLinks","k","v","DEFAULT_WEIGHT_FN","_.constant","greedyFAS","g","weightFn","state","buildState","results","doGreedyFAS","_.flatten","_.map","e","buckets","zeroIdx","sinks","removeNode","i","collectPredecessors","_.forEach","edge","weight","uEntry","assignBucket","w","wEntry","fasGraph","Graph","maxIn","maxOut","prevWeight","edgeWeight","_.range","run","fas","dfsFAS","label","_.uniqueId","visited","dfs","undo","forwardName","addDummyNode","attrs","name","simplify","simplified","simpleLabel","asNonCompoundGraph","intersectRect","rect","point","x","y","dx","dy","h","sx","sy","buildLayerMatrix","layering","maxRank","node","rank","_.isUndefined","normalizeRanks","_.min","_.has","removeEmptyRanks","offset","layers","delta","nodeRankFactor","vs","addBorderNode","_.max","partition","fn","notime","addBorderSegments","children","prop","sg","sgNode","prev","util.addDummyNode","adjust","rankDir","swapWidthHeight","reverseY","swapXY","swapWidthHeightOne","reverseYOne","swapXYOne","normalizeEdge","vRank","wRank","edgeLabel","labelRank","dummy","origLabel","longestPath","slack","feasibleTree","t","size","tightTree","findMinSlackEdge","shiftRanks","edgeV","_.minBy","CycleException","_.isArray","navigation","acc","_.each","doDfs","postorder","preorder","networkSimplex","initLowLimValues","initCutValues","calcCutValue","leaveEdge","enterEdge","exchangeEdges","f","alg.postorder","assignCutValue","child","childLab","parent","childIsTail","graphEdge","cutValue","isOutEdge","pointsToHead","otherWeight","isTreeEdge","otherCutValue","tree","dfsAssignLowLim","nextLim","low","_.find","vLabel","wLabel","tailLabel","flip","candidates","_.filter","isDescendant","updateRanks","alg.preorder","flipped","u","rootLabel","networkSimplexRanker","tightTreeRanker","longestPathRanker","depths","treeDepths","height","_.values","nodeSep","sumWeights","top","util.addBorderNode","bottom","childNode","childTop","childBottom","thisWeight","minlen","depth","_.reduce","cleanup","graphLabel","addSubgraphConstraints","cg","rootPrev","prevChild","buildLayerGraph","relationship","createRootNode","crossCount","cc","twoLayerCrossCount","northLayer","southLayer","southPos","_.zipObject","southEntries","_.sortBy","firstIndex","treeSize","weightSum","initOrder","simpleNodes","orderedVs","barycenter","movable","inV","nodeU","resolveConflicts","entries","mappedEntries","tmp","entryV","entryW","sourceSet","doResolveConflicts","handleIn","vEntry","mergeEntries","handleOut","_.pick","target","sum","sort","biasRight","parts","util.partition","sortable","unsortable","vsIndex","compareWithBias","consumeUnsortable","_.last","bias","sortSubgraph","bl","br","subgraphs","barycenters","subgraphResult","mergeBarycenters","expandSubgraphs","blPred","brPred","util.maxRank","downLayerGraphs","buildLayerGraphs","upLayerGraphs","assignOrder","bestCC","best","lastBest","sweepLayerGraphs","util.buildLayerMatrix","_.cloneDeep","ranks","layerGraphs","lg","sorted","layer","parentDummyChains","postorderNums","edgeObj","pathData","findPath","lca","pathIdx","pathV","ascending","vPath","wPath","lim","findType1Conflicts","conflicts","visitLayer","prevLayer","k0","scanPos","prevLayerLength","lastNode","findOtherInnerSegmentNode","k1","scanNode","uLabel","uPos","addConflict","findType2Conflicts","scan","south","southEnd","prevNorthBorder","nextNorthBorder","uNode","north","prevNorthPos","nextNorthPos","southLookahead","predecessors","conflictsV","hasConflict","verticalAlignment","neighborFn","align","pos","prevIdx","ws","mp","il","horizontalCompaction","reverseSep","xs","blockG","buildBlockGraph","borderType","iterate","setXsFunc","nextNodesFunc","elem","pass1","pass2","blockGraph","sepFn","sep","vRoot","uRoot","prevMax","findSmallestWidthAlignment","xss","_.forIn","halfWidth","width","alignCoordinates","alignTo","alignToVals","alignToMin","alignToMax","vert","horiz","alignment","xsVals","_.mapValues","balance","ignore","positionX","_.merge","adjustedLayering","inner","smallestWidth","edgeSep","position","util.asNonCompoundGraph","positionY","_.forOwn","rankSep","prevY","maxHeight","layout","opts","time","util.notime","layoutGraph","buildLayoutGraph","runLayout","updateInputGraph","makeSpaceForEdgeLabels","removeSelfEdges","acyclic.run","nestingGraph.run","injectEdgeLabelProxies","util.removeEmptyRanks","nestingGraph.cleanup","util.normalizeRanks","assignRankMinMax","removeEdgeLabelProxies","normalize.run","insertSelfEdges","coordinateSystem.adjust","positionSelfEdges","removeBorderNodes","normalize.undo","fixupEdgeLabelCoords","coordinateSystem.undo","translateGraph","assignNodeIntersects","reversePointsForReversedEdges","acyclic.undo","inputGraph","inputLabel","layoutLabel","graphNumAttrs","graphDefaults","graphAttrs","nodeNumAttrs","nodeDefaults","edgeNumAttrs","edgeDefaults","edgeAttrs","graph","canonicalize","selectNumberAttrs","_.defaults","minX","maxX","minY","maxY","marginX","marginY","getExtremes","p","nodeV","nodeW","p1","p2","util.intersectRect","b","l","r","orderShift","selfEdge","selfNode","obj","newAttrs"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107]}